;
; ------------------------------------------------------------
;
;   PureBasic - Linked list example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

Structure BasicStructure 
    Field1.b
    Field2.w
    Field3.l
EndStructure

Structure ComplexStructure
    Field1.b
   *Basic.BasicStructure              ; Pointer to a BasicStructure object
    Basic2.BasicStructure             ; Creation of the BasicStructure object inside this structure
   *Next.ComplexStructure             ; Pointer to another ComplexStructure object
EndStructure

NewList TestList.BasicStructure()

;
;-------- Add Elements and TestLists --------
;

AddElement(TestList())
TestList()\Field2 = 1

AddElement(TestList())
TestList()\Field2 = 2

AddElement(TestList())
TestList()\Field2 = 3

AddElement(TestList())
TestList()\Field2 = 4

;
;-------- MessageRequester("Number of elements in the list:", Str(TestList()\Field2), 0) --------
;

MessageRequester("Number of elements in the list:", Str(ListSize(TestList())), 0)

; First way to list all the elements
;
ResetList(TestList())               ; Reset the list index before the first element.

While NextElement(TestList())       ; Process all the elements...
  MessageRequester("List elements :", "Field2 value : "+Str(TestList()\Field2), 0)
Wend

; Second way, with the help of ForEach
;
ForEach TestList()       ; Process all the elements...
  MessageRequester("List elements :", "Field2 value : "+Str(TestList()\Field2), 0)
Next


SelectElement(TestList(), 2)  ; Go directly to the 3rd element
MessageRequester("3rd Element", "Field2 value : "+Str(TestList()\Field2), 0)


MessageRequester("Linked List - Example", "Finished", 0)

End