LinkedList in Structure (Anwendung wie bei PB-LL)
Verfasst: 09.01.2008 03:31
Das Include würde mit PureBasic-Update 4.50 überflüssig, da dort nun Listen in Strukturen erlaubt sind.
Tachchen,
Dies ist eine Include die es ermöglicht LinkedLists in anderen LinkedLists oder Strukturen zu erstellen und deren Anwendung fast genau so ist, wie die, der "echte" LinkedList in PureBasic.
Hier die Include.pbi : Nicht mehr verfügbar!
Diese LinkedList kann man überall erstellen :
- in LinkedLists von PB
- in LinkedLists von dieser Art hier
- in Structuren
Alle Proceduren arbeiten genau so wie die echten von PureBasic, und haben auch die gleiche Bezeichnung mit einem _ als Merkmal.
KleineUnterschiede:
NewList_(Variable, Structurename)
- Hier muss die Variabel die eine LinkedList werden soll und deren StructureName angegeben werden.
! Dabei muss der StructureName kleingeschrieben werden !
CurrentElement_(Variable)
- Bei PureBasic LLs kann einfach mit @LinkedList() der aktuelle Pointer ausgegeben werden. Bei diesen hier muss dies mit CurrentElement_(Variable) ausgelesen werden.
Structuren für diese LinkedList müssen mit den dafür vorgesehenen Macros erstellt werden:
Structure_(StructureName)
EndStructure_(StructureName)
(Dadurch wird die Speicherfreigabe ermöglicht)
Hier ein Beispiel wie es dann im Code aussieht:
- FreeList_() ist jetzt drin
UPDATE 1.0.2:
- BUGFIX
UPDATE 1.3.1:
- Speicher werden nun wirklich komplett freigegeben bei DeleteElement
- FreeList, ClearList (dank mk-soft)
UPDATE 1.3.2:
- kleines Problem behoben
UPDATE 1.3.3:
- IndexFehler bei SelectElement_() behoben
UPDATE 1.4.0:
- verschiedene IndexFehler behoben
- Bugs bei Elementreihenfolge behoben in verbindung mit FirstElement und LastElement
- Erweiterung für 64Bit Pointer.
Tachchen,
Dies ist eine Include die es ermöglicht LinkedLists in anderen LinkedLists oder Strukturen zu erstellen und deren Anwendung fast genau so ist, wie die, der "echte" LinkedList in PureBasic.
Hier die Include.pbi : Nicht mehr verfügbar!
Diese LinkedList kann man überall erstellen :
- in LinkedLists von PB
- in LinkedLists von dieser Art hier
- in Structuren
Alle Proceduren arbeiten genau so wie die echten von PureBasic, und haben auch die gleiche Bezeichnung mit einem _ als Merkmal.
KleineUnterschiede:
NewList_(Variable, Structurename)
- Hier muss die Variabel die eine LinkedList werden soll und deren StructureName angegeben werden.
! Dabei muss der StructureName kleingeschrieben werden !
CurrentElement_(Variable)
- Bei PureBasic LLs kann einfach mit @LinkedList() der aktuelle Pointer ausgegeben werden. Bei diesen hier muss dies mit CurrentElement_(Variable) ausgelesen werden.
Structuren für diese LinkedList müssen mit den dafür vorgesehenen Macros erstellt werden:
Structure_(StructureName)
EndStructure_(StructureName)
(Dadurch wird die Speicherfreigabe ermöglicht)
Hier ein Beispiel wie es dann im Code aussieht:
UPDATE 1.0.1:Code in PureBasic hat geschrieben:IncludeFile "LinkedList.pbi"
; Beispiel
;==========
Structure_(waffe)
Nummer.l
Gewicht.f
Name$
EndStructure_(waffe)
Structure_(mensch)
Name$
xPos.l
yPos.l
Waffe.Waffe
EndStructure_(mensch)
NewList_(Mensch.Mensch, mensch)
For n = 1 To 4
AddElement_(Mensch)
Mensch\Name$ = "Vorname"+Str(ListIndex_(Mensch))+" Nachname"+Str(ListIndex_(Mensch))
Mensch\xPos = Random(1000)
Mensch\yPos = Random(1000)
NewList_(Mensch\Waffe, waffe)
Anzahl = Random(3)+2
For i = 1 To Anzahl
InsertElement_(Mensch\Waffe)
Mensch\Waffe\Nummer = i*i
Mensch\Waffe\Gewicht = Sqr(i+i)
Mensch\Waffe\Name$ = "Waffenname"+Str(i)
Next i
Next n
ResetList_(Mensch)
While NextElement_(Mensch)
Debug "========="
Debug "Element:"+Str(ListIndex_(Mensch))
Debug "Name="+Mensch\Name$
Debug "x="+Str(Mensch\xPos)
Debug "y="+Str(Mensch\yPos)
Debug "Waffen >"
Debug "---------"
ResetList_(Mensch\Waffe)
While NextElement_(Mensch\Waffe)
Debug " Waffe:"+Str(ListIndex_(Mensch\Waffe))
Debug " Name="+Mensch\Waffe\Name$
Debug " Nummer="+Str(Mensch\Waffe\Nummer)
Debug " Gewischt="+StrF(Mensch\Waffe\Gewicht)
Wend
Debug "---------"
Wend
- FreeList_() ist jetzt drin
UPDATE 1.0.2:
- BUGFIX
UPDATE 1.3.1:
- Speicher werden nun wirklich komplett freigegeben bei DeleteElement
- FreeList, ClearList (dank mk-soft)
UPDATE 1.3.2:
- kleines Problem behoben
UPDATE 1.3.3:
- IndexFehler bei SelectElement_() behoben
UPDATE 1.4.0:
- verschiedene IndexFehler behoben
- Bugs bei Elementreihenfolge behoben in verbindung mit FirstElement und LastElement
- Erweiterung für 64Bit Pointer.