Switch to subrepos

git subrepo clone https://github.com/open-ead/sead lib/sead

subrepo:
  subdir:   "lib/sead"
  merged:   "1b66e825d"
upstream:
  origin:   "https://github.com/open-ead/sead"
  branch:   "master"
  commit:   "1b66e825d"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone (merge) https://github.com/open-ead/nnheaders lib/NintendoSDK

subrepo:
  subdir:   "lib/NintendoSDK"
  merged:   "9ee21399f"
upstream:
  origin:   "https://github.com/open-ead/nnheaders"
  branch:   "master"
  commit:   "9ee21399f"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/agl lib/agl

subrepo:
  subdir:   "lib/agl"
  merged:   "7c063271b"
upstream:
  origin:   "https://github.com/open-ead/agl"
  branch:   "master"
  commit:   "7c063271b"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/EventFlow lib/EventFlow

subrepo:
  subdir:   "lib/EventFlow"
  merged:   "c35d21b34"
upstream:
  origin:   "https://github.com/open-ead/EventFlow"
  branch:   "master"
  commit:   "c35d21b34"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"
This commit is contained in:
Léo Lam
2022-03-21 19:25:20 +01:00
parent ffcc7f659e
commit 18c60323a9
457 changed files with 52182 additions and 16 deletions
@@ -0,0 +1,101 @@
#include <framework/seadMethodTree.h>
#include <thread/seadCriticalSection.h>
namespace sead
{
void MethodTreeNode::pushBackChild(MethodTreeNode* node)
{
lock_();
node->detachSubTree();
node->mCriticalSection = mCriticalSection;
if (node->child())
{
auto* parent = node->child()->value();
if (parent)
parent->attachMutexRec_(mCriticalSection);
}
TreeNode::pushBackChild(node);
unlock_();
}
void MethodTreeNode::pushFrontChild(MethodTreeNode* node)
{
lock_();
node->detachSubTree();
node->mCriticalSection = mCriticalSection;
if (node->child())
{
auto* parent = node->child()->value();
if (parent)
parent->attachMutexRec_(mCriticalSection);
}
TreeNode::pushFrontChild(node);
unlock_();
}
void MethodTreeNode::attachMutexRec_(CriticalSection* m) const
{
const MethodTreeNode* node = this;
do
{
auto* child = node->child();
node->mCriticalSection = m;
if (child && child->value())
child->value()->attachMutexRec_(m);
} while (node->next() && (node = node->next()->value()));
}
void MethodTreeNode::detachAll()
{
CriticalSection* cs = mCriticalSection;
attachMutexRec_(NULL);
mCriticalSection = cs;
lock_();
TreeNode::detachAll();
unlock_();
mCriticalSection = NULL;
}
void MethodTreeNode::lock_()
{
if (mCriticalSection == NULL)
return;
mCriticalSection->lock();
}
void MethodTreeNode::unlock_()
{
if (mCriticalSection == NULL)
return;
mCriticalSection->unlock();
}
void MethodTreeNode::call()
{
lock_();
callRec_();
unlock_();
}
void MethodTreeNode::callRec_()
{
if (!mPauseFlag.isOn(cPause_Self))
(*mDelegateHolder.data())();
auto* node = child();
if (node && !mPauseFlag.isOn(cPause_Child))
{
while (node)
{
node->value()->callRec_();
node = node->value()->next();
}
}
}
} // namespace sead