mirror of https://github.com/zeldaret/botw.git
ksys/res: Add ArchiveWork
Required for TempResourceLoader, which is used by ActorParamMgr among other things
This commit is contained in:
parent
2abce16984
commit
2f80f2b581
|
@ -84603,13 +84603,13 @@
|
|||
0x0000007100fdfef4,TempResourceLoader::getResError,8,
|
||||
0x0000007100fdfefc,TempResourceLoader::getFileDeviceIfHasResource,56,
|
||||
0x0000007100fdff34,TempResourceLoader::getHeapSize,16,
|
||||
0x0000007100fdff44,Struct10::ctor,8,
|
||||
0x0000007100fdff4c,sub_7100FDFF4C,88,
|
||||
0x0000007100fdffa4,Struct10::initEventAndOverlayArenaS1,260,
|
||||
0x0000007100fe00a8,Struct10::getHeapSize,36,
|
||||
0x0000007100fe00cc,Struct10::getS1,8,
|
||||
0x0000007100fe00d4,Struct10::waitForEvent,104,
|
||||
0x0000007100fe013c,Struct10::eventSetSignal,8,
|
||||
0x0000007100fdff44,Struct10::ctor,8,_ZN4ksys3res11ArchiveWorkC1Ev
|
||||
0x0000007100fdff4c,sub_7100FDFF4C,88,_ZN4ksys3res11ArchiveWorkD1Ev
|
||||
0x0000007100fdffa4,Struct10::initEventAndOverlayArenaS1,260,_ZN4ksys3res11ArchiveWork4initERKNS1_7InitArgE
|
||||
0x0000007100fe00a8,Struct10::getHeapSize,36,_ZNK4ksys3res11ArchiveWork11getHeapSizeEv
|
||||
0x0000007100fe00cc,Struct10::getS1,8,_ZNK4ksys3res11ArchiveWork8getArenaEv
|
||||
0x0000007100fe00d4,Struct10::waitForEvent,104,_ZN4ksys3res11ArchiveWork12waitForEventEj
|
||||
0x0000007100fe013c,Struct10::eventSetSignal,8,_ZN4ksys3res11ArchiveWork8setEventEv
|
||||
0x0000007100fe0144,sub_7100FE0144,328,
|
||||
0x0000007100fe028c,sub_7100FE028C,80,
|
||||
0x0000007100fe02dc,sub_7100FE02DC,20,
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -82,6 +82,8 @@ target_sources(uking PRIVATE
|
|||
GeneralParamList/resGParamListObjectZora.h
|
||||
GeneralParamList/resGParamListTraits.h
|
||||
|
||||
resArchiveWork.cpp
|
||||
resArchiveWork.h
|
||||
resCache.cpp
|
||||
resCache.h
|
||||
resCacheCriticalSection.cpp
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
#include "KingSystem/Resource/resArchiveWork.h"
|
||||
#include "KingSystem/System/OverlayArena.h"
|
||||
#include "KingSystem/Utils/SafeDelete.h"
|
||||
#include "KingSystem/Utils/Thread/Event.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
ArchiveWork::ArchiveWork() = default;
|
||||
|
||||
ArchiveWork::~ArchiveWork() {
|
||||
if (mArena) {
|
||||
mArena->clearUnits();
|
||||
util::safeDelete(mArena);
|
||||
}
|
||||
util::safeDelete(mEvent);
|
||||
}
|
||||
|
||||
bool ArchiveWork::init(const ArchiveWork::InitArg& arg) {
|
||||
mEvent = new (arg.heap) util::Event(
|
||||
nullptr, sead::IDisposer::HeapNullOption::DoNotAppendDisposerIfNoHeapSpecified, false);
|
||||
mEvent->resetSignal();
|
||||
|
||||
mArena = new (arg.heap) OverlayArena;
|
||||
|
||||
OverlayArena::InitArg arena_arg;
|
||||
arena_arg.set_flag_1 = true;
|
||||
arena_arg.size = arg.arena_size;
|
||||
arena_arg.use_best_fit_alloc_mode = false;
|
||||
arena_arg.set_flag_10 = false;
|
||||
arena_arg.set_flag_8 = arg.arena_set_flag_8;
|
||||
arena_arg.name = arg.name;
|
||||
arena_arg.heap = arg.arena_heap;
|
||||
arena_arg.heap2 = arg.arena_heap2;
|
||||
return mArena->init(arena_arg);
|
||||
}
|
||||
|
||||
u32 ArchiveWork::getHeapSize() const {
|
||||
return mArena->getHeap()->getSize();
|
||||
}
|
||||
|
||||
OverlayArena* ArchiveWork::getArena() const {
|
||||
return mArena;
|
||||
}
|
||||
|
||||
bool ArchiveWork::waitForEvent(u32 milliseconds) {
|
||||
if (milliseconds != 0) {
|
||||
const auto duration = sead::TickSpan::fromMilliSeconds(milliseconds);
|
||||
if (!mEvent->wait(duration))
|
||||
return false;
|
||||
} else {
|
||||
mEvent->wait();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void ArchiveWork::setEvent() {
|
||||
mEvent->setSignal();
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
|
@ -0,0 +1,51 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace sead {
|
||||
class Heap;
|
||||
}
|
||||
|
||||
namespace ksys {
|
||||
|
||||
class OverlayArena;
|
||||
|
||||
namespace util {
|
||||
class Event;
|
||||
}
|
||||
|
||||
namespace res {
|
||||
|
||||
class ArchiveWork {
|
||||
public:
|
||||
struct InitArg {
|
||||
bool arena_set_flag_8;
|
||||
u32 arena_size;
|
||||
sead::Heap* heap;
|
||||
sead::Heap* arena_heap;
|
||||
sead::Heap* arena_heap2;
|
||||
sead::SafeString name;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(InitArg, 0x30);
|
||||
|
||||
ArchiveWork();
|
||||
~ArchiveWork();
|
||||
|
||||
bool init(const InitArg& arg);
|
||||
u32 getHeapSize() const;
|
||||
OverlayArena* getArena() const;
|
||||
|
||||
bool waitForEvent(u32 milliseconds = 0);
|
||||
void setEvent();
|
||||
|
||||
private:
|
||||
util::Event* mEvent = nullptr;
|
||||
OverlayArena* mArena = nullptr;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ArchiveWork, 0x10);
|
||||
|
||||
} // namespace res
|
||||
|
||||
} // namespace ksys
|
Loading…
Reference in New Issue