Ticket System [All OS]
Verfasst: 22.08.2019 08:33
Hallo.
Hier hab ich mal das Ticket Beispiel aus dem PB-SDK (ObjectManagement) annähernd nach PB übersetzt.
Ich habe hierzu auch mal das "Pseudo OOP Konzept" benutzt um mehrere TicketObjekte ohne Mehraufwand haben zu können.
Ich hoffe auf Fragen, Verbesserungen und Kritik
Hier hab ich mal das Ticket Beispiel aus dem PB-SDK (ObjectManagement) annähernd nach PB übersetzt.
Ich habe hierzu auch mal das "Pseudo OOP Konzept" benutzt um mehrere TicketObjekte ohne Mehraufwand haben zu können.
Ich hoffe auf Fragen, Verbesserungen und Kritik

Code: Alles auswählen
DeclareModule Ticket
EnableExplicit
Interface iTicket
CreateTicket(Ticket) ; Erstellt eine ID (#PB_Any ist möglich)
IsTicket(Ticket) ; Gibt eine TicketID zurück oder False
TicketID(Ticket) ;
GetTicket(TicketID)
FreeTicket(Ticket)
DestroyTicket()
EndInterface
Declare.i CreateTicketObject(StructureSize)
EndDeclareModule
Module Ticket
Structure obj
vTable.i
StructureSize.q
Map Object.i()
EndStructure
Procedure.i IsTicket(*this.obj, Ticket)
Protected Result = #Null
If FindMapElement(*this\Object(), Str(Ticket))
Result = *this\Object()
EndIf
ProcedureReturn Result
EndProcedure
Procedure.i FreeTicket(*this.obj, Ticket)
Protected *Mem = IsTicket(*this, Ticket)
If *Mem
FreeMemory(*Mem)
DeleteMapElement(*this\Object(), Str(Ticket))
EndIf
EndProcedure
Procedure.i CreateTicket(*this.obj, Ticket)
Protected Result = Ticket, *Mem = #Null
If *this\StructureSize > 0
*Mem = AllocateMemory(*this\StructureSize)
If *Mem
If Ticket = #PB_Any
Result = *Mem
Else
FreeTicket(*this, Ticket)
EndIf
If AddMapElement(*this\Object(), Str(Result))
*this\Object() = *Mem
EndIf
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure.i TicketID(*this.obj, Ticket)
Protected Result = IsTicket(*this, Ticket)
ProcedureReturn Result
EndProcedure
Procedure.i GetTicket(*this.obj, TicketID)
Protected Result = #Null
ForEach *this\Object()
If *this\Object() = TicketID
Result = Val(MapKey(*this\Object()))
Break
EndIf
Next
ProcedureReturn Result
EndProcedure
Procedure.i DestroyTicket(*this.obj)
ForEach *this\Object()
If *this\Object()
FreeMemory(*This\Object())
EndIf
Next
FreeStructure(*this) : *this = #Null
ProcedureReturn *this
EndProcedure
Procedure.i CreateTicketObject(StructureSize)
Protected *this.obj = AllocateStructure(obj)
If *this
*this\vTable = ?vTable_iTicket
*this\StructureSize = StructureSize
ClearMap(*this\Object())
EndIf
ProcedureReturn *this
EndProcedure
DataSection
vTable_iTicket:
Data.i @CreateTicket()
Data.i @IsTicket()
Data.i @TicketID()
Data.i @GetTicket()
Data.i @FreeTicket()
Data.i @DestroyTicket()
EndDataSection
EndModule
UseModule Ticket
Structure myTicket
Value.i
EndStructure
myGadgets.iTicket = CreateTicketObject(SizeOf(myTicket))
myGadget = myGadgets\CreateTicket(5)
myGadgetID = myGadgets\TicketID(myGadget)
If myGadgetID
InitializeStructure(myGadgetID, myTicket)
EndIf
Debug myGadget
Debug myGadgetID
Debug myGadgets\IsTicket(myGadget)