ksys/res: Implement Handle destructor

This commit is contained in:
Léo Lam
2020-10-12 01:46:14 +02:00
parent 0a0d287e37
commit afec1a82cc
4 changed files with 45 additions and 6 deletions
+29
View File
@@ -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
+10
View File
@@ -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;
+1 -1
View File
@@ -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);