4#include <framework/seadHeapPolicies.h>
5#include <framework/seadMethodTree.h>
6#include <framework/seadTaskBase.h>
7#include <heap/seadHeapMgr.h>
8#include <thread/seadCriticalSection.h>
42 static_assert(
sizeof(
InitializeArg) == 0x18,
"sead::TaskMgr::InitializeArg size mismatch");
45 class TaskCreateContextMgr;
60 return mHeapArray.getPrimaryHeap();
140static_assert(
sizeof(
TaskMgr) == 0x1A8,
"sead::TaskMgr size mismatch");
145#define SEAD_TASK_SINGLETON_DISPOSER(CLASS)
147 static CLASS* instance() { return sInstance; }
148 static void setInstance_(sead::TaskBase* instance);
149 static void deleteInstance();
152 class SingletonDisposer_
155 SingletonDisposer_() : mIsSetAsSingleton_(false) { }
156 ~SingletonDisposer_();
158 bool mIsSetAsSingleton_;
163 const CLASS& operator
=(const CLASS&);
166 SingletonDisposer_ mSingletonDisposer_;
168 static CLASS* sInstance;
170 friend class SingletonDisposer_;
172#define SEAD_TASK_SET_SINGLETON_INSTANCE(CLASS)
173 void CLASS::setInstance_(sead::TaskBase* instance)
175 if (CLASS::sInstance == nullptr)
177 CLASS::sInstance = static_cast<CLASS*>(instance);
178 static_cast<CLASS*>(instance)->mSingletonDisposer_.mIsSetAsSingleton_ = true;
186#define SEAD_TASK_DELETE_SINGLETON_INSTANCE(CLASS)
187 void CLASS::deleteInstance()
189 if (CLASS::sInstance != nullptr)
191 CLASS::sInstance->mTaskMgr->destroyTaskSync(CLASS::sInstance);
192 CLASS::sInstance = nullptr;
196#define SEAD_TASK_SINGLETON_DISPOSER_IMPL(CLASS)
197 CLASS* CLASS::sInstance = nullptr;
202 CLASS::SingletonDisposer_::~SingletonDisposer_()
204 if (mIsSetAsSingleton_)
206 CLASS::sInstance = nullptr;
Definition seadCriticalSection.h:13
Definition seadDelegateThread.h:12
Definition seadFramework.h:24
Definition seadHeapPolicies.h:10
Definition seadMethodTree.h:17
Definition seadTaskBase.h:26
State
Definition seadTaskBase.h:35
TList< TaskBase * > List
Definition seadTaskBase.h:31
Definition seadTaskID.h:40
Definition seadTaskMgr.h:19
TaskBase * getRootTask() const
Definition seadTaskMgr.h:63
TaskBase * pushSync(const TaskBase::PushArg &arg)
TaskBase::List mDestroyableList
Definition seadTaskMgr.h:128
TaskBase * mRootTask
Definition seadTaskMgr.h:132
bool requestPop(TaskBase *pop_task, FaderTaskBase *fader)
T * createSingletonTaskSync(const TaskBase::CreateArg &arg)
TaskBase::List mStaticList
Definition seadTaskMgr.h:126
NullFaderTask * mNullFaderTask
Definition seadTaskMgr.h:122
void prepare_(Thread *, s32 msg)
MethodTreeNode mCalcDestructionTreeNode
Definition seadTaskMgr.h:135
TaskBase::CreateArg mRootTaskCreateArg
Definition seadTaskMgr.h:133
void beginCreateRootTask_()
bool popSync(TaskBase *pop_task)
void destroyTaskSync(TaskBase *task)
Definition seadTaskMgr.cpp:107
TaskBase * createTaskSync(const TaskBase::CreateArg &arg)
void createHeap_(HeapArray *ha, const TaskBase::CreateArg &arg)
void doDestroyTask_(TaskBase *task)
Definition seadTaskMgr.cpp:119
bool requestCreateTask(const TaskBase::CreateArg &arg)
Framework * getFramework() const
Definition seadTaskMgr.h:53
TaskBase::List mActiveList
Definition seadTaskMgr.h:125
TaskMgr(const InitializeArg &arg)
bool requestTakeover(const TaskBase::TakeoverArg &arg)
void appendToList_(TaskBase::List &ls, TaskBase *task)
static TaskMgr * initialize(const InitializeArg &arg)
DelegateThread * mPrepareThread
Definition seadTaskMgr.h:121
bool doRequestCreateTask_(const TaskBase::CreateArg &arg, DelegateEvent< TaskBase * >::Slot *system_slot)
HeapArray mHeapArray
Definition seadTaskMgr.h:129
TaskBase * findTask(const TaskClassID &classID)
bool requestTransition(TaskBase *from, TaskBase *to, FaderTaskBase *fader)
bool requestPush(const TaskBase::PushArg &arg)
bool requestPop(TaskBase *pop_task, TaskBase *to_task, FaderTaskBase *fader)
TaskCreateContextMgr * mTaskCreateContextMgr
Definition seadTaskMgr.h:130
bool destroyable_(TaskBase *task)
void finalize()
Definition seadTaskMgr.cpp:141
void requestDestroyTask(TaskBase *task, FaderTaskBase *fader)
Heap * getHeap()
Definition seadTaskMgr.h:58
CriticalSection mCriticalSection
Definition seadTaskMgr.h:119
TaskMgr::InitializeArg mInitializeArg
Definition seadTaskMgr.h:134
u32 _1a4
Definition seadTaskMgr.h:137
u32 mMaxCreateQueueSize
Definition seadTaskMgr.h:131
TaskBase * doCreateTask_(const TaskBase::CreateArg &arg, HeapArray *ha)
void destroyAllAndCreateRoot()
TaskBase::List mPrepareList
Definition seadTaskMgr.h:123
u32 _1a0
Definition seadTaskMgr.h:136
Framework * mParentFramework
Definition seadTaskMgr.h:120
TaskBase::List mDyingList
Definition seadTaskMgr.h:127
TaskBase::List mPrepareDoneList
Definition seadTaskMgr.h:124
bool changeTaskState_(TaskBase *task, TaskBase::State state)
Definition seadTaskMgr.cpp:13
Definition seadThread.h:28
Definition seadHostIODummy.h:25
Definition seadAssert.h:44
#define SEAD_TASK_DELETE_SINGLETON_INSTANCE(CLASS)
Definition seadTaskMgr.h:186
#define SEAD_TASK_SET_SINGLETON_INSTANCE(CLASS)
Definition seadTaskMgr.h:172
Definition seadTaskBase.h:53
Definition seadTaskMgr.h:22
Framework * parent_framework
Definition seadTaskMgr.h:39
InitializeArg(const TaskBase::CreateArg &roottask_arg)
Definition seadTaskMgr.h:24
Heap * heap
Definition seadTaskMgr.h:38
u32 prepare_stack_size
Definition seadTaskMgr.h:35
const TaskBase::CreateArg & roottask_create_arg
Definition seadTaskMgr.h:37
u32 create_queue_size
Definition seadTaskMgr.h:34
s32 prepare_priority
Definition seadTaskMgr.h:36