; ; ------------------------------------------------------------ ; ; PureBasic - Linked list example file ; ; (c) Fantaisie Software ; ; ------------------------------------------------------------ ; Structure BasicStructure Field1.i Field2.w Field3.l EndStructure Structure ComplexStructure Field1.i *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() NewList TestComplexList.ComplexStructure() ; ;-------- BasicStructure Add Elements -------- ; AddElement(TestList()) TestList()\Field2 = 1 AddElement(TestList()) TestList()\Field2 = 2 AddElement(TestList()) TestList()\Field2 = 3 AddElement(TestList()) TestList()\Field2 = 4 Debug "=============================================" Debug " Simple Structure" Debug "................." Debug "" Debug "Number of elements in the list: " + ListSize(TestList()) ; First way to list all the elements ; ResetList(TestList()) ; Reset the list index before the first element. While NextElement(TestList()) ; Process all the elements... Debug "ResetList() - 'Field2' value: " + TestList()\Field2 Wend ; Second way, with the help of ForEach ; ForEach TestList() ; Process all the elements... Debug "ForEach() - 'Field2' value: " + TestList()\Field2 Next SelectElement(TestList(), 2) ; Go directly to the 3rd element Debug "3rd Element - 'Field2' value: " + TestList()\Field2 Debug "" ; ; ;-------- ComplexStructure Add Elements -------- ; AddElement(TestComplexList()) TestComplexList()\Field1 = 11 AddElement(TestList()) TestComplexList()\Basic = AllocateStructure(BasicStructure) TestComplexList()\Basic\Field1 = 111 ; It's a pointer but we don't use the * (it's a PureBasic oddity) TestComplexList()\Basic\Field2 = 222 TestComplexList()\Basic\Field3 = 333 AddElement(TestList()) TestComplexList()\Basic2\Field1 = 1111 TestComplexList()\Basic2\Field2 = 2222 TestComplexList()\Basic2\Field3 = 3333 AddElement(TestList()) TestComplexList()\Next = AllocateStructure(ComplexStructure) TestComplexList()\Next\Field1 = 7 TestComplexList()\Next\Basic = AllocateStructure(BasicStructure) TestComplexList()\Next\Basic\Field1 = 77 TestComplexList()\Next\Basic\Field2 = 88 TestComplexList()\Next\Basic\Field3 = 99 TestComplexList()\Next\Basic2\Field1 = 777 TestComplexList()\Next\Basic2\Field2 = 888 TestComplexList()\Next\Basic2\Field3 = 999 TestComplexList()\Next\Next = AllocateStructure(ComplexStructure) TestComplexList()\Next\Next\Field1 = 9999 ; Debug several fields Debug "=============================================" Debug " Complex Structure" Debug ".................." Debug "TestComplexList()\Field1 = " + TestComplexList()\Field1 ;= 11 Debug "TestComplexList()\Basic\Field2 = " + TestComplexList()\Basic\Field2 + " (Beware, it's a pointer but we don't use the '*'";= 222 Debug "TestComplexList()\Basic2\Field3 = " + TestComplexList()\Basic2\Field3;= 3333 Debug "TestComplexList()\Next\Field1 = " + TestComplexList()\Next\Field1 + " (idem)" ;= 7 Debug "TestComplexList()\Next\Basic\Field1 = " + TestComplexList()\Next\Basic\Field1 + " (idem)" ;= 77 Debug "TestComplexList()\Next\Basic2\Field1 = " + TestComplexList()\Next\Basic2\Field1 + " (idem)";= 777 Debug "TestComplexList()\Next\Next\Field1 = " + TestComplexList()\Next\Next\Field1 + " (idem)" ;= 9999 End