summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2020-10-12 01:46:14 +0200
committerLéo Lam <leo@leolam.fr>2020-10-12 01:46:30 +0200
commitafec1a82cc097dcfd7d08f84a221a5a920d1b2be (patch)
treed33fe39ae8c28d4642338e7b02bc6fe9e436c262 /src
parent0a0d287e37d6353616885205fdb8a0c525c37ce4 (diff)
ksys/res: Implement Handle destructor
Diffstat (limited to 'src')
-rw-r--r--src/KingSystem/Resource/resHandle.cpp29
-rw-r--r--src/KingSystem/Resource/resHandle.h10
-rw-r--r--src/KingSystem/Resource/resResourceMgrTask.h2
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);