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