diff options
| author | robojumper <robojumper@gmail.com> | 2025-09-13 10:05:17 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-13 10:05:17 +0200 |
| commit | 342f867df2825eb5d76bea7e2a85cba1cdd60c80 (patch) | |
| tree | 8de6499e1a3ae3dec95d22550b6f68bf20b7f2b7 /src | |
| parent | 8efc3f6de1b84b3c7f2424e8984b8b0a8fdc2f73 (diff) | |
| parent | da63feb111ea145e33be6d6bf108e6d8f559e77b (diff) | |
Merge pull request #233 from robojumper/arc-dvd-ret-cleanups
Small status/result cleanups for arc managers
Diffstat (limited to 'src')
| -rw-r--r-- | src/DynamicLink.cpp | 2 | ||||
| -rw-r--r-- | src/REL/d/d_s_boot.cpp | 12 | ||||
| -rw-r--r-- | src/d/a/obj/d_a_obj_tbox.cpp | 7 | ||||
| -rw-r--r-- | src/d/d_dvd.cpp | 2 | ||||
| -rw-r--r-- | src/d/d_dylink.cpp | 2 | ||||
| -rw-r--r-- | src/d/d_rawarchive.cpp | 56 | ||||
| -rw-r--r-- | src/d/d_sc_game.cpp | 4 | ||||
| -rw-r--r-- | src/d/d_sc_title.cpp | 13 | ||||
| -rw-r--r-- | src/d/d_stage_mgr.cpp | 14 | ||||
| -rw-r--r-- | src/d/d_thp_player.cpp | 4 | ||||
| -rw-r--r-- | src/toBeSorted/arc_managers/layout_arc_manager.cpp | 70 | ||||
| -rw-r--r-- | src/toBeSorted/arc_managers/oarc_manager.cpp | 55 |
12 files changed, 175 insertions, 66 deletions
diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index cf9c5e52..5154cf57 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -197,7 +197,7 @@ BOOL DynamicModuleControl::do_load_async() { mDvdCallbackRequest = mDvd_callback_c::create(callback, this); } - if (mDvdCallbackRequest != nullptr && mDvdCallbackRequest->mStatus != 0) { + if (mDvdCallbackRequest != nullptr && mDvdCallbackRequest->isDone()) { mDvdCallbackRequest->do_delete(); mDvdCallbackRequest = nullptr; return true; diff --git a/src/REL/d/d_s_boot.cpp b/src/REL/d/d_s_boot.cpp index ea55d6c0..758a75ef 100644 --- a/src/REL/d/d_s_boot.cpp +++ b/src/REL/d/d_s_boot.cpp @@ -69,10 +69,10 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb1() { } sFPhaseBase::sFPhaseState dScBoot_c::cb2() { - if (OarcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (OarcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } - if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } @@ -104,7 +104,7 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb5() { return sFPhaseBase::PHASE_RETRY; } } - if (mpDvdCallback->mStatus == 0) { + if (!mpDvdCallback->isDone()) { return sFPhaseBase::PHASE_RETRY; } else { mpDvdCallback->do_delete(); @@ -271,11 +271,11 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb7() { return sFPhaseBase::PHASE_RETRY; } - if (OarcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (OarcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } - if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } @@ -341,7 +341,7 @@ dScBoot_c::strap_c::strap_c() { bool dScBoot_c::strap_c::create() { if (!field_0x4EC) { - if (LayoutArcManager::GetInstance()->ensureLoaded1(mArcName)) { + if (LayoutArcManager::GetInstance()->ensureLoaded1(mArcName) != D_ARC_RESULT_OK) { return false; } void *data = LayoutArcManager::GetInstance()->getLoadedData(mArcName); diff --git a/src/d/a/obj/d_a_obj_tbox.cpp b/src/d/a/obj/d_a_obj_tbox.cpp index 6c9e99dd..ef3c05de 100644 --- a/src/d/a/obj/d_a_obj_tbox.cpp +++ b/src/d/a/obj/d_a_obj_tbox.cpp @@ -13,6 +13,7 @@ #include "d/col/cc/d_cc_s.h" #include "d/d_light_env.h" #include "d/d_pouch.h" +#include "d/d_rawarchive.h" #include "d/d_room.h" #include "d/d_stage.h" #include "d/flag/sceneflag_manager.h" @@ -1165,7 +1166,7 @@ int dAcTbox_c::doDelete() { } if (sCurrentObtainingItemOarcName != nullptr) { OarcManager *mng = OarcManager::GetInstance(); - if (!mng->ensureLoaded1(sCurrentObtainingItemOarcName)) { + if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) == D_ARC_RESULT_OK) { mng->decrement(sCurrentObtainingItemOarcName); sCurrentObtainingItemOarcName = nullptr; } @@ -1884,7 +1885,7 @@ void dAcTbox_c::initializeState_DeleteArchive() { void dAcTbox_c::executeState_DeleteArchive() { if (sCurrentObtainingItemOarcName != nullptr) { OarcManager *mng = OarcManager::GetInstance(); - if (!mng->ensureLoaded1(sCurrentObtainingItemOarcName)) { + if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) == D_ARC_RESULT_OK) { mng->decrement(sCurrentObtainingItemOarcName); sCurrentObtainingItemOarcName = nullptr; } @@ -1922,7 +1923,7 @@ void dAcTbox_c::initializeState_LoadArchive() { field_0x120C = 0; } void dAcTbox_c::executeState_LoadArchive() { - if (!OarcManager::GetInstance()->ensureLoaded1(sCurrentObtainingItemOarcName)) { + if (OarcManager::GetInstance()->ensureLoaded1(sCurrentObtainingItemOarcName) == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_Open); } } diff --git a/src/d/d_dvd.cpp b/src/d/d_dvd.cpp index 464702e5..9cdbb85a 100644 --- a/src/d/d_dvd.cpp +++ b/src/d/d_dvd.cpp @@ -38,7 +38,7 @@ void *loader_c::request(const char *path, u8 mountDirection, EGG::Heap *heap) { } mpCommand = mDvd_toMainRam_normal_c::create(buf, mountDirection, heap); } - if (mpCommand != nullptr && mpCommand->mStatus != 0) { + if (mpCommand != nullptr && mpCommand->isDone()) { mpBuffer = mpCommand->mDataPtr; mSize = mpCommand->mAmountRead; mpCommand->mDataPtr = nullptr; diff --git a/src/d/d_dylink.cpp b/src/d/d_dylink.cpp index 2c17a470..9ba0d681 100644 --- a/src/d/d_dylink.cpp +++ b/src/d/d_dylink.cpp @@ -336,7 +336,7 @@ bool destroy() { return true; } - if (DVD->mStatus != 0) { + if (DVD->isDone()) { DVD->do_delete(); DVD = nullptr; return true; diff --git a/src/d/d_rawarchive.cpp b/src/d/d_rawarchive.cpp index d3854d37..99b393c6 100644 --- a/src/d/d_rawarchive.cpp +++ b/src/d/d_rawarchive.cpp @@ -36,10 +36,10 @@ dRawArcEntry_c::dRawArcEntry_c() { dRawArcEntry_c::~dRawArcEntry_c() { // Wait for request to complete before destroying - if (mpDvdReq->mStatus == 0) { + if (!mpDvdReq->isDone()) { do { VIWaitForRetrace(); - } while (mpDvdReq->mStatus == 0); + } while (!mpDvdReq->isDone()); } destroy(nullptr); } @@ -72,7 +72,7 @@ void dRawArcEntry_c::searchCallback2(void *a, void *b, const ARCDirEntry *c, con bool dRawArcEntry_c::destroy(void *arg) { if (mpDvdReq != nullptr) { - if (mpDvdReq->mStatus == 0) { + if (!mpDvdReq->isDone()) { // Can't destroy if the request is still ongoing return false; } @@ -144,31 +144,27 @@ BOOL dRawArcEntry_c::checkArcExistsOnDiskInner(SizedString<128> &path, const cha return true; } -int dRawArcEntry_c::mount( +dArcResult_e dRawArcEntry_c::mount( const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap ) { mArcName = name; mpArc = EGG::Archive::mount(data, heap, (mountDirection == 0 || mountDirection == 1) ? 4 : -4); if (mpArc == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } else { - int result = onMount(callbackArg); - int ret = 0; - if (result == -1) { - ret = result; - } - return ret; + dArcResult_e result = onMount(callbackArg); + return result == D_ARC_RESULT_ERROR_INTERNAL ? result : D_ARC_RESULT_OK; } } -int dRawArcEntry_c::ensureLoadedMaybe(void *callbackArg) { +dArcResult_e dRawArcEntry_c::ensureLoadedMaybe(void *callbackArg) { if (mpArc == nullptr) { if (mpDvdReq == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } - if (mpDvdReq->mStatus == 0) { - return 1; + if (!mpDvdReq->isDone()) { + return D_ARC_RESULT_WAIT; } mpArc = mpDvdReq->mDataPtr; @@ -185,31 +181,31 @@ int dRawArcEntry_c::ensureLoadedMaybe(void *callbackArg) { mpDvdReq->do_delete(); mpDvdReq = nullptr; if (mpArc == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } mpFrmHeap = mHeap::makeHeapOnCurrentGameHeap(-1, name(), 0x20, mHeap::OPT_NONE); if (mpFrmHeap == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } - int result = onMount(callbackArg); + dArcResult_e result = onMount(callbackArg); mHeap::restoreCurrentHeap(); mHeap::adjustFrmHeap(mpFrmHeap); mChecksum = computeChecksum(mpData, mAmountRead); - if (result == -1) { + if (result == D_ARC_RESULT_ERROR_INTERNAL) { return result; } DCStoreRange(mpFrmHeap, mpFrmHeap->mHeapHandle->end - (u8 *)mpFrmHeap); } - return 0; + return D_ARC_RESULT_OK; } -int dRawArcEntry_c::onMount(void *callbackArg) { +dArcResult_e dRawArcEntry_c::onMount(void *callbackArg) { mpArc->countFile(); if (callbackArg != nullptr) { mpArc->searchInside(searchCallback1, callbackArg); } - return 0; + return D_ARC_RESULT_OK; } dRawArcTable_c::dRawArcTable_c() { @@ -271,18 +267,18 @@ BOOL dRawArcTable_c::addEntryFromSuperArc(const char *name, void *data, u8 mount return true; } -int dRawArcTable_c::ensureLoadedMaybe2(const char *name) { +dArcResult_e dRawArcTable_c::ensureLoadedMaybe2(const char *name) { dRawArcEntry_c *entry = findEntry(name); if (entry == nullptr) { - return -2; + return D_ARC_RESULT_ERROR_NOT_FOUND; } return entry->ensureLoadedMaybe(mCallbackArg); } -int dRawArcTable_c::ensureLoadedMaybe(const char *name) { +dArcResult_e dRawArcTable_c::ensureLoadedMaybe(const char *name) { dRawArcEntry_c *entry = findEntry(name); if (entry == nullptr) { - return -2; + return D_ARC_RESULT_ERROR_NOT_FOUND; } return entry->ensureLoadedMaybe(mCallbackArg); } @@ -335,20 +331,20 @@ void *dRawArcTable_c::getLoadedArcData(const char *name) { return entry == nullptr ? nullptr : entry->getData(); } -int dRawArcTable_c::ensureAllEntriesLoaded() { +dArcResult_e dRawArcTable_c::ensureAllEntriesLoaded() { dRawArcEntry_c *entry = mpEntries; - int result = 0; + dArcResult_e result = D_ARC_RESULT_OK; for (int i = 0; i < mCount; i++) { if (entry->isLoading()) { result = entry->ensureLoadedMaybe(mCallbackArg); - if (result != 0) { + if (result != D_ARC_RESULT_OK) { return result; } } entry++; } - return 0; + return D_ARC_RESULT_OK; } dRawArcEntry_c *dRawArcTable_c::findEntry(const char *name) const { diff --git a/src/d/d_sc_game.cpp b/src/d/d_sc_game.cpp index 0399b3de..10f2c796 100644 --- a/src/d/d_sc_game.cpp +++ b/src/d/d_sc_game.cpp @@ -117,11 +117,11 @@ sFPhaseBase::sFPhaseState dScGame_c::cb2() { return sFPhaseBase::PHASE_RETRY; } - if (OarcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (OarcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } - if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } diff --git a/src/d/d_sc_title.cpp b/src/d/d_sc_title.cpp index 73e578d7..91cede66 100644 --- a/src/d/d_sc_title.cpp +++ b/src/d/d_sc_title.cpp @@ -112,32 +112,31 @@ int dScTitle_c::execute() { } int dScTitle_c::doDelete() { - // TODO return codes int result; result = LayoutArcManager::GetInstance()->ensureLoaded2(sFileSelect); - if (result != -2) { - if (result != 0) { + if (result != D_ARC_RESULT_ERROR_NOT_FOUND) { + if (result != D_ARC_RESULT_OK) { return NOT_READY; } LayoutArcManager::GetInstance()->decrement(sFileSelect); } result = LayoutArcManager::GetInstance()->ensureLoaded2(sSkb); - if (result != -2) { - if (result != 0) { + if (result != D_ARC_RESULT_ERROR_NOT_FOUND) { + if (result != D_ARC_RESULT_OK) { return NOT_READY; } LayoutArcManager::GetInstance()->decrement(sSkb); } // TODO here's the other half of the ::destroy fakematch... - if (mpSkbArc->mStatus != 0) { + if (mpSkbArc->isDone()) { mDvd_command_c::destroy((mDvd_command_c **)&mpSkbArc); } else { return NOT_READY; } - if (mpSkbFont->mStatus != 0) { + if (mpSkbFont->isDone()) { mDvd_command_c::destroy((mDvd_command_c **)&mpSkbFont); } else { return NOT_READY; diff --git a/src/d/d_stage_mgr.cpp b/src/d/d_stage_mgr.cpp index f300116f..678848e0 100644 --- a/src/d/d_stage_mgr.cpp +++ b/src/d/d_stage_mgr.cpp @@ -45,7 +45,7 @@ void dStageMgr_c::initializeState_ReadStageRes() { } void dStageMgr_c::executeState_ReadStageRes() { - if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_ReadRoomRes); } } @@ -62,8 +62,8 @@ void dStageMgr_c::finalizeState_ReadStageRes() { void dStageMgr_c::initializeState_ReadRoomRes() {} void dStageMgr_c::executeState_ReadRoomRes() { - if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == 0 && - LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK && + LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_ReadObjectRes); } } @@ -100,7 +100,7 @@ void dStageMgr_c::initializeState_ReadStageLayerRes() { } void dStageMgr_c::executeState_ReadStageLayerRes() { - if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_ReadLayerObjectRes); } } @@ -142,7 +142,7 @@ void dStageMgr_c::initializeState_ReadLayerObjectRes() { } void dStageMgr_c::executeState_ReadLayerObjectRes() { - if (mLayerObjCtrl.isLoaded() && LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (mLayerObjCtrl.isLoaded() && LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_SoundLoadSceneData); } } @@ -172,7 +172,7 @@ void dStageMgr_c::initializeState_SoundLoadSceneData() { } void dStageMgr_c::executeState_SoundLoadSceneData() { - if (mpDvdCallback != nullptr && mpDvdCallback->mStatus != 0) { + if (mpDvdCallback != nullptr && mpDvdCallback->isDone()) { mStateMgr.changeState(StateID_CreateObject); } } @@ -208,7 +208,7 @@ void dStageMgr_c::executeState_ReadObjectSound() { return; } - if (mpDvdCallback2->mStatus == 0) { + if (!mpDvdCallback2->isDone()) { return; } diff --git a/src/d/d_thp_player.cpp b/src/d/d_thp_player.cpp index 3728ec60..2e08fd1d 100644 --- a/src/d/d_thp_player.cpp +++ b/src/d/d_thp_player.cpp @@ -91,7 +91,7 @@ void dThpPlayer_c::setupFile(char* filename, s32 loadAllAtOnce) { static const u8 SPECIAL_TYPES[] = {0x7A, 0x78, 0x78}; void dThpPlayer_c::reallyExecute() { - if (mDvdCallback == nullptr || mDvdCallback->mStatus == 0 || !mFilenameSet || mSetupDone) { + if (mDvdCallback == nullptr || !mDvdCallback->isDone() || !mFilenameSet || mSetupDone) { return; } if (mFilename == "THP/Demo01_01.thp") { @@ -139,7 +139,7 @@ s32 dThpPlayer_c::play() { s32 dThpPlayer_c::destroy() { if (mDvdCallback != nullptr) { - if (mDvdCallback->mStatus == 0) { + if (!mDvdCallback->isDone()) { return NOT_READY; } THPPlayerStop(); diff --git a/src/toBeSorted/arc_managers/layout_arc_manager.cpp b/src/toBeSorted/arc_managers/layout_arc_manager.cpp index 464a4022..091fe504 100644 --- a/src/toBeSorted/arc_managers/layout_arc_manager.cpp +++ b/src/toBeSorted/arc_managers/layout_arc_manager.cpp @@ -2,7 +2,6 @@ #include "d/d_heap.h" - LayoutArcManager *LayoutArcManager::sInstance; LayoutArcManager::LayoutArcManager() { @@ -24,11 +23,11 @@ bool LayoutArcManager::loadLayoutArcFromDisk(const char *object, EGG::Heap *heap return mArcTable.getArcOrLoadFromDisk(object, "Layout", 0, heap); } -int LayoutArcManager::ensureLoaded1(const char *object) { +dArcResult_e LayoutArcManager::ensureLoaded1(const char *object) { return mArcTable.ensureLoadedMaybe2(object); } -int LayoutArcManager::ensureLoaded2(const char *object) { +dArcResult_e LayoutArcManager::ensureLoaded2(const char *object) { return mArcTable.ensureLoadedMaybe(object); } @@ -57,3 +56,68 @@ bool LayoutArcManager::create(EGG::Heap *heap) { GetInstance()->init(heap); return true; } + +LayoutArcControl::~LayoutArcControl() { + if (mLayoutArcs != nullptr) { + release(); + } +} + +void LayoutArcControl::set(const char *const *layoutArcs, s32 numArcs) { + mLayoutArcs = layoutArcs; + mNumArcs = numArcs; +} + +bool LayoutArcControl::load(EGG::Heap *heap) const { + if (mLayoutArcs == nullptr) { + return true; + } + + const char *const *ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(*ptr, heap); + ptr++; + } + + return true; +} + +bool LayoutArcControl::allLoaded() const { + if (mLayoutArcs == nullptr) { + return true; + } + + const char *const *ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + dArcResult_e res = LayoutArcManager::GetInstance()->ensureLoaded1(*ptr); + if (res != D_ARC_RESULT_OK) { + return false; + } + ptr++; + } + return true; +} + +bool LayoutArcControl::release() { + if (mLayoutArcs == nullptr) { + return true; + } + + const char *const *ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + dArcResult_e res = LayoutArcManager::GetInstance()->ensureLoaded2(*ptr); + if (res != D_ARC_RESULT_ERROR_NOT_FOUND && res != D_ARC_RESULT_OK) { + return false; + } + ptr++; + } + + ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + LayoutArcManager::GetInstance()->decrement(*ptr); + ptr++; + } + mLayoutArcs = nullptr; + + return true; +} diff --git a/src/toBeSorted/arc_managers/oarc_manager.cpp b/src/toBeSorted/arc_managers/oarc_manager.cpp index 351e31c2..aa284e3f 100644 --- a/src/toBeSorted/arc_managers/oarc_manager.cpp +++ b/src/toBeSorted/arc_managers/oarc_manager.cpp @@ -34,12 +34,12 @@ bool OarcManager::addEntryFromSuperArc(const char *object, void *data, EGG::Heap return mArcTable.addEntryFromSuperArc(object, data, 0, heap); } -int OarcManager::ensureLoaded1(const char *object) { +dArcResult_e OarcManager::ensureLoaded1(const char *object) { return mArcTable.ensureLoadedMaybe2(object); } -void OarcManager::ensureLoaded2(const char *object) { - mArcTable.ensureLoadedMaybe(object); +dArcResult_e OarcManager::ensureLoaded2(const char *object) { + return mArcTable.ensureLoadedMaybe(object); } bool OarcManager::decrement(const char *path) { @@ -89,3 +89,52 @@ bool OarcManager::create(EGG::Heap *heap) { GetInstance()->init(heap); return true; } + +ObjectArcControl::~ObjectArcControl() { + if (mObjectArcs != nullptr) { + release(); + } +} + +void ObjectArcControl::set(const char *const *objectArcs, s32 numArcs) { + mObjectArcs = objectArcs; + mNumArcs = numArcs; +} + +bool ObjectArcControl::load(EGG::Heap *heap) const { + if (mObjectArcs == nullptr) { + return true; + } + + const char *const *ptr = mObjectArcs; + for (int i = 0; i < mNumArcs; i++) { + OarcManager::GetInstance()->loadObjectArcFromDisk(*ptr, heap); + ptr++; + } + + return true; +} + +bool ObjectArcControl::release() { + if (mObjectArcs == nullptr) { + return true; + } + + const char *const *ptr = mObjectArcs; + for (int i = 0; i < mNumArcs; i++) { + dArcResult_e res = OarcManager::GetInstance()->ensureLoaded2(*ptr); + if (res != D_ARC_RESULT_ERROR_NOT_FOUND && res != D_ARC_RESULT_OK) { + return false; + } + ptr++; + } + + ptr = mObjectArcs; + for (int i = 0; i < mNumArcs; i++) { + OarcManager::GetInstance()->decrement(*ptr); + ptr++; + } + mObjectArcs = nullptr; + + return true; +} |
