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();
80 T* derived = DynamicCast<T>(task);
146static_assert(
sizeof(
TaskMgr) == 0x1A8,
"sead::TaskMgr size mismatch");
151#define SEAD_TASK_SINGLETON_DISPOSER(CLASS)
153 static CLASS* instance() { return sInstance; }
154 static void setInstance_(sead::TaskBase* instance);
155 static void deleteInstance();
158 class SingletonDisposer_
161 SingletonDisposer_() : mIsSetAsSingleton_(false) { }
162 ~SingletonDisposer_();
164 bool mIsSetAsSingleton_;
169 const CLASS& operator
=(const CLASS&);
172 SingletonDisposer_ mSingletonDisposer_;
174 static CLASS* sInstance;
176 friend class SingletonDisposer_;
178#define SEAD_TASK_SET_SINGLETON_INSTANCE(CLASS)
179 void CLASS::setInstance_(sead::TaskBase* instance)
181 if (CLASS::sInstance == nullptr)
183 CLASS::sInstance = static_cast<CLASS*>(instance);
184 static_cast<CLASS*>(instance)->mSingletonDisposer_.mIsSetAsSingleton_ = true;
192#define SEAD_TASK_DELETE_SINGLETON_INSTANCE(CLASS)
193 void CLASS::deleteInstance()
195 if (CLASS::sInstance != nullptr)
197 CLASS::sInstance->mTaskMgr->destroyTaskSync(CLASS::sInstance);
198 CLASS::sInstance = nullptr;
202#define SEAD_TASK_SINGLETON_DISPOSER_IMPL(CLASS)
203 CLASS* CLASS::sInstance = nullptr;
208 CLASS::SingletonDisposer_::~SingletonDisposer_()
210 if (mIsSetAsSingleton_)
212 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:134
TaskBase * mRootTask
Definition seadTaskMgr.h:138
bool requestPop(TaskBase *pop_task, FaderTaskBase *fader)
T * createSingletonTaskSync(const TaskBase::CreateArg &arg)
Definition seadTaskMgr.h:77
TaskBase::List mStaticList
Definition seadTaskMgr.h:132
NullFaderTask * mNullFaderTask
Definition seadTaskMgr.h:128
void prepare_(Thread *, s32 msg)
MethodTreeNode mCalcDestructionTreeNode
Definition seadTaskMgr.h:141
TaskBase::CreateArg mRootTaskCreateArg
Definition seadTaskMgr.h:139
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:131
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:127
bool doRequestCreateTask_(const TaskBase::CreateArg &arg, DelegateEvent< TaskBase * >::Slot *system_slot)
HeapArray mHeapArray
Definition seadTaskMgr.h:135
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:136
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:125
TaskMgr::InitializeArg mInitializeArg
Definition seadTaskMgr.h:140
u32 _1a4
Definition seadTaskMgr.h:143
u32 mMaxCreateQueueSize
Definition seadTaskMgr.h:137
TaskBase * doCreateTask_(const TaskBase::CreateArg &arg, HeapArray *ha)
void destroyAllAndCreateRoot()
TaskBase::List mPrepareList
Definition seadTaskMgr.h:129
u32 _1a0
Definition seadTaskMgr.h:142
Framework * mParentFramework
Definition seadTaskMgr.h:126
TaskBase::List mDyingList
Definition seadTaskMgr.h:133
TaskBase::List mPrepareDoneList
Definition seadTaskMgr.h:130
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_ASSERT(condition)
Definition seadAssert.h:24
#define SEAD_TASK_DELETE_SINGLETON_INSTANCE(CLASS)
Definition seadTaskMgr.h:192
#define SEAD_TASK_SET_SINGLETON_INSTANCE(CLASS)
Definition seadTaskMgr.h:178
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