ksys/res: Give better names to Handle flags and status enum values

This commit is contained in:
Léo Lam 2021-03-31 00:50:01 +02:00
parent f90fb23060
commit d3d474b969
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
7 changed files with 90 additions and 80 deletions

View File

@ -93045,13 +93045,13 @@
0x0000007101201af4,Res::getError,8,_ZNK4ksys3res6Handle9getStatusEv 0x0000007101201af4,Res::getError,8,_ZNK4ksys3res6Handle9getStatusEv
0x0000007101201afc,Res::setError,12,_ZN4ksys3res6Handle24setStatusForResourceMgr_ERKNS1_6StatusE 0x0000007101201afc,Res::setError,12,_ZN4ksys3res6Handle24setStatusForResourceMgr_ERKNS1_6StatusE
0x0000007101201b08,Res::submitLoadForSyncRequestAndGetResource,444,_ZN4ksys3res6Handle4loadERKN4sead14SafeStringBaseIcEEPKNS0_12ILoadRequestEPNS1_6StatusE 0x0000007101201b08,Res::submitLoadForSyncRequestAndGetResource,444,_ZN4ksys3res6Handle4loadERKN4sead14SafeStringBaseIcEEPKNS0_12ILoadRequestEPNS1_6StatusE
0x0000007101201cc4,Res::isStartedLoadAndFailed,12,_ZNK4ksys3res6Handle10isFlag2SetEv 0x0000007101201cc4,Res::isStartedLoadAndFailed,12,_ZNK4ksys3res6Handle13requestedLoadEv
0x0000007101201cd0,ResourceLoadArg::dtor,20,_ZN4ksys3res11LoadRequestD2Ev 0x0000007101201cd0,ResourceLoadArg::dtor,20,_ZN4ksys3res11LoadRequestD2Ev
0x0000007101201ce4,Res::submitLoadRequest,380,_ZN4ksys3res6Handle11requestLoadERKN4sead14SafeStringBaseIcEEPKNS0_12ILoadRequestEPNS1_6StatusE 0x0000007101201ce4,Res::submitLoadRequest,380,_ZN4ksys3res6Handle11requestLoadERKN4sead14SafeStringBaseIcEEPKNS0_12ILoadRequestEPNS1_6StatusE
0x0000007101201e60,Res::waitForReady,68,_ZN4ksys3res6Handle12waitForReadyEv 0x0000007101201e60,Res::waitForReady,68,_ZN4ksys3res6Handle12waitForReadyEv
0x0000007101201ea4,sub_7101201EA4,104,_ZN4ksys3res6Handle12waitForReadyERKN4sead8TickSpanE 0x0000007101201ea4,sub_7101201EA4,104,_ZN4ksys3res6Handle12waitForReadyERKN4sead8TickSpanE
0x0000007101201f0c,Res::parseResource,404,_ZN4ksys3res6Handle13parseResourceEPNS0_7ContextE 0x0000007101201f0c,Res::parseResource,404,_ZN4ksys3res6Handle13parseResourceEPNS0_7ContextE
0x00000071012020a0,Res::k,12,_ZNK4ksys3res6Handle10isFlag8SetEv 0x00000071012020a0,Res::k,12,_ZNK4ksys3res6Handle17hasParsedResourceEv
0x00000071012020ac,Res::setSomeFlagOnResMgrDependingOnPath,784,_ZN4ksys3res6Handle22updateResourceMgrFlag_Ev! 0x00000071012020ac,Res::setSomeFlagOnResMgrDependingOnPath,784,_ZN4ksys3res6Handle22updateResourceMgrFlag_Ev!
0x00000071012023bc,Res::c,260,_ZN4ksys3res6Handle22updateStatusAndUnload_Ev 0x00000071012023bc,Res::c,260,_ZN4ksys3res6Handle22updateStatusAndUnload_Ev
0x00000071012024c0,Res::submitUnloadRequest,136,_ZN4ksys3res6Handle14requestUnload2Ev 0x00000071012024c0,Res::submitUnloadRequest,136,_ZN4ksys3res6Handle14requestUnload2Ev

Can't render this file because it is too large.

View File

@ -471,7 +471,7 @@ void Manager::checkVersion() {
} }
bool Manager::VersionFile::readVersion() { bool Manager::VersionFile::readVersion() {
if (!file_handle.isFlag2Set()) if (!file_handle.requestedLoad())
return true; return true;
if (file_handle.isSuccess()) { if (file_handle.isSuccess()) {

View File

@ -201,7 +201,7 @@ T* ActorParamMgr::handleAsyncFileLoad(ActorParam* param, s32* idx, ActorParam::R
return res; return res;
} }
if (handle.isFlag8Set()) if (handle.hasParsedResource())
return sead::DynamicCast<T>(handle.getResource()); return sead::DynamicCast<T>(handle.getResource());
if (!handle.isReadyOrNeedsParse()) if (!handle.isReadyOrNeedsParse())
@ -427,7 +427,7 @@ bool ActorParamMgr::finishLoadingExtraRes(ActorParam* param, void* x) {
++idx; ++idx;
} else { } else {
const res::Handle& handle = param->mHandles[1][idx]; const res::Handle& handle = param->mHandles[1][idx];
if (handle.isFlag8Set()) { if (handle.hasParsedResource()) {
++idx; ++idx;
continue; continue;
} }
@ -455,7 +455,7 @@ bool ActorParamMgr::finishLoadingExtraRes(ActorParam* param, void* x) {
++idx; ++idx;
} else { } else {
const res::Handle& handle = param->mHandles[1][idx]; const res::Handle& handle = param->mHandles[1][idx];
if (handle.isFlag8Set()) { if (handle.hasParsedResource()) {
++idx; ++idx;
continue; continue;
} }
@ -482,7 +482,7 @@ bool ActorParamMgr::finishLoadingExtraRes(ActorParam* param, void* x) {
++idx; ++idx;
} else { } else {
const res::Handle& handle = param->mHandles[1][idx]; const res::Handle& handle = param->mHandles[1][idx];
if (handle.isFlag8Set()) { if (handle.hasParsedResource()) {
++idx; ++idx;
continue; continue;
} }

View File

@ -65,17 +65,17 @@ Handle::~Handle() {
} }
void Handle::requestUnload() { void Handle::requestUnload() {
if (!mFlags.isOn(Flag::_2)) if (!mFlags.isOn(Flag::LoadRequested))
return; return;
mFlags.reset(Flag::_7); mFlags.reset(Flag::LoadUnloadFlags);
mFlags.set(Flag::_4); mFlags.set(Flag::UnloadRequested);
if (mTaskHandle.hasTask()) { if (mTaskHandle.hasTask()) {
mTaskHandle.removeTaskFromQueue(); mTaskHandle.removeTaskFromQueue();
if (!mUnit) { if (!mUnit) {
stubbedLogFunction(); stubbedLogFunction();
mStatus = Status::_14; mStatus = Status::Cancelled;
return; return;
} }
} }
@ -94,7 +94,7 @@ sead::DirectResource* Handle::getResource() const {
} }
bool Handle::isSuccess() const { bool Handle::isSuccess() const {
if (mFlags.isOff(Flag::_2)) if (mFlags.isOff(Flag::LoadRequested))
return false; return false;
if (isBusy()) if (isBusy())
@ -119,7 +119,7 @@ void Handle::setStatusForResourceMgr_(const Status& status) {
} }
inline bool Handle::checkPathChange_(const sead::SafeString& path) { inline bool Handle::checkPathChange_(const sead::SafeString& path) {
if (!mFlags.isOn(Flag::_2)) if (!mFlags.isOn(Flag::LoadRequested))
return true; return true;
stubbedLogFunction(); stubbedLogFunction();
@ -132,9 +132,9 @@ inline bool Handle::checkPathChange_(const sead::SafeString& path) {
sead::DirectResource* Handle::load(const sead::SafeString& path, const ILoadRequest* request, sead::DirectResource* Handle::load(const sead::SafeString& path, const ILoadRequest* request,
Handle::Status* out_status) { Handle::Status* out_status) {
if (checkPathChange_(path)) { if (checkPathChange_(path)) {
mFlags.reset(Flag::_F); mFlags.reset(Flag::AllStatusFlags);
mFlags.set(Flag::_2); mFlags.set(Flag::LoadRequested);
mStatus = Status::_0; mStatus = Status::NoFile;
if (request) { if (request) {
ResourceMgrTask::instance()->requestLoadForSync(this, path, *request); ResourceMgrTask::instance()->requestLoadForSync(this, path, *request);
} else { } else {
@ -151,16 +151,16 @@ sead::DirectResource* Handle::load(const sead::SafeString& path, const ILoadRequ
return getResource(); return getResource();
} }
bool Handle::isFlag2Set() const { bool Handle::requestedLoad() const {
return mFlags.isOn(Flag::_2); return mFlags.isOn(Flag::LoadRequested);
} }
bool Handle::requestLoad(const sead::SafeString& path, const ILoadRequest* request, bool Handle::requestLoad(const sead::SafeString& path, const ILoadRequest* request,
Handle::Status* out_status) { Handle::Status* out_status) {
if (checkPathChange_(path)) { if (checkPathChange_(path)) {
mFlags.reset(Flag::_F); mFlags.reset(Flag::AllStatusFlags);
mFlags.set(Flag::_2); mFlags.set(Flag::LoadRequested);
mStatus = Status::_0; mStatus = Status::NoFile;
Handle::Status ret; Handle::Status ret;
if (request) { if (request) {
@ -203,33 +203,34 @@ bool Handle::waitForReady(const sead::TickSpan& span) {
} }
bool Handle::parseResource(Context* context) { bool Handle::parseResource(Context* context) {
if (mFlags.isOn(Flag::_8)) if (mFlags.isOn(Flag::Parsed))
return true; return true;
if (mFlags.isOn(Flag::_4)) if (mFlags.isOn(Flag::UnloadRequested))
return false; return false;
if (mTaskHandle.getStatus() == util::ManagedTaskHandle::Status::TaskRemoved || if (mTaskHandle.getStatus() == util::ManagedTaskHandle::Status::TaskRemoved ||
(mUnit && mUnit->isTask1NotQueued())) { (mUnit && mUnit->isTask1NotQueued())) {
stubbedLogFunction(); stubbedLogFunction();
mStatus = Status::_14; mStatus = Status::Cancelled;
updateResourceMgrFlag_(); updateResourceMgrFlag_();
requestUnload(); requestUnload();
mFlags.set(Flag::_8); mFlags.set(Flag::Parsed);
return true; return true;
} }
if (mStatus == Status::_1 || mStatus == Status::_2 || mStatus == Status::_3 || if (mStatus == Status::_1 || mStatus == Status::SizeZero || mStatus == Status::_3 ||
mStatus == Status::_8 || mStatus == Status::_9 || mStatus == Status::_10 || mStatus == Status::_8 || mStatus == Status::ParseFailed ||
mStatus == Status::_11 || mStatus == Status::_12 || mStatus == Status::_13 || mStatus == Status::BadAllocSize || mStatus == Status::Edited ||
mStatus == Status::_14) { mStatus == Status::BadHeapSize || mStatus == Status::FileDeviceError ||
mStatus == Status::Cancelled) {
updateResourceMgrFlag_(); updateResourceMgrFlag_();
requestUnload(); requestUnload();
mFlags.set(Flag::_8); mFlags.set(Flag::Parsed);
return true; return true;
} }
if (mStatus == Status::_0) if (mStatus == Status::NoFile)
return false; return false;
if (!mUnit) { if (!mUnit) {
@ -252,10 +253,10 @@ bool Handle::parseResource(Context* context) {
break; break;
case ResourceUnit::Status::_12: case ResourceUnit::Status::_12:
case ResourceUnit::Status::_15: case ResourceUnit::Status::_15:
mStatus = Status::_9; mStatus = Status::ParseFailed;
updateResourceMgrFlag_(); updateResourceMgrFlag_();
requestUnload(); requestUnload();
mFlags.set(Flag::_8); mFlags.set(Flag::Parsed);
return true; return true;
case ResourceUnit::Status::_14: case ResourceUnit::Status::_14:
if (mStatus == Status::_7) if (mStatus == Status::_7)
@ -266,12 +267,12 @@ bool Handle::parseResource(Context* context) {
break; break;
} }
mFlags.set(Flag::_8); mFlags.set(Flag::Parsed);
return true; return true;
} }
bool Handle::isFlag8Set() const { bool Handle::hasParsedResource() const {
return mFlags.isOn(Flag::_8); return mFlags.isOn(Flag::Parsed);
} }
// NON_MATCHING: switch // NON_MATCHING: switch
@ -329,17 +330,17 @@ void Handle::updateStatusAndUnload_() {
if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FailedMaybe)) if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FailedMaybe))
return Status::_1; return Status::_1;
if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileSizeIsZero)) if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileSizeIsZero))
return Status::_2; return Status::SizeZero;
if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::_400)) if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::_400))
return Status::_9; return Status::ParseFailed;
if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileSizeExceedsAllocSize)) if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileSizeExceedsAllocSize))
return Status::_10; return Status::BadAllocSize;
if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::_1000)) if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::Edited))
return Status::_11; return Status::Edited;
if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileOrResInstanceTooLargeForHeap)) if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileOrResInstanceTooLargeForHeap))
return Status::_12; return Status::BadHeapSize;
if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::LoadFailed)) if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::LoadFailed))
return Status::_13; return Status::FileDeviceError;
#ifdef MATCHING_HACK_NX_CLANG #ifdef MATCHING_HACK_NX_CLANG
asm(""); asm("");
@ -356,17 +357,17 @@ void Handle::requestUnload2() {
} }
void Handle::unload() { void Handle::unload() {
if (!mFlags.isOn(Flag::_2)) if (!mFlags.isOn(Flag::LoadRequested))
return; return;
mFlags.reset(Flag::_7); mFlags.reset(Flag::LoadUnloadFlags);
mFlags.set(Flag::_4); mFlags.set(Flag::UnloadRequested);
if (mTaskHandle.hasTask()) { if (mTaskHandle.hasTask()) {
mTaskHandle.removeTaskFromQueue(); mTaskHandle.removeTaskFromQueue();
if (!mUnit) { if (!mUnit) {
stubbedLogFunction(); stubbedLogFunction();
mStatus = Status::_14; mStatus = Status::Cancelled;
return; return;
} }
} }
@ -376,17 +377,17 @@ void Handle::unload() {
} }
void Handle::unloadAndResetUnitFlag20000() { void Handle::unloadAndResetUnitFlag20000() {
if (!mFlags.isOn(Flag::_2)) if (!mFlags.isOn(Flag::LoadRequested))
return; return;
mFlags.reset(Flag::_7); mFlags.reset(Flag::LoadUnloadFlags);
mFlags.set(Flag::_4); mFlags.set(Flag::UnloadRequested);
if (mTaskHandle.hasTask()) { if (mTaskHandle.hasTask()) {
mTaskHandle.removeTaskFromQueue(); mTaskHandle.removeTaskFromQueue();
if (!mUnit) { if (!mUnit) {
stubbedLogFunction(); stubbedLogFunction();
mStatus = Status::_14; mStatus = Status::Cancelled;
return; return;
} }
} }
@ -401,7 +402,7 @@ void Handle::unloadAndResetUnitFlag20000() {
} }
void Handle::resetUnitFlag20000IfSuccess() { void Handle::resetUnitFlag20000IfSuccess() {
if (mFlags.isOff(Flag::_2)) if (mFlags.isOff(Flag::LoadRequested))
return; return;
ResourceUnit* unit = mUnit; ResourceUnit* unit = mUnit;
@ -420,14 +421,14 @@ bool Handle::isBusy() const {
if (mTaskHandle.isTaskAttached()) if (mTaskHandle.isTaskAttached())
return true; return true;
if (mFlags.isOn(Flag::_2) && mUnit) if (mFlags.isOn(Flag::LoadRequested) && mUnit)
return mUnit->isTask1ActiveOrStatus7(); return mUnit->isTask1ActiveOrStatus7();
return false; return false;
} }
bool Handle::isReadyOrNeedsParse() const { bool Handle::isReadyOrNeedsParse() const {
if ((mFlags.getDirect() & 0xA) != u32(Flag::_2) || isBusy()) if ((mFlags.getDirect() & 0xA) != u32(Flag::LoadRequested) || isBusy())
return false; return false;
if (isReady()) if (isReady())
@ -448,13 +449,14 @@ bool Handle::checkLoadStatus() const {
return false; return false;
bool ok = false; bool ok = false;
if (mFlags.isOn(Flag::_2) && mUnit) if (mFlags.isOn(Flag::LoadRequested) && mUnit)
ok = mUnit->isStatus9_12_15(); ok = mUnit->isStatus9_12_15();
ok |= mStatus == Status::_1 || mStatus == Status::_2 || mStatus == Status::_3 || ok |= mStatus == Status::_1 || mStatus == Status::SizeZero || mStatus == Status::_3 ||
mStatus == Status::_8 || mStatus == Status::_9 || mStatus == Status::_10 || mStatus == Status::_8 || mStatus == Status::ParseFailed ||
mStatus == Status::_11 || mStatus == Status::_12 || mStatus == Status::_13 || mStatus == Status::BadAllocSize || mStatus == Status::Edited ||
mStatus == Status::_14; mStatus == Status::BadHeapSize || mStatus == Status::FileDeviceError ||
mStatus == Status::Cancelled;
return ok; return ok;
} }
@ -476,7 +478,7 @@ void Handle::waitForResourceAndParse_(Context* context) {
return; return;
} }
mStatus = Status::_9; mStatus = Status::ParseFailed;
updateResourceMgrFlag_(); updateResourceMgrFlag_();
requestUnload(); requestUnload();
} }

View File

@ -21,21 +21,29 @@ class Handle {
SEAD_RTTI_BASE(Handle) SEAD_RTTI_BASE(Handle)
public: public:
enum class Status { enum class Status {
_0 = 0, /// "No File" (2)
NoFile = 0,
_1 = 1, _1 = 1,
_2 = 2, /// "Size Zero" (8)
SizeZero = 2,
_3 = 3, _3 = 3,
_4 = 4, _4 = 4,
_5 = 5, _5 = 5,
_6 = 6, _6 = 6,
_7 = 7, _7 = 7,
_8 = 8, _8 = 8,
_9 = 9, /// "Compose NG" (9)
_10 = 10, ParseFailed = 9,
_11 = 11, /// "AllocSizeNG" (10)
_12 = 12, BadAllocSize = 10,
_13 = 13, /// "Edited" (11)?
_14 = 14, Edited = 11,
/// "HeapSizeNG" (12)
BadHeapSize = 12,
/// "FileDeviceNG" (13)
FileDeviceError = 13,
/// "Canceled" (16)
Cancelled = 14,
}; };
Handle(); Handle();
@ -49,7 +57,7 @@ public:
sead::DirectResource* load(const sead::SafeString& path, const ILoadRequest* request, sead::DirectResource* load(const sead::SafeString& path, const ILoadRequest* request,
Status* out_status = nullptr); Status* out_status = nullptr);
bool isFlag2Set() const; bool requestedLoad() const;
bool requestLoad(const sead::SafeString& path, const ILoadRequest* request, bool requestLoad(const sead::SafeString& path, const ILoadRequest* request,
Status* out_status = nullptr); Status* out_status = nullptr);
@ -57,7 +65,7 @@ public:
bool waitForReady(const sead::TickSpan& span); bool waitForReady(const sead::TickSpan& span);
bool parseResource(Context* context); bool parseResource(Context* context);
bool isFlag8Set() const; bool hasParsedResource() const;
void requestUnload(); void requestUnload();
void unload(); void unload();
@ -84,12 +92,12 @@ public:
private: private:
enum class Flag : u8 { enum class Flag : u8 {
_1 = 0x1, Dummy = 0x1,
_2 = 0x2, LoadRequested = 0x2,
_4 = 0x4, UnloadRequested = 0x4,
_7 = 0x7, LoadUnloadFlags = Dummy | LoadRequested | UnloadRequested,
_8 = 0x8, Parsed = 0x8,
_F = 0xF, AllStatusFlags = LoadUnloadFlags | Parsed,
}; };
void updateResourceMgrFlag_(); void updateResourceMgrFlag_();
@ -98,8 +106,8 @@ private:
inline bool checkPathChange_(const sead::SafeString& path); inline bool checkPathChange_(const sead::SafeString& path);
sead::TypedBitFlag<Flag> mFlags = Flag::_1; sead::TypedBitFlag<Flag> mFlags = Flag::Dummy;
Status mStatus = Status::_0; Status mStatus = Status::NoFile;
ResourceUnit* mUnit = nullptr; ResourceUnit* mUnit = nullptr;
util::ManagedTaskHandle mTaskHandle; util::ManagedTaskHandle mTaskHandle;
sead::ListNode mListNode; sead::ListNode mListNode;

View File

@ -74,7 +74,7 @@ void TempResourceLoader::requestLoad(LoadArg& arg) {
} }
sead::DirectResource* TempResourceLoader::getResourceForLoadRequest(Context* context) { sead::DirectResource* TempResourceLoader::getResourceForLoadRequest(Context* context) {
if (!mLoadArg.use_handle || !mHandle.isFlag2Set() || mHandle.isFlag8Set() || if (!mLoadArg.use_handle || !mHandle.requestedLoad() || mHandle.hasParsedResource() ||
!mHandle.isReadyOrNeedsParse()) { !mHandle.isReadyOrNeedsParse()) {
return nullptr; return nullptr;
} }

View File

@ -177,7 +177,7 @@ private:
FileSizeIsZero = 0x200, FileSizeIsZero = 0x200,
_400 = 0x400, _400 = 0x400,
FileSizeExceedsAllocSize = 0x800, FileSizeExceedsAllocSize = 0x800,
_1000 = 0x1000, Edited = 0x1000,
FileOrResInstanceTooLargeForHeap = 0x2000, FileOrResInstanceTooLargeForHeap = 0x2000,
LoadFailed = 0x4000, LoadFailed = 0x4000,
NeedToIncrementRefCount = 0x8000, NeedToIncrementRefCount = 0x8000,