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.

new

Erstellt ein neues Handle auf eine neue Instanz von 'inst'
int new(instance inst)

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.d
int create(instance inst)

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)

clear

Säubert das Handle 'handle'. Danach ist es ungültig.
void clear(int handle)

release

Gibt das Handle 'handle' frei. Der reservierte Speicher wird nicht gelöscht, das Handle wird ungültig.
void release(int handle)

delete

Säubert das Handle 'handle' ebenso wie clear, nur wird zusätzlich noch der Destruktor aufgerufen.void delete(int 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.d
void free(int ptr, instance inst)

get

Gibt die Instanz des handles zurück.
instance get(int handle)

getPtr

Gibt im Gegensatz zu get nicht die Instanz, sondern den Pointer darauf zurück.int getPtr(int handle)

setPtr

Setzt den Pointer eines Handles.
void setPtr(int handle, int ptr)

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)

numHandles

Die Anzahl der Handles die von PermMem verwaltet werden (für den Nutzer eher unwichtig).
int numHandles()

sizeof

Steht mit PermMem nicht direkt in Verbindung, ist aber nützlich.
int sizeof(instance inst)

Hlp_IsValidHandle

Gibt an ob das Handle 'handle' existiert und von PermMem verwaltet wird.
int Hlp_IsValidHandle(int handle)

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)void PM_SaveClass(string Name, int PointerToClass, string ClassName)void PM_SaveIntArray(string Name, int PointerToArray, int Length)void PM_SaveStringArray(string Name, int PointerToArray, int Length)

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)void PM_LoadToPtr(string Name, int destinationPointer)

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)void PM_LoadClass(string Name, int destinationPointer)int PM_LoadArray(string Name)void PM_LoadArrayToPtr(string Name, int destinationPointer)

foreachHndl

Für jedes Handle einer Instanz eine Funktion ausführen.
void foreachHndl(int inst, func function)

hasHndl

Überprüft ob PermMem ein Handle dieser Instanz besitzt.
int hasHndl(int inst)

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)