PermMem
PermMem ist ein sehr mächtiges Paket. Es erlaubt Klassen (bzw. Instanzen) permanent zu nutzen, auch nachdem geladen oder neu gestartet wurde. PermMem ist recht schwer zu verstehen. Ich empfehle die Beispiele hierzu anzusehen.
- Inhaltsverzeichnis
- 1new
- 2create
- 3wrap
- 4clear
- 5release
- 6delete
- 7free
- 8get
- 9getPtr
- 10setPtr
- 11getInst
- 12numHandles
- 13sizeof
- 14Hlp_IsValidHandle
- 15Archiver
- 16Unarchiver
- 17foreachHndl
- 18hasHndl
- 19zCParser_CreateInstance
new
Erstellt ein neues Handle auf eine neue Instanz von 'inst'int new(instance inst)
- inst : Eine gültige Instanz. Genutzt als "Konstruktor"
- return : Neues, gültiges Handle
create
Ähnlich wie new, nur wird hier direkt ein Pointer zurückgegeben und kein Handle.Vorsicht! Wird nicht von PermMem verwaltet! Siehe Examples/PermMem_Übersicht.dint create(instance inst)
- inst : Eine gültige Instanz. Genutzt als "Konstruktor"
- return : Pointer auf die neue Instanz
wrap
"Wrappt" ein Handle "um" einen Zeiger, so dass der Zeiger mit allen Funktionen, die Handles erwarten, benutzt werden kann.Wird nur bedingt von PermMem verwaltet.
int wrap(instance inst, int ptr)
- inst : Eine gültige Instanz. Bestimmt den Typ des Handles
- ptr : Zeiger, der gewrappt werden soll
- return : Das Handle mit 'ptr' als Inhalt
clear
Säubert das Handle 'handle'. Danach ist es ungültig.void clear(int handle)
- handle : Gültiges PermMem-Handle
release
Gibt das Handle 'handle' frei. Der reservierte Speicher wird nicht gelöscht, das Handle wird ungültig.void release(int handle)
- handle : Gültiges PermMem-Handle
delete
Säubert das Handle 'handle' ebenso wie clear, nur wird zusätzlich noch der Destruktor aufgerufen.void delete(int handle)
- handle : Gültiges PermMem-Handle
free
Ähnlich wie delete, nur wird hier ein Pointer zerstört und kein Handle.Vorsicht! Wird nicht von PermMem verwaltet! Siehe Examples/PermMem_Übersicht.dvoid free(int ptr, instance inst)
- ptr : Der zu säubernde Pointer.
- inst : Instanz die bei create genutzt wurde.
get
Gibt die Instanz des handles zurück.instance get(int handle)
- handle : Gültiges PermMem-Handle
- return : Instanz von handle
getPtr
Gibt im Gegensatz zu get nicht die Instanz, sondern den Pointer darauf zurück.int getPtr(int handle)
- handle : Gültiges PermMem-Handle
- return : Pointer auf Instanz von handle
setPtr
Setzt den Pointer eines Handles.void setPtr(int handle, int ptr)
- handle : Gültiges PermMem-Handle
- ptr : Neuer Pointer für handle
getInst
Gibt die Instanz des Handles zurück, mit der sie in new erstellt wurde. (In der Regel für den Nutzer uninterressant.)int getInst(int handle)
- handle : Gültiges PermMem-Handle
- return : Instanz von handle
numHandles
Die Anzahl der Handles die von PermMem verwaltet werden (für den Nutzer eher unwichtig).int numHandles()
- return : Anzahl der Handles
sizeof
Steht mit PermMem nicht direkt in Verbindung, ist aber nützlich.int sizeof(instance inst)
- inst : Beliebige Instanz
- return : Größe der Klasse der Instanz in Bytes
Hlp_IsValidHandle
Gibt an ob das Handle 'handle' existiert und von PermMem verwaltet wird.int Hlp_IsValidHandle(int handle)
- handle : Handle von PermMem
- return : Ist handle gültig?
Archiver
Die Archiver und Unarchiver haben sehr viele neue Funktionen erhalten.Primitive Typen
Primitive Typen werden so wie sie sind in das Savegame geschrieben.void PM_SaveInt(string Name, int Value)
void PM_SaveFloat(string Name, int FloatValue)
void PM_SaveString(string Name, string Value)
Funktionen
Funktionen werden mit deren Namen gespeichert, um höhere Kompatibilität zu Patches zu gewährleisten.void PM_SaveFuncID(string Name, int FunctionIDValue)
void PM_SaveFuncOffset(string Name, int FunctionOffsetValue)
void PM_SaveFuncPtr(string Name, int FunctionPointerValue)
Klassen/Arrays
Ebenso können Subklassen oder Arrays gespeichert werden.void PM_SaveClassPtr(string Name, int PointerToClass, string ClassName)
- Speichert einen Pointer auf eine Klasse: ClassName*
void PM_SaveClass(string Name, int PointerToClass, string ClassName)
- Speichert eine Subklasse die sich innerhalb der eigenen Klasse befindet: ClassName
void PM_SaveIntArray(string Name, int PointerToArray, int Length)
- Speichert eine Folge von Integern: int* / int[]
void PM_SaveStringArray(string Name, int PointerToArray, int Length)
- Speichert eine Folge von Strings: string* / string[]
Unarchiver
Zu jeder Funktion des Archivers gibt es ein Gegenstück, erklärungen sind deshalb hinfällig.Vereinfachte Funktionen
Da das neue PermMem die geladenen Typen alle kennt können auch vereinfachende Funktionen genutzt werden:int PM_Load(string Name)
- Was diese Funktion laden kann:
- Int
- Float
- Klassenpointer
- Arrays
- Int
- Diese Funktion kann keine Funktionen und auch keine Strings laden.
void PM_LoadToPtr(string Name, int destinationPointer)
- Alternativ eine Version die in einen vorgefertigten Pointer laden kann.
Primitive Typen
int PM_LoadInt(string Name)
int PM_LoadFloat(string Name)
string PM_LoadString(string Name)
Funktionen
int PM_LoadFuncID(string Name)
int PM_LoadFuncOffset(string Name)
int PM_LoadFuncPtr(string Name)
Klassen/Arrays
int PM_LoadClassPtr(string Name)
- Lädt einen Klassenpointer: Class*
void PM_LoadClass(string Name, int destinationPointer)
- Lädt die Subklasse in die eigene Klasse: Class
int PM_LoadArray(string Name)
- Lädt ein Array in einen Pointer: T*
void PM_LoadArrayToPtr(string Name, int destinationPointer)
- Alternativ kann in einen vorgefertigten Pointer geladen werden.
foreachHndl
Für jedes Handle einer Instanz eine Funktion ausführen.void foreachHndl(int inst, func function)
- inst : Für diese Instanz wird die Funktion aufgerufen
- function : Diese Funktion wird aufgerufen. Die Signatur ist function(int handle)
hasHndl
Überprüft ob PermMem ein Handle dieser Instanz besitzt.int hasHndl(int inst)
- inst : Zu prüfende Instanz
- return : Wahrheitswert
zCParser_CreateInstance
Enginecall. Ruft die Instanzfunktion 'inst' für 'ptr' auf und lässt 'inst' auf 'ptr' zeigen.int zCParser_CreateInstance(int inst, int ptr)