fb:porticula NoPaste
Collection.bas - Die Demo zur Collection.bi
Uploader: | Weazle25 |
Datum/Zeit: | 12.03.2009 13:58:27 |
'+--------------------------------------------------------------+
'| +----------------------------------------------------------+ |
'| | Projekt: Collection-Demo | |
'| | Version: 0.01 | |
'| | Start: 11.03.2009 | |
'| | Autor: Weazle25 | |
'| | Lizenz: Open Source | |
'| | Beschreibung: Collection ist eine doppelt verkettete | |
'| | Liste in ihrer (fast) einfachsten Form. | |
'| | Ich habe sie nur so erweitert das man | |
'| | mehrere von einander unabhängige Listen | |
'| | erstellen kann. | |
'| | Dies ist die Demo dazu. | |
'| +----------------------------------------------------------+ |
'+--------------------------------------------------------------+
#Include "collection.bi"
Dim Collection1 As TCollection
Dim Collection2 As TCollection
Dim NodeA As TCollectionNode Ptr
Dim NodeB As TCollectionNode Ptr
Dim Value As ZString Ptr
Dim Counter As UByte
'Die beiden Listen mit Inhalt füllen
For Counter = 1 To 10
Value = Callocate(21,1)
*Value = "String_" + Str(Counter) + "a"
NodeA = Collection1.FNew( Value )
Value = Callocate(21,1)
*Value = "String_" + Str(Counter) + "b"
NodeA = Collection2.FNewAtFirst( Value )
Next
'Den ersten und den letzten Node der ersten Liste holen
NodeA = Collection1.FLast()
NodeB = Collection1.FFirst()
'Den letzten Node an den Anfang der Liste verschieben
Counter = Collection1.FInsert( NodeA, CBefore, NodeB )
'Den ersten Node der zweiten Liste holen...
NodeB = Collection2.FFirst()
'...und an den Anfang der ersten Liste setzen
Counter = Collection1.FInsert( NodeB, CBefore, NodeA )
Screen 19
'Die erste Liste auf den Bildschirm bringen
NodeA = Collection1.FFirst()
Counter = 1
Locate Counter, 0, 0
Print Str(Collection1.PCount)
While NodeA <> 0
Counter += 1
Locate Counter, 0, 0
Value = NodeA->VValue
Print *Value
NodeA = Collection1.FAfter( NodeA )
Wend
'und jetzt die zweite Liste
NodeA = Collection2.FFirst()
Counter = 1
Locate Counter, 50, 0
Print Str(Collection2.PCount)
While NodeA <> 0
Counter += 1
Locate Counter, 50, 0
Value = NodeA->VValue
Print *Value
NodeA = Collection2.FAfter( NodeA )
Wend
'eine kleine Schleife damit man auch was von der Ausgabe hat
Locate 20, 1, 1
PRINT "Druecken Sie 'Q', um zu beenden"
Do
Sleep 1
LOOP UNTIL INKEY = "q"
'Den Inhalt der ersten Liste löschen
NodeA = Collection1.FFirst()
While NodeA <> 0
Value = NodeA->VValue
DeAllocate Value
Collection1.FDelete(NodeA)
NodeA = Collection1.FFirst()
Wend
'und nun die zweite Liste
NodeA = Collection2.FFirst()
While NodeA <> 0
Value = NodeA->VValue
DeAllocate Value
'Hier wird versucht mit der FDelete-Funktion der ersten Liste ein Node der zweiten Liste zu löschen.
'FDelete ruft daher intern die FDelete-Funktion der zweiten Liste auf.
Collection1.FDelete(NodeA)
NodeA = Collection2.FFirst()
Wend