BuildStructuredArray()
Verfasst: 13.08.2009 19:07
Mit diesem Code kann man schnell und einfach ein strukturiertes Array dynamisch erstellen und "PB-Like" darauf zugreifen. Hält den Source übersichtlich.
Inkl. Subarrays.
Gruß, Alex
Inkl. Subarrays.
Code: Alles auswählen
; ------------------------------------------------------------------------------------
; Build Structured Array
; Schnell dynamische Strukturierte Arrays erstellen
;
; Author: Alexander Aigner
; PB 4.3 +
; ------------------------------------------------------------------------------------
Macro _Macro1
M
EndMacro
Macro _Macro2
acro
EndMacro
Macro _Macro
: _Macro1#_Macro2
EndMacro
Macro _EndOfMacro1
EndM
EndMacro
Macro _EndOfMacro2
acro
EndMacro
Macro _EndOfMacro
: _EndOfMacro1#_EndOfMacro2
EndMacro
Macro FreeArray(_Array)
FreeMemory(*_Array)
EndMacro
Macro FreeSubArray(_Array, _SubArray)
If Not Defined(fsa_i, #PB_Variable)
Define fsa_i
EndIf
For fsa_i = 0 To _Array#_Array_Size-1
FreeMemory(*_Array#\Entry[fsa_i]\_SubArray)
Next
EndMacro
Macro BuildHolder(_Structure)
Structure _Structure#_Holder
Entry._Structure#[0]
EndStructure
EndMacro
Macro BuildStructuredArray(_Name, _Structure, _Size, _Scope = Global)
Define _Name#_Array_Size
_Name#_Array_Size = _Size
_Scope*_Name._Structure#_Holder
*_Name = AllocateMemory(_Size*SizeOf(_Structure))
_Macro _Name(_Index)
*_Name#\Entry[_Index]_EndOfMacro
EndMacro
Macro BuildStructuredSubArray(_HolderArray, _HolderEntry, _Structure, _Size)
If Not Defined(bssa_i, #PB_Variable)
Define bssa_i
EndIf
For bssa_i = 0 To _HolderArray#_Array_Size-1
*_HolderArray\Entry[bssa_i]\_HolderEntry = AllocateMemory(SizeOf(_Structure)*_Size)
Next
_Macro _HolderEntry(_Index)
_HolderEntry#\Entry[_Index]_EndOfMacro
EndMacro
Macro StructuredArray(_Name, _Structure)
*_Name#._Structure#_Holder
EndMacro
; Democode
; Demo - Struktur
Structure MyData
Count.i
*XData
*Handle
; Subarray - Einträge
StructuredArray(SubArray, MyData)
StructuredArray(SubArray2, MyData)
EndStructure
; Holder für MyData-Struct erstellen
BuildHolder(MyData)
; Array erstellen
; Achtung, 10 Felder = 0-9
BuildStructuredArray(MyArray, MyData, 11)
; Subarray erstellen
BuildStructuredSubArray(MyArray, SubArray, MyData, 10)
BuildStructuredSubArray(MyArray, SubArray2, MyData, 10)
; Wert setzen
MyArray(1)\SubArray(3)\XData = 100
MyArray(2)\SubArray(4)\XData = 345
MyArray(2)\SubArray2(8)\XData = 123
; Wert lesen
Debug MyArray(1)\SubArray(3)\XData
Debug MyArray(2)\SubArray(4)\XData
Debug MyArray(2)\SubArray2(8)\XData
; Array freigeben
FreeSubArray(MyArray, SubArray)
FreeSubArray(MyArray, SubArray2)
FreeArray(MyArray)