mirror of https://github.com/zeldaret/botw.git
ksys/util: Add TaskMgr initialisation helper
This commit is contained in:
parent
dc7d55e71e
commit
50ebf5116f
2
lib/sead
2
lib/sead
|
@ -1 +1 @@
|
||||||
Subproject commit eab3d9e09fcf11b1ef052bc1cd1b339fb4fe387b
|
Subproject commit 8ca05884c751b7211d051ec8c0700ae202a54860
|
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <basis/seadRawPrint.h>
|
||||||
#include <container/seadBuffer.h>
|
#include <container/seadBuffer.h>
|
||||||
#include <container/seadOffsetList.h>
|
#include <container/seadOffsetList.h>
|
||||||
#include <container/seadSafeArray.h>
|
#include <container/seadSafeArray.h>
|
||||||
|
@ -9,12 +10,13 @@
|
||||||
#include <prim/seadScopedLock.h>
|
#include <prim/seadScopedLock.h>
|
||||||
#include <prim/seadTypedBitFlag.h>
|
#include <prim/seadTypedBitFlag.h>
|
||||||
#include <thread/seadCriticalSection.h>
|
#include <thread/seadCriticalSection.h>
|
||||||
|
#include "KingSystem/Utils/HeapUtil.h"
|
||||||
#include "KingSystem/Utils/Thread/Event.h"
|
#include "KingSystem/Utils/Thread/Event.h"
|
||||||
|
#include "KingSystem/Utils/Thread/ManagedTask.h"
|
||||||
#include "KingSystem/Utils/Types.h"
|
#include "KingSystem/Utils/Types.h"
|
||||||
|
|
||||||
namespace ksys::util {
|
namespace ksys::util {
|
||||||
|
|
||||||
class ManagedTask;
|
|
||||||
class ManagedTaskHandle;
|
class ManagedTaskHandle;
|
||||||
class TaskRequest;
|
class TaskRequest;
|
||||||
struct TaskMgrRequest;
|
struct TaskMgrRequest;
|
||||||
|
@ -38,6 +40,12 @@ public:
|
||||||
virtual ~TaskMgr();
|
virtual ~TaskMgr();
|
||||||
|
|
||||||
void init(s32 num_tasks, sead::Heap* heap, ManagedTaskFactory& factory);
|
void init(s32 num_tasks, sead::Heap* heap, ManagedTaskFactory& factory);
|
||||||
|
|
||||||
|
template <typename TaskType>
|
||||||
|
void init(s32 num_tasks, sead::Heap* heap) {
|
||||||
|
initImpl_<TaskType>(num_tasks, heap);
|
||||||
|
}
|
||||||
|
|
||||||
void finalize();
|
void finalize();
|
||||||
|
|
||||||
void submitRequest(TaskMgrRequest& request);
|
void submitRequest(TaskMgrRequest& request);
|
||||||
|
@ -73,6 +81,25 @@ protected:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename TaskType>
|
||||||
|
void makeTaskType_(ManagedTask** task) {
|
||||||
|
*task = new TaskType(getCurrentHeap());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename TaskType>
|
||||||
|
void initImpl_(s32 num_tasks, sead::Heap* heap) {
|
||||||
|
sead::Delegate1<TaskMgr, ManagedTask**> factory{this, &TaskMgr::makeTaskType_<TaskType>};
|
||||||
|
init(num_tasks, heap, factory);
|
||||||
|
|
||||||
|
if (hasTasks()) {
|
||||||
|
Task* task = nullptr;
|
||||||
|
if (mFreeTaskLists[0].size() >= 1)
|
||||||
|
task = mFreeTaskLists[0].front();
|
||||||
|
const bool is_derived_from_managed_task = sead::IsDerivedFrom<ManagedTask>(task);
|
||||||
|
SEAD_ASSERT(is_derived_from_managed_task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sead::TypedBitFlag<Flag, u8> mFlags;
|
sead::TypedBitFlag<Flag, u8> mFlags;
|
||||||
u8 mListIndex = 0;
|
u8 mListIndex = 0;
|
||||||
ManagedTask* mTask = nullptr;
|
ManagedTask* mTask = nullptr;
|
||||||
|
|
Loading…
Reference in New Issue