Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

test_linkedlist_any.bas

Uploader:MitgliedThePuppetMaster
Datum/Zeit:14.04.2009 15:27:33
Hinweis: Dieser Quelltext ist Bestandteil des Projekts Linked List, zu dem es auf FreeBASIC-Portal.de eine Projektseite gibt.

'Soll die LinkedList Thread-Save Kompiliert werden (wenn mehrere Threads auf die selbe Linked List zugreifen könnten)
'dann sollte die folgende Definition hinzugefügt werden
#define LL_DEF_ThreadSafe                                               'Compiler-Direktive für THREAD-Safe-LinkedList angeben



#include once "linkedlist.bi"                                           'Die Funktionen zur Linkedlist verwaltugn includieren



Dim List as LinkedList                                                  'Eine neue Variable erstellen, welche die LinkedList speichert
Dim TItem1 as LinkedList                                                'Itemvariable



Type MyUDT                                                              'Ein UDT erzeugen
    V_Var1 as UInteger
    V_Var2 as String
End Type



Print "Add"
Dim TPtr as MyUDT Ptr
For X as UInteger = 1 to 5                                              '5 Einträge hinzufügen
    TPtr = CAllocate(SizeOf(MyUDT))                                     'Ein neues UDT erstellen
    With *TPtr                                                          'Daten im UDT bearbeiten
        .V_Var1 = X
        .V_Var2 = "Test_" & Str(X)
    End With
    TItem1 = List.Add(Cast(Any Ptr, TPtr))                          'Einen neuen UDT Eintrag hinzufügen
                                                                        'Da die "Add" Funktion vielseitig gestalltet ist
                                                                        'muss hier ein Cast() erfolgen um das UDT an den Any anzupassen.
    Print " "; List.Count                                               'Anzahl Einträge ausgeben
Next



Print
Print
Print "Print"
For X as UInteger = 1 to List.Count                                     'Alle Einträge durchgehen
    With *Cast(MyUDT Ptr, List.Item(X).AnyData)                         'Eintrag mit Indexnummer X hohlen
                                                                        'Wie schon beim Add muss hier auch ein Cast() erfolgen,
                                                                        'um den Any Pointer wieder zu unserem MyUDT Pointer zu machen
        Print " U:"; .V_Var1                                            'UInteger des UDT's ausgeben
        Print " S:"; .V_Var2                                            'String des UDT's ausgeben
    End With
Next



'Beim "LL_Destroy" Werden automatisch alle AnyPtr's DeAllocated. Sprich, Alle von hand erzeugenten Pointer (Allocate)
'werden automatisch DeAllocate'ed
Print
Print
Print "Destroy"
LL_Destroy(List)                                                        'Die LinkedList zerstören
                                                                        'DAS IST ZWINGEND EERFODERLICH!, da sonst Speicher-leaks auftreten!

If List.LLPtr <> 0 Then
    Print "LISTE EXISTIERT NOCH!"
Else: Print "Liste erfolgreich zerstört!"
End If

'Nach dem zerstören ist die LinkedList leer! Wird anschliessend wieder ein Eintrag hinzugefügt (ADD), wird sie automatisch erstellt und MUSS!!!!!!!
'erneut "Destroy"'t werden!!!