1#pragma once
2
3#include <mc/seadCoreInfo.h>
4#include <thread/seadThread.h>
5
6#include "Library/HostIO/HioNode.h"
7
8namespace sead {
9class Event;
10class DelegateThread;
11} // namespace sead
12
13namespace al {
14class ExecuteDirector;
15
16class ExecuteAsyncExecutor : public HioNode {
17public:
18 ExecuteAsyncExecutor(const ExecuteDirector* director, const char* name, sead::CoreId coreId);
19 virtual ~ExecuteAsyncExecutor();
20
21 virtual void execute() = 0;
22
23 void executeAsync(sead::Thread*, s64);
24 void executeAsync();
25 void waitAsync();
26
27private:
28 ExecuteDirector* mDirector = nullptr;
29 const char* mName = nullptr;
30 sead::Event* mEvent = nullptr;
31 sead::DelegateThread* mDelegateThread = nullptr;
32};
33
34static_assert(sizeof(ExecuteAsyncExecutor) == 0x28);
35
36class ExecuteAsyncExecutorUpdate : public ExecuteAsyncExecutor {
37public:
38 ExecuteAsyncExecutorUpdate(const ExecuteDirector* director, const char* name,
39 sead::CoreId coreId)
40 : ExecuteAsyncExecutor(director, name, coreId) {}
41
42 ~ExecuteAsyncExecutorUpdate() override;
43 void execute() override;
44};
45
46static_assert(sizeof(ExecuteAsyncExecutorUpdate) == 0x28);
47
48class ExecuteAsyncExecutorDraw : public ExecuteAsyncExecutor {
49public:
50 ExecuteAsyncExecutorDraw(const ExecuteDirector* director, const char* name, sead::CoreId coreId)
51 : ExecuteAsyncExecutor(director, name, coreId) {}
52
53 ~ExecuteAsyncExecutorDraw() override;
54 void execute() override;
55};
56
57static_assert(sizeof(ExecuteAsyncExecutorUpdate) == 0x28);
58
59} // namespace al
60