From 9c6bec732fa433121c7cbda227ed536af0a9cb91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Thu, 4 Feb 2021 18:56:20 +0100 Subject: [PATCH] ksys/evt: Match OrderParam "get T by name" getters --- data/uking_functions.csv | 6 ++-- src/KingSystem/Event/evtOrderParam.cpp | 22 ++++++++++--- src/KingSystem/Event/evtOrderParam.h | 44 +++++++------------------- 3 files changed, 32 insertions(+), 40 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index cd616398..98e61f37 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -75596,9 +75596,9 @@ 0x0000007100db504c,ksys::evt::OrderParam::addParamStr,412, 0x0000007100db51e8,ksys::evt::OrderParam::tryAlloc_,944,_ZN4ksys3evt10OrderParam8tryAllocENS0_14OrderParamTypeEjRN4sead14SafeStringBaseIcEE? 0x0000007100db5598,ksys::evt::OrderParam::addParamActor,240,_ZN4ksys3evt10OrderParam13addParamActorERNS_3act8BaseProcERN4sead14SafeStringBaseIcEE? -0x0000007100db5688,ksys::evt::OrderParam::getIntByName,176,_ZN4ksys3evt10OrderParam12getIntByNameERKN4sead14SafeStringBaseIcEEPPj? -0x0000007100db5738,ksys::evt::OrderParam::getStringByName,176,_ZN4ksys3evt10OrderParam15getStringByNameERKN4sead14SafeStringBaseIcEEPPS4_? -0x0000007100db57e8,ksys::evt::OrderParam::getArrayByName,208,_ZN4ksys3evt10OrderParam14getArrayByNameERKN4sead14SafeStringBaseIcEEPPvPj? +0x0000007100db5688,ksys::evt::OrderParam::getIntByName,176,_ZN4ksys3evt10OrderParam12getIntByNameERKN4sead14SafeStringBaseIcEEPPj +0x0000007100db5738,ksys::evt::OrderParam::getStringByName,176,_ZN4ksys3evt10OrderParam15getStringByNameERKN4sead14SafeStringBaseIcEEPPS4_ +0x0000007100db57e8,ksys::evt::OrderParam::getArrayByName,208,_ZN4ksys3evt10OrderParam14getArrayByNameERKN4sead14SafeStringBaseIcEEPPvPj 0x0000007100db58b8,evt::EventFlowBase::ctor,2140, 0x0000007100db6114,_ZN4sead9SafeArrayINS_15FixedSafeStringILi64EEELi8EEC2Ev,360, 0x0000007100db627c,evt::EventFlowBase::getBaseProcLink,12, diff --git a/src/KingSystem/Event/evtOrderParam.cpp b/src/KingSystem/Event/evtOrderParam.cpp index cbf71639..918fca06 100644 --- a/src/KingSystem/Event/evtOrderParam.cpp +++ b/src/KingSystem/Event/evtOrderParam.cpp @@ -91,18 +91,17 @@ void OrderParam::addParamActor(ksys::act::BaseProc& actor, sead::SafeString& nam } } } -// The three below have 1 pair of instructions swapped bool OrderParam::getIntByName(const sead::SafeString& name, u32** out_ptr) { - return tryGetPointerByName(name, (void**)out_ptr, nullptr, OrderParamType::INT); + return getPointerByName(name, out_ptr, nullptr, OrderParamType::INT); } bool OrderParam::getStringByName(const sead::SafeString& name, sead::SafeString** out_ptr) { - return tryGetPointerByName(name, (void**)out_ptr, nullptr, OrderParamType::STRING); + return getPointerByName(name, out_ptr, nullptr, OrderParamType::STRING); } bool OrderParam::getArrayByName(const sead::SafeString& name, void** out_ptr, u32* out_size) { - return tryGetPointerByName(name, out_ptr, out_size, OrderParamType::ARRAY); + return getPointerByName(name, out_ptr, out_size, OrderParamType::ARRAY); } // This one also does not match @@ -170,4 +169,17 @@ OrderParamEntry* OrderParam::tryAlloc(OrderParamType type, u32 size, sead::SafeS return nullptr; } -} // namespace ksys::evt \ No newline at end of file +void* OrderParam::getPointerByName(const sead::SafeString& name, u32* out_size, + OrderParamType type) const { + const u32 hash = sead::HashCRC32::calcStringHash(name); + for (s32 i = 0; i < mEntries.size(); i++) { + if (mEntries[i].mHash == hash && mEntries[i].mType == type) { + if (out_size) + *out_size = mEntries[i].mSize; + return mEntries[i].mPointer; + } + } + return nullptr; +} + +} // namespace ksys::evt diff --git a/src/KingSystem/Event/evtOrderParam.h b/src/KingSystem/Event/evtOrderParam.h index 0fc07e74..11352a33 100644 --- a/src/KingSystem/Event/evtOrderParam.h +++ b/src/KingSystem/Event/evtOrderParam.h @@ -45,38 +45,18 @@ public: bool getArrayByName(const sead::SafeString& name, void** out_ptr, u32* out_size); private: - inline void* getPointerByName(const sead::SafeString& name, OrderParamType type) { - u32 hash = sead::HashCRC32::calcStringHash(name.cstr()); - s32 i; - for (i = 0; i < mEntries.size(); i++) { - if (mEntries[i].mHash == hash && mEntries[i].mType == type) { - return mEntries[i].mPointer; - } - } - return nullptr; - } - inline bool tryGetPointerByName(const sead::SafeString& name, void** out_ptr, u32* out_size, - OrderParamType type) { - u32 hash = sead::HashCRC32::calcStringHash(name.cstr()); - s32 i; - for (i = 0; i < mEntries.size(); i++) { - if (mEntries[i].mHash == hash && mEntries[i].mType == type) { - if (out_size) { - *out_size = mEntries[i].mSize; - } - return tryGetPointer(i, out_ptr); - } - } - return false; - } - inline bool tryGetPointer(s32 i, void** out_ptr) { - auto* ptr = mEntries[i].mPointer; - if (ptr) { - *out_ptr = ptr; // minor diff with scheduling - return true; - } - return false; + void* getPointerByName(const sead::SafeString& name, u32* out_size, OrderParamType type) const; + + template + bool getPointerByName(const sead::SafeString& name, T** out_ptr, u32* out_size, + OrderParamType type) const { + auto* ptr = getPointerByName(name, out_size, type); + if (!ptr) + return false; + *out_ptr = static_cast(ptr); + return true; } + inline void clearEntry(OrderParamEntry* e) { e->mHash = 0; e->mSize = 0; @@ -89,4 +69,4 @@ private: u32 mEntryCount = 0; bool mInitialized = false; }; -} // namespace ksys::evt \ No newline at end of file +} // namespace ksys::evt