diff options
| author | Léo Lam <leo@leolam.fr> | 2020-10-12 01:46:14 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-10-12 01:46:30 +0200 |
| commit | afec1a82cc097dcfd7d08f84a221a5a920d1b2be (patch) | |
| tree | d33fe39ae8c28d4642338e7b02bc6fe9e436c262 /src | |
| parent | 0a0d287e37d6353616885205fdb8a0c525c37ce4 (diff) | |
ksys/res: Implement Handle destructor
Diffstat (limited to 'src')
| -rw-r--r-- | src/KingSystem/Resource/resHandle.cpp | 29 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resHandle.h | 10 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resResourceMgrTask.h | 2 |
3 files changed, 40 insertions, 1 deletions
diff --git a/src/KingSystem/Resource/resHandle.cpp b/src/KingSystem/Resource/resHandle.cpp index f3369b2b..1655a485 100644 --- a/src/KingSystem/Resource/resHandle.cpp +++ b/src/KingSystem/Resource/resHandle.cpp @@ -2,6 +2,8 @@ #include <container/seadBuffer.h> #include <prim/seadSafeString.h> #include <time/seadTickTime.h> +#include "KingSystem/Resource/resResourceMgrTask.h" +#include "KingSystem/Resource/resSystem.h" namespace ksys::res { @@ -40,4 +42,31 @@ const sead::Buffer<const sead::SafeString> sStatusStrings{0x11, sStatusStrings_} Handle::Handle() = default; +Handle::~Handle() { + unload(); +} + +void Handle::unload() { + if (!mFlags.isOn(Flag::_2)) + return; + + mFlags.reset(Flag::_7); + mFlags.set(Flag::_4); + + if (mTaskHandle.hasTask()) { + mTaskHandle.removeTaskFromQueue(); + if (!mUnit) { + stubbedLogFunction(); + mStatus = Status::_14; + return; + } + } + + if (!mUnit) + return; + + if (ResourceMgrTask::instance()) + ResourceMgrTask::instance()->requestUnload(this); +} + } // namespace ksys::res diff --git a/src/KingSystem/Resource/resHandle.h b/src/KingSystem/Resource/resHandle.h index c6747b7e..c025a278 100644 --- a/src/KingSystem/Resource/resHandle.h +++ b/src/KingSystem/Resource/resHandle.h @@ -30,6 +30,12 @@ public: _6 = 6, _7 = 7, _8 = 8, + _9 = 9, + _10 = 10, + _11 = 11, + _12 = 12, + _13 = 13, + _14 = 14, }; Handle(); @@ -51,6 +57,10 @@ public: private: enum class Flag : u8 { _1 = 0x1, + _2 = 0x2, + _4 = 0x4, + _7 = 0x7, + _8 = 0x8, }; sead::TypedBitFlag<Flag> mFlags = Flag::_1; diff --git a/src/KingSystem/Resource/resResourceMgrTask.h b/src/KingSystem/Resource/resResourceMgrTask.h index 99c06edb..2544c8e1 100644 --- a/src/KingSystem/Resource/resResourceMgrTask.h +++ b/src/KingSystem/Resource/resResourceMgrTask.h @@ -141,7 +141,7 @@ public: void addSExtensionPrefix(sead::StringBuilder& builder) const; s32 requestLoadForSync(Handle* handle, const sead::SafeString& path, const ILoadRequest& request); - s32 requestUnload(Handle* handle, const sead::SafeString& path, const ILoadRequest& request); + s32 requestUnload(Handle* handle); void registerUnit(ResourceUnit* unit); void deregisterUnit(ResourceUnit* unit); |
