Merge pull request #233 from robojumper/arc-dvd-ret-cleanups

Small status/result cleanups for arc managers
This commit is contained in:
robojumper
2025-09-13 10:05:17 +02:00
committed by GitHub
19 changed files with 324 additions and 209 deletions
@@ -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;
}
+52 -3
View File
@@ -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;
}