summaryrefslogtreecommitdiff
path: root/lib/gsys/src
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-03-31 12:48:14 +0200
committerLéo Lam <leo@leolam.fr>2022-03-31 23:17:34 +0200
commit9d02ca33d84d44f9fb9fa7c7728d4e3386b83093 (patch)
tree10f4746aebc91f078f365f43b86e340294809680 /lib/gsys/src
parent6ce04bccaa6c2dc2ead9f787f770891a0c0f7754 (diff)
gsys: Add Model, ModelAccessKey and ModelUnit stubs
Diffstat (limited to 'lib/gsys/src')
-rw-r--r--lib/gsys/src/gsys/gsysModelAccessKey.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/gsys/src/gsys/gsysModelAccessKey.cpp b/lib/gsys/src/gsys/gsysModelAccessKey.cpp
new file mode 100644
index 00000000..065aee05
--- /dev/null
+++ b/lib/gsys/src/gsys/gsysModelAccessKey.cpp
@@ -0,0 +1,61 @@
+#include "gsys/gsysModelAccessKey.h"
+#include <basis/seadRawPrint.h>
+#include <prim/seadMemUtil.h>
+#include <prim/seadScopedLock.h>
+#include "gsys/gsysModel.h"
+
+namespace gsys {
+
+IModelAccesssHandle::IModelAccesssHandle() = default;
+
+IModelAccesssHandle::~IModelAccesssHandle() {
+ ;
+}
+
+bool IModelAccesssHandle::search(const Model* p_model, const sead::SafeString& name) {
+ SEAD_ASSERT(p_model != nullptr);
+ SEAD_ASSERT_MSG(!sead::MemUtil::isStack(name.cstr()), "String[%s] is on stack.", name.cstr());
+
+ if (mModel != p_model) {
+ remove();
+ p_model->add_(this);
+ mModel = p_model;
+ }
+
+ mName = name;
+ return search();
+}
+
+void IModelAccesssHandle::remove() {
+ if (!mModel)
+ return;
+
+ auto lock = sead::makeScopedLock(mModel->getCS());
+ if (!mListNode.isLinked())
+ return;
+
+ SEAD_ASSERT(mModel != nullptr);
+ mModel->remove_(this);
+ mModel = nullptr;
+ removeImpl_();
+}
+
+bool IModelAccesssHandle::search() {
+ if (!mListNode.isLinked())
+ return false;
+
+ SEAD_ASSERT(mModel != nullptr);
+ return searchImpl_();
+}
+
+BoneAccessKeyEx::BoneAccessKeyEx() = default;
+
+BoneAccessKeyEx::~BoneAccessKeyEx() {
+ remove();
+}
+
+void BoneAccessKeyEx::removeImpl_() {
+ mKey.reset();
+}
+
+} // namespace gsys