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)
proc.processStateUpdate(mCounter);
for (auto it = mProcUpdateStateList.robustBegin(), end = mProcUpdateStateList.robustEnd();
it != end; ++it) {
it->afterUpdateState_();
if (it->mStateFlags.isZero()) {
mProcUpdateStateList.erase(std::addressof(*it));
for (auto& proc : mProcUpdateStateList.robustRange()) {
proc.afterUpdateState_();
if (proc.mStateFlags.isZero()) {
mProcUpdateStateList.erase(&proc);
}
}

View File

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

View File

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

View File

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