Code: Alles auswählen
DeclareModule mObjectID
Declare IsID(Type.s, ID)
Declare NewID(Type.s, *Memory, ID = #PB_Any)
Declare FreeID(Type.s, ID)
EndDeclareModule
Module mObjectID
EnableExplicit
Structure struct_oID
Map ID.i()
EndStructure
Global NewMap object.struct_oID()
Procedure _NewDynamic(Type.s)
; DrShrek : Ermittelt einen Key anhand der vergangenen Millisekunden
Protected Result, Key.s
Repeat
Key.s = Str(ElapsedMilliseconds() + 10000) ; Sichergehen, dass die vergangene Zeit auch über 10000 liegt)
Result = FindMapElement(object(Type)\ID(), Key)
Until Not (Result)
ProcedureReturn Val(Key)
EndProcedure
Procedure IsID(Type.s, ID)
; Prüft, ob eine ID schon vorhanden ist
If FindMapElement(object(Type)\ID(), Str(ID))
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure NewID(Type.s, *Memory, ID = #PB_Any)
Protected Result = -1, Key.s = ""
If *Memory
If ID = #PB_Any
Result = _NewDynamic(Type) ; Eine ElapsedMilliseconds() ID
object(Type)\ID(Str(Result)) = *Memory ; Den übergebenen Speicher anhängen
ElseIf ID >-1 And ID<10001 ; Wenn eine Gültige Statische ID
; Hier noch Check wegen evt FreeMemory usw.
object(Type)\ID(Str(ID)) = *Memory ; Den übergebenen Speicher anhängen
Result = ID
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure FreeID(Type.s, ID)
If FindMapElement(object(Type)\ID(), Str(ID))
; Hier noch Check wegen evt FreeMemory usw.
DeleteMapElement(object(Type)\ID(), Str(ID))
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
EndModule
Debug mObjectID::NewID("ftp", 1, #PB_Any)
Debug mObjectID::NewID("ftp", 1, #PB_Any)
a = mObjectID::NewID("ftp", 1, #PB_Any)
Debug a
Debug mObjectID::NewID("ftp", 1, #PB_Any)
Debug mObjectID::NewID("ftp", 1, 12)
Debug mObjectID::NewID("ftp", 1, 11)
Debug mObjectID::NewID("ftp", 1, 10)
Debug mObjectID::FreeID("ftp", 12)
Debug "..."
Debug mObjectID::IsID("ftp", a)
Debug mObjectID::FreeID("ftp", a)
Debug mObjectID::IsID("ftp", a)
Debug mObjectID::IsID("ftp", 11)Nichts für ungut Nic, aber durch dein komplettes Beispiel steig ich noch nicht durch.
Ich bedanke mich für die Mühen, die ich gemacht habe ^^