BaseProc::getConnectedCalcParent

BaseProc::setConnectedCalcParent
This commit is contained in:
notyouraveragehooman
2020-08-21 14:18:47 -07:00
committed by Léo Lam
parent fc306aa5f0
commit ff99d77635
4 changed files with 31 additions and 8 deletions
+25 -1
View File
@@ -66,7 +66,7 @@ bool BaseProc::deleteLater(DeleteReason reason) {
}
}
if (!BaseProcMgr::instance()->addToUpdateStateList(*this))
if (!BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestDelete))
onDeleteRequested_(reason);
if (!is_high_prio)
@@ -425,4 +425,28 @@ bool BaseProc::x00000071011ba9fc() {
return true;
}
BaseProc* BaseProc::getConnectedCalcParent() const {
if (mConnectedCalcParent == nullptr || mConnectedCalcParent->mState == State::Delete)
return nullptr;
return mConnectedCalcParent;
}
bool BaseProc::setConnectedCalcParent(BaseProc* parent, bool delete_parent_on_delete) {
if (parent == nullptr)
return false;
if (isDeletedOrDeleting() || parent->isDeletedOrDeleting())
return false;
if (BaseProcMgr::instance()->addToUpdateStateList(*this, StateFlags::RequestSetParent))
return false;
mConnectedCalcParentNew = parent;
mFlags.change(Flags::DeleteParentOnDelete, delete_parent_on_delete);
return true;
}
} // namespace ksys::act
+1 -1
View File
@@ -107,7 +107,7 @@ public:
void release();
BaseProc* getConnectedCalcParent() const;
void setConnectedCalcParent(BaseProc* parent, bool delete_parent_on_delete);
bool setConnectedCalcParent(BaseProc* parent, bool delete_parent_on_delete);
void resetConnectedCalcParent(bool clear_existing_set_request);
BaseProc* getConnectedCalcChild() const;
+3 -4
View File
@@ -69,7 +69,7 @@ public:
void unregisterProc(BaseProc& proc);
void addToPreDeleteList(BaseProc& proc);
bool addToUpdateStateList(BaseProc& proc);
bool addToUpdateStateList(BaseProc& proc, BaseProc::StateFlags flags);
void eraseFromPreDeleteList(BaseProc& proc);
void eraseFromUpdateStateList(BaseProc& proc);
void processPreDeleteList();
@@ -210,11 +210,10 @@ private:
};
KSYS_CHECK_SIZE_NX150(BaseProcMgr, 0x21a0);
inline bool BaseProcMgr::addToUpdateStateList(BaseProc& proc) {
inline bool BaseProcMgr::addToUpdateStateList(BaseProc& proc, BaseProc::StateFlags flag) {
auto lock = sead::makeScopedLock(mProcUpdateStateListCS);
doAddToUpdateStateList_(proc);
return (proc.mStateFlags.set(BaseProc::StateFlags::RequestDelete) &
u32(BaseProc::StateFlags::RequestDelete)) != 0;
return (proc.mStateFlags.set(flag) & u32(flag)) != 0;
}
} // namespace ksys::act