Files
ss/include/DynamicLink.h
T
2025-09-16 22:32:07 -04:00

100 lines
2.6 KiB
C++

#ifndef DYNAMICLINK_H
#define DYNAMICLINK_H
#include "common.h"
#include "m/m_dvd.h"
#include "nw4r/db/db_mapFile.h"
#include "rvl/OS.h" // IWYU pragma: export
class DbMapFile {
public:
DbMapFile() : mMapFileHandle(nullptr) {}
~DbMapFile();
void RegisterOnDvd(const char *, const OSModuleInfo *);
void Unregister();
private:
nw4r::db::MapFileHandle mMapFileHandle;
nw4r::db::MapFile mMapFile;
};
// https://github.com/zeldaret/tp/blob/main/include/DynamicLink.h
struct DynamicModuleControlBase {
/* 0x00 */ u16 mLinkCount;
/* 0x02 */ u16 mDoLinkCount;
/* 0x04 */ DynamicModuleControlBase *mPrev;
/* 0x08 */ DynamicModuleControlBase *mNext;
/* 0x0C */ /*vtable*/
virtual ~DynamicModuleControlBase();
virtual const char *getModuleName() const;
virtual int getModuleSize() const;
virtual const char *getModuleTypeString() const;
virtual void dump();
virtual bool do_load();
virtual BOOL do_load_async();
virtual bool do_unload();
virtual BOOL do_link();
virtual bool do_unlink();
DynamicModuleControlBase();
BOOL link();
BOOL unlink();
BOOL load_async();
static inline DynamicModuleControlBase *getFirstClass() {
return mFirst;
}
inline DynamicModuleControlBase *getNextClass() {
return mNext;
}
bool isLinked() const {
return mLinkCount != 0;
}
static DynamicModuleControlBase *mFirst;
static DynamicModuleControlBase *mLast;
};
struct DynamicModuleControl : DynamicModuleControlBase {
virtual const char *getModuleName() const;
virtual ~DynamicModuleControl();
virtual int getModuleSize() const;
virtual const char *getModuleTypeString() const;
virtual void dump();
virtual bool do_load();
virtual BOOL do_load_async();
virtual bool do_unload();
virtual BOOL do_link();
virtual bool do_unlink();
DynamicModuleControl(char const *, EGG::ExpHeap *);
static void initialize(EGG::ExpHeap *heap);
static void *callback(void *);
void checkHeapStatus();
/* 0x10 */ UNKWORD unk_16;
/* 0x14 */ OSModuleHeader *mModule;
/* 0x18 */ void *mBss;
/* 0x1C */ UNKWORD unk_24;
/* 0x20 */ const char *mName;
/* 0x24 */ u8 mResourceType;
/* 0x25 */ u8 unk_33;
/* 0x28 */ UNKWORD unk_40;
/* 0x2C */ mDvd_callback_c *mDvdCallbackRequest;
/* 0x30 */ EGG::ExpHeap *mHeap;
/* 0x34 */ DbMapFile mpRelMapFile;
static u32 sAllocBytes;
static mDvd_toMainRam_base_c *sDvdFile;
static EGG::ExpHeap *sDylinkHeap;
static u32 sCurrentAllocatableSize;
static u32 sTotalFreeSize;
static EGG::Archive *sArchive;
static const char *sRelsDir;
};
#endif