diff options
| author | robojumper <robojumper@gmail.com> | 2025-09-13 10:05:17 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-13 10:05:17 +0200 |
| commit | 342f867df2825eb5d76bea7e2a85cba1cdd60c80 (patch) | |
| tree | 8de6499e1a3ae3dec95d22550b6f68bf20b7f2b7 /include | |
| parent | 8efc3f6de1b84b3c7f2424e8984b8b0a8fdc2f73 (diff) | |
| parent | da63feb111ea145e33be6d6bf108e6d8f559e77b (diff) | |
Merge pull request #233 from robojumper/arc-dvd-ret-cleanups
Small status/result cleanups for arc managers
Diffstat (limited to 'include')
| -rw-r--r-- | include/d/d_rawarchive.h | 23 | ||||
| -rw-r--r-- | include/m/m_dvd.h | 6 | ||||
| -rw-r--r-- | include/toBeSorted/arc_managers/current_stage_arc_manager.h | 2 | ||||
| -rw-r--r-- | include/toBeSorted/arc_managers/layout_arc_manager.h | 33 | ||||
| -rw-r--r-- | include/toBeSorted/arc_managers/oarc_manager.h | 32 |
5 files changed, 54 insertions, 42 deletions
diff --git a/include/d/d_rawarchive.h b/include/d/d_rawarchive.h index 3835ae10..aead942f 100644 --- a/include/d/d_rawarchive.h +++ b/include/d/d_rawarchive.h @@ -6,6 +6,13 @@ #include "nw4r/g3d/res/g3d_resfile.h" #include "sized_string.h" +enum dArcResult_e { + D_ARC_RESULT_WAIT = 1, + D_ARC_RESULT_OK = 0, + D_ARC_RESULT_ERROR_INTERNAL = -1, + D_ARC_RESULT_ERROR_NOT_FOUND = -2, +}; + class ArcCallbackHandlerBase { public: ArcCallbackHandlerBase() : mPrefix(' ') {} @@ -26,8 +33,6 @@ public: void BindSystemModelsAndLighting(nw4r::g3d::ResFile); -// TODO: loading status could be an enum (-2/-1/0/+1) - // Ghidra: ArcManagerEntry // size: 0x40 class dRawArcEntry_c { @@ -41,10 +46,10 @@ public: static BOOL checkArcExistsOnDisk(const char *fileName, const char *dirName); static BOOL checkArcExistsOnDiskInner(SizedString<128> &path, const char *fileName, const char *dirName); - int mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap); - int onMount(void *callbackArg); + dArcResult_e mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap); + dArcResult_e onMount(void *callbackArg); - int ensureLoadedMaybe(void *callbackArg); + dArcResult_e ensureLoadedMaybe(void *callbackArg); inline bool isReferenced() { return mRefCount != 0; @@ -105,14 +110,14 @@ public: bool init(u16 count, ArcCallbackHandler *callbackArg, EGG::Heap *heap); BOOL getArcOrLoadFromDisk(const char *name, const char *dirName, u8 mountDirection, EGG::Heap *heap); BOOL addEntryFromSuperArc(const char *name, void *data, u8 mountDirection, EGG::Heap *heap); - int ensureLoadedMaybe2(const char *name); - int ensureLoadedMaybe(const char *name); + dArcResult_e ensureLoadedMaybe2(const char *name); + dArcResult_e ensureLoadedMaybe(const char *name); bool hasEntry(const char *name); BOOL decreaseRefCount(const char *name); void *getDataFromOarc(const char *name, const char *path); void *getSubEntryData(const char *name, const char *path); void *getLoadedArcData(const char *name); - int ensureAllEntriesLoaded(); + dArcResult_e ensureAllEntriesLoaded(); dRawArcEntry_c *findEntry(const char *name) const; dRawArcEntry_c *findEmptySlot(); dRawArcEntry_c *findLoadedEntry(const char *name); @@ -123,4 +128,4 @@ private: /* 0x8 */ ArcCallbackHandler *mCallbackArg; }; -#endif; +#endif diff --git a/include/m/m_dvd.h b/include/m/m_dvd.h index 6dc49b88..64272a18 100644 --- a/include/m/m_dvd.h +++ b/include/m/m_dvd.h @@ -47,6 +47,7 @@ EGG::Heap *getArchiveHeap(); } // namespace mDvd class mDvd_command_c { + friend class mDvd_param_c; public: mDvd_command_c(); virtual ~mDvd_command_c(); @@ -60,9 +61,14 @@ public: static void destroy(mDvd_command_c **cmd); void do_delete(); + bool isDone() const { + return mStatus != 0; + } + void *operator new(size_t size); void operator delete(void *ptr); +protected: mDvd_command_c *mNext; u8 mStatus; u8 mMountDirection; diff --git a/include/toBeSorted/arc_managers/current_stage_arc_manager.h b/include/toBeSorted/arc_managers/current_stage_arc_manager.h index 1fadc389..25afab1f 100644 --- a/include/toBeSorted/arc_managers/current_stage_arc_manager.h +++ b/include/toBeSorted/arc_managers/current_stage_arc_manager.h @@ -30,7 +30,7 @@ public: EGG::ExpHeap *getHeap(s32 roomid); - inline int ensureAllEntriesLoaded() { + inline dArcResult_e ensureAllEntriesLoaded() { return mArcTable.ensureAllEntriesLoaded(); } diff --git a/include/toBeSorted/arc_managers/layout_arc_manager.h b/include/toBeSorted/arc_managers/layout_arc_manager.h index 0c036acc..48b38789 100644 --- a/include/toBeSorted/arc_managers/layout_arc_manager.h +++ b/include/toBeSorted/arc_managers/layout_arc_manager.h @@ -5,6 +5,20 @@ #include "d/d_rawarchive.h" #include "egg/core/eggHeap.h" +class LayoutArcControl { +public: + LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {} + virtual ~LayoutArcControl(); + void set(const char *const *layoutArcs, s32 numArcs); + bool load(EGG::Heap *heap) const; + bool allLoaded() const; + bool release(); + +private: + const char *const *mLayoutArcs; + s32 mNumArcs; +}; + class LayoutArcManager { public: LayoutArcManager(); @@ -14,13 +28,13 @@ public: void init(EGG::Heap *heap); - inline int ensureAllEntriesLoaded() { + inline dArcResult_e ensureAllEntriesLoaded() { return mArcTable.ensureAllEntriesLoaded(); } bool loadLayoutArcFromDisk(const char *object, EGG::Heap *heap); - int ensureLoaded1(const char *object); - int ensureLoaded2(const char *object); + dArcResult_e ensureLoaded1(const char *object); + dArcResult_e ensureLoaded2(const char *object); bool hasEntry(const char *object); bool decrement(const char *path); void *getData(const char *oarcName, const char *fileName); @@ -35,17 +49,4 @@ private: dRawArcTable_c mArcTable; }; -class LayoutArcControl { -public: - LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {} - virtual ~LayoutArcControl(); - void set(const char *const *layoutArcs, s32 numArcs); - void load(EGG::Heap *heap); - void release(); - -private: - const char **mLayoutArcs; - s32 mNumArcs; -}; - #endif diff --git a/include/toBeSorted/arc_managers/oarc_manager.h b/include/toBeSorted/arc_managers/oarc_manager.h index 8d75dd75..ec127221 100644 --- a/include/toBeSorted/arc_managers/oarc_manager.h +++ b/include/toBeSorted/arc_managers/oarc_manager.h @@ -4,6 +4,19 @@ #include "d/d_rawarchive.h" #include "egg/core/eggHeap.h" +class ObjectArcControl { +public: + ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {} + virtual ~ObjectArcControl(); + void set(const char *const *objectArcs, s32 numArcs); + bool load(EGG::Heap *heap) const; + bool release(); + +private: + const char *const *mObjectArcs; + s32 mNumArcs; +}; + class OarcManager { public: OarcManager(); @@ -13,15 +26,15 @@ public: void init(EGG::Heap *heap); - inline int ensureAllEntriesLoaded() { + inline dArcResult_e ensureAllEntriesLoaded() { return mArcTable.ensureAllEntriesLoaded(); } bool checkIfObjectArcExistsOnDisk(const char *object); bool loadObjectArcFromDisk(const char *object, EGG::Heap *heap); bool addEntryFromSuperArc(const char *object, void *data, EGG::Heap *heap); - int ensureLoaded1(const char *object); - void ensureLoaded2(const char *object); + dArcResult_e ensureLoaded1(const char *object); + dArcResult_e ensureLoaded2(const char *object); bool decrement(const char *path); void *getData(const char *oarcName, const char *fileName); @@ -41,17 +54,4 @@ private: dRawArcTable_c mArcTable; }; -class ObjectArcControl { -public: - ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {} - virtual ~ObjectArcControl(); - void set(const char *const *objectArcs, s32 numArcs); - void load(EGG::Heap *heap); - void release(); - -private: - const char **mObjectArcs; - s32 mNumArcs; -}; - #endif |
