Eindeutige IDs als Longs erstellen
Verfasst: 09.05.2005 23:52
Nur zwei kleine Procedures, die IDs "erstellen", die man wieder "freigeben" kann. (Die Anführungszeichen sind beabsichtigt)
Einen Nachteil gibt es aber, der aber nicht weiter ins Gewicht fallen sollte: Wenn man eine ID mehrmals freigibt oder welche freigibt, die noch nicht mit [c]GetID()[/c] erstellt wurden, tauchen diese doppelt oder noch öfter wieder auf.
Würde man die Nachteile "rausprogrammieren" würde das System sicherlich langsamer funktionieren, außer jemand weiß wie man es dennoch annähernd so schnell lässt wie es bisher der Fall ist.
Einen Nachteil gibt es aber, der aber nicht weiter ins Gewicht fallen sollte: Wenn man eine ID mehrmals freigibt oder welche freigibt, die noch nicht mit [c]GetID()[/c] erstellt wurden, tauchen diese doppelt oder noch öfter wieder auf.
Code: Alles auswählen
NewList ID_free.l()
Procedure GetID()
Static ID_pos.l
Protected ID.l
If FirstElement(ID_free())
ID = ID_free()
DeleteElement(ID_free())
ProcedureReturn ID
Else
ID_pos + 1
ProcedureReturn ID_pos
EndIf
EndProcedure
Procedure FreeID(ID.l)
If AddElement(ID_free())
ID_free() = ID
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;/ Beispiel
For a.l = 1 To 10 ; 10 neue IDs holen
Debug GetID()
Next
Debug "---"
For a.l = 3 To 7 ; 5 IDs wieder freigeben
FreeID(a)
Next
For a.l = 1 To 7 ; 7 neue IDs holen
Debug GetID()
Next