Code archives/Miscellaneous/Linked Lists / Dynamic Lists / Threads / Etc
This code has been declared by its author to be Public Domain code.
Download source code
| Simple to use once you know, yet hard to crack into the old noggin.|
With this example you can have a parent that has infinate (memory baring) children.
then ntop of that you can have infinate ( again memory baring) parents.
Voila Lists of lists!!
;Right Before you start reading, here is how it works. If you didn't know. ;You have 1 Type For your parenst, that stores the locaiton of the start And End ;of the list. ;The list is your second Type, which stores all child types from all parents. ;Like a community pool. ;this could be usefull For having groups that you want easy access too, Or anythign that needs ;lists upon lists. Type parent Field name$ Field StartList.child Field EndList.child End Type Type child Field name$ End Type Function CreateParent.Parent(name$) P.parent = New parent P\StartList.Child = Null P\EndList.child = Null P\name$=name$ Return P.parent End Function Function CreateChild.Child(P.Parent,Name$) ;If this is the first child to be added to parent ;Set the start and end of list to the newly created child c.child ;we can tell if there are no items left ;by checking if a pointer EG p.parent = null If P\StartList.Child = Null Then C.Child = New Child P\StartList.Child = C.Child P\EndList.Child = C.Child C\Name$=Name$ ;If there are currently childs in this parent ;Add the new child After end of list pointer ;Then set the end of list point to the position of c.child ;EG parent End of list = Parent end of list +1 Else C.Child = New Child Insert C.Child After P\EndList.Child P\EndList.Child = C.Child C\name$=Name$ End If Return C.Child End Function ;Create parent 1 with 4 childs Get.Parent=CreateParent.Parent("skn3") CreateChild.Child(Get.Parent,"MiniSkn3") CreateChild.Child(Get.Parent,"something") CreateChild.Child(Get.Parent,"dodie") CreateChild.Child(Get.Parent,"acoders") ;To prove its not just readin the list in teh order created ;Set a point to the current get.pointer and see after creating parent 2... old.parent = get.parent ;create parent 2 with 3 childs Get.Parent=CreateParent.Parent("jennifer lopez") CreateChild.Child(Get.Parent,"p diddy") CreateChild.Child(Get.Parent,"don king") CreateChild.Child(Get.Parent,"ronald") ;////////////[ok aftre creating parent 2]////////////// ;we add another To parent 1 ... After parent 2 is actualy the freshest in memory. CreateChild.Child(old.Parent,"sadsack") ;Loop like normal thru parents For P.Parent = Each parent ;To get the loop structure for childs ;Set a tmep handle to the stat postion Temp.Child = P\StartList.Child Print "PARENT :"+P\name$ ;Then ;While the temp handle is different from 'nothing' ;we do the loop While Temp.Child <> Null ;To determin if this child , in the big list of childs ;Belongs to the parent:: ;We are already know the child is greater than (in effect) the starting position, ;so we just need to check its lower than or equal to end If Temp.Child <> P\EndList.Child Then Print "|_child :"+Temp\name$ ;if it equals end pointer location ;Exit loop ElseIf Temp.Child = P\EndList.Child Print "|_child :"+Temp\name$ Exit End If Temp.Child = After Temp.Child Wend Next
Code Archives Forum