mirror of https://github.com/zeldaret/botw.git
ksys/act: Implement BaseProc iteration
This commit is contained in:
parent
298fa86491
commit
fd7e47c1d9
|
@ -91818,7 +91818,7 @@
|
|||
0x00000071011be734,BaseProcMgr::checkGetActorOk,328,_ZNK4ksys3act11BaseProcMgr19isAccessingProcSafeEPNS0_8BaseProcES3_
|
||||
0x00000071011be87c,BaseProcMgr::requestActorCreate,8,_ZN4ksys3act11BaseProcMgr17requestCreateProcERKNS0_21BaseProcCreateRequestE
|
||||
0x00000071011be884,BaseProcMgr::createActor,8,_ZN4ksys3act11BaseProcMgr10createProcERKNS0_21BaseProcCreateRequestE
|
||||
0x00000071011be88c,BaseProcMgr::getNextActor,532,
|
||||
0x00000071011be88c,BaseProcMgr::getNextActor,532,_ZN4ksys3act11BaseProcMgr11getNextProcEPN4sead15CriticalSectionEPNS0_8BaseProcENS2_12TypedBitFlagINS1_10ProcFilterEiEE
|
||||
0x00000071011beaa0,sub_71011BEAA0,464,_ZN4ksys3act11BaseProcMgr7getProcERKN4sead14SafeStringBaseIcEENS2_12TypedBitFlagINS1_10ProcFilterEiEE
|
||||
0x00000071011bec70,sub_71011BEC70,252,_ZN4ksys3act11BaseProcMgr7getProcERKjN4sead12TypedBitFlagINS1_10ProcFilterEiEE
|
||||
0x00000071011bed6c,BaseProcMgr::invokeForEachActor,140,_ZN4ksys3act11BaseProcMgr11forEachProcERN4sead10IDelegate1IPNS0_8BaseProcEEENS2_12TypedBitFlagINS1_10ProcFilterEiEE?
|
||||
|
|
Can't render this file because it is too large.
|
2
lib/agl
2
lib/agl
|
@ -1 +1 @@
|
|||
Subproject commit 92c5633549da576da3168d6c8f988207de639e5c
|
||||
Subproject commit a63010880b67e5a667aed6528144a4ad94a8cfb4
|
2
lib/sead
2
lib/sead
|
@ -1 +1 @@
|
|||
Subproject commit 83c6cf26499441d7b55a89ef9ce560d23d58770d
|
||||
Subproject commit 80d838dcc8db49409b490b51f6a81ff96e0ea8a2
|
|
@ -470,6 +470,37 @@ inline bool BaseProcMgr::checkFilters(BaseProc* proc, ProcFilters filters) const
|
|||
return !filters.isOff(ProcFilter::SkipAccessCheck) || isAccessingProcSafe(proc, nullptr);
|
||||
}
|
||||
|
||||
BaseProc* BaseProcMgr::getNextProc(sead::CriticalSection* cs, BaseProc* current_proc,
|
||||
BaseProcMgr::ProcFilters filters) {
|
||||
if (&mProcMapCS != cs)
|
||||
return nullptr;
|
||||
|
||||
BaseProcMapNode* node = nullptr;
|
||||
if (current_proc)
|
||||
node = current_proc->mMapNode.next();
|
||||
else
|
||||
node = mLastProcMapNode = mProcMap.startIterating();
|
||||
|
||||
if (!node && mLastProcMapNode)
|
||||
node = mLastProcMapNode = mProcMap.nextNode(mLastProcMapNode);
|
||||
|
||||
auto* proc = node ? node->proc() : nullptr;
|
||||
while (proc) {
|
||||
if (checkFilters(proc, filters))
|
||||
return proc;
|
||||
|
||||
node = proc->mMapNode.next();
|
||||
if (!node && mLastProcMapNode)
|
||||
node = mLastProcMapNode = mProcMap.nextNode(mLastProcMapNode);
|
||||
|
||||
if (!node)
|
||||
return nullptr;
|
||||
|
||||
proc = node->proc();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BaseProc* BaseProcMgr::getProc(const sead::SafeString& name, BaseProcMgr::ProcFilters filters) {
|
||||
const auto lock = sead::makeScopedLock(mProcMapCS);
|
||||
|
||||
|
|
|
@ -172,7 +172,7 @@ public:
|
|||
|
||||
// region BaseProc iteration
|
||||
|
||||
BaseProc* getNextProc(sead::CriticalSection* cs, BaseProc* proc, ProcFilters filters);
|
||||
BaseProc* getNextProc(sead::CriticalSection* cs, BaseProc* current_proc, ProcFilters filters);
|
||||
BaseProc* getProc(const sead::SafeString& name, ProcFilters filters);
|
||||
BaseProc* getProc(const u32& id, ProcFilters filters);
|
||||
void forEachProc(sead::IDelegate1<BaseProc*>& callback, ProcFilters filters);
|
||||
|
|
Loading…
Reference in New Issue