Use sead::OffsetList::robustRange() when possible to simplify iteration

This commit is contained in:
Léo Lam 2022-03-05 19:09:32 +01:00
parent d839816081
commit 88a0a9eb69
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 12 additions and 13 deletions

View File

@ -310,11 +310,10 @@ void BaseProcMgr::calc() {
for (auto& proc : mProcUpdateStateList) for (auto& proc : mProcUpdateStateList)
proc.processStateUpdate(mCounter); proc.processStateUpdate(mCounter);
for (auto it = mProcUpdateStateList.robustBegin(), end = mProcUpdateStateList.robustEnd(); for (auto& proc : mProcUpdateStateList.robustRange()) {
it != end; ++it) { proc.afterUpdateState_();
it->afterUpdateState_(); if (proc.mStateFlags.isZero()) {
if (it->mStateFlags.isZero()) { mProcUpdateStateList.erase(&proc);
mProcUpdateStateList.erase(std::addressof(*it));
} }
} }

View File

@ -644,9 +644,9 @@ void ResourceMgrTask::clearUnits_() {
if (num_units != 0 && returnFalse()) if (num_units != 0 && returnFalse())
stubbedLogFunction(); stubbedLogFunction();
for (auto it = mUnits.robustBegin(), end = mUnits.robustEnd(); it != end; ++it) { for (auto& unit_ref : mUnits.robustRange()) {
ResourceUnit* unit = &*it; ResourceUnit* unit = &unit_ref;
if (it->mTask3.canSubmitRequest()) { if (unit->mTask3.canSubmitRequest()) {
mUnits.erase(unit); mUnits.erase(unit);
requestClearCache(&unit); requestClearCache(&unit);
} }

View File

@ -73,8 +73,8 @@ void OverlayArena::clearUnits() {
res::stubbedLogFunction(); res::stubbedLogFunction();
auto lock = sead::makeScopedLock(mCS); auto lock = sead::makeScopedLock(mCS);
for (auto it = mUnits.robustBegin(), end = mUnits.robustEnd(); it != end; ++it) { for (auto& unit_ref : mUnits.robustRange()) {
res::ResourceUnit* unit = std::addressof(*it); res::ResourceUnit* unit = &unit_ref;
res::stubbedLogFunction(); res::stubbedLogFunction();
res::ResourceMgrTask::instance()->deregisterUnit(unit); res::ResourceMgrTask::instance()->deregisterUnit(unit);
res::ResourceMgrTask::instance()->requestClearCacheForSync(&unit, true, false); res::ResourceMgrTask::instance()->requestClearCacheForSync(&unit, true, false);

View File

@ -31,9 +31,9 @@ void TaskQueueBase::clear() {
lock(); lock();
// Clear all tasks. // Clear all tasks.
for (auto it = mActiveTasks.robustBegin(), end = mActiveTasks.robustEnd(); it != end; ++it) { for (auto& task : mActiveTasks.robustRange()) {
mActiveTasks.erase(std::addressof(*it)); mActiveTasks.erase(&task);
it->onRemove(); task.onRemove();
} }
mActiveTasks.clear(); mActiveTasks.clear();