summaryrefslogtreecommitdiffstats
path: root/src/leeds/base/relocatableChunk.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/leeds/base/relocatableChunk.h')
-rw-r--r--src/leeds/base/relocatableChunk.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/leeds/base/relocatableChunk.h b/src/leeds/base/relocatableChunk.h
new file mode 100644
index 00000000..2658aa21
--- /dev/null
+++ b/src/leeds/base/relocatableChunk.h
@@ -0,0 +1,53 @@
+#pragma once
+
+namespace base
+{
+ // TODO(LCS): add actual struct fields
+
+ struct sChunkHeader;
+ struct sDataBlock;
+ struct sFileLine;
+
+ class cRelocatableChunk
+ {
+ public:
+ void* Load(void* data, bool bShrink);
+ void* Load(const char* name, bool bShrink);
+ void Fixup(const sChunkHeader& header, void* data);
+ void Fixup(void* data);
+ void* Shrink(const sChunkHeader& header, void* data);
+ void* Shrink(void* data);
+ };
+
+#define VTABLE_ADDR(obj) ((void*)obj) // TODO: make this portable
+
+ class cRelocatableChunkClassInfo
+ {
+ public:
+ cRelocatableChunkClassInfo(const char* class_name, const void* pVmt, int size);
+ };
+
+ class cRelocatableChunkWriter
+ {
+ public:
+ cRelocatableChunkWriter();
+ ~cRelocatableChunkWriter();
+
+ void AddPatch(void* addr);
+ void AddPatchWithInfo(const char* str, int unk, void* addr);
+ void AllocateRaw(void* addr, uint32 size, uint32 align, bool a5 = false, bool a6 = false);
+
+ void Clear();
+ void Class(void* ptr, const cRelocatableChunkClassInfo& classInfo);
+ void DebugFileLine(void*);
+
+ void PatchFunc(void* ptr);
+
+ bool IsAllocated(void* addr);
+
+ void Reserve(int, int);
+
+ void Save(const char* filename, uint32 a3, uint32 a4, bool a5);
+ void Save(void* file, uint32 a3, uint32 a4, bool a5, sChunkHeader* pHeader);
+ };
+}; \ No newline at end of file