blob: 649e0002171d1cb69ac6a00b0d8a503c5a3b9e8c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#pragma once
#include <basis/seadTypes.h>
#include <container/seadBuffer.h>
#include <prim/seadSafeString.h>
#include "KingSystem/Utils/Thread/TaskQueueBase.h"
#include "KingSystem/Utils/Types.h"
namespace sead {
class Heap;
}
namespace ksys::util {
class TaskMgr;
class TaskQueue;
class TaskThread;
} // namespace ksys::util
namespace ksys::act {
class BaseProc;
struct BaseProcCreateRequest;
struct BaseProcInitializerArgs {
u32 queue_size;
sead::SafeString thread_name = "BaseProcCreate";
util::TaskSelectionDelegate* task_selector = nullptr;
};
class BaseProcInitializer {
public:
struct ThreadInfo {
bool valid = false;
util::TaskThread* thread = nullptr;
sead::FixedSafeString<32> thread_name;
};
KSYS_CHECK_SIZE_NX150(ThreadInfo, 0x48);
BaseProcInitializer();
virtual ~BaseProcInitializer();
BaseProcInitializer(const BaseProcInitializer&) = delete;
BaseProcInitializer(BaseProcInitializer&&) = delete;
auto operator=(const BaseProcInitializer&) = delete;
auto operator=(BaseProcInitializer&&) = delete;
const sead::Buffer<ThreadInfo>& getThreads() const { return mThreads; }
bool isActorGenerationEnabled() const { return mActorGenerationEnabled; }
void init(sead::Heap* parent_heap, const BaseProcInitializerArgs& args);
void deleteThreadIfPaused();
bool requestCreateBaseProc(const BaseProcCreateRequest& req);
BaseProc* createBaseProc(const BaseProcCreateRequest& req);
void restartThreads();
void blockPendingTasks();
void pauseThreads();
void resumeThreads();
void unblockPendingTasks();
void pauseMainThread();
void resumeMainThread();
bool isAnyThreadActive() const;
void waitForTaskQueuesToEmpty();
void cancelTasks();
int getQueueSize(int x = -1) const;
void removeTasksIf(sead::IDelegate1R<util::Task*, bool>& predicate);
void setActorGenerationEnabled(bool enabled);
util::TaskQueue* getTaskQueue() const { return mTaskQueue; }
private:
sead::Buffer<ThreadInfo> mThreads;
util::TaskMgr* mTaskMgr = nullptr;
util::TaskQueue* mTaskQueue = nullptr;
sead::Heap* mHeap = nullptr;
bool mActorGenerationEnabled = true;
};
KSYS_CHECK_SIZE_NX150(BaseProcInitializer, 0x38);
} // namespace ksys::act
|