1#pragma once
2
3#ifdef NNSDK
4#include <nn/os.h>
5#endif
6
7#include "heap/seadDisposer.h"
8#include "time/seadTickSpan.h"
9
10namespace sead
11{
12class Heap;
13
14class Event : public IDisposer
15{
16public:
17 Event();
18 explicit Event(bool manual_reset);
19 explicit Event(Heap* disposer_heap);
20 Event(Heap* disposer_heap, bool manual_reset);
21 Event(Heap* disposer_heap, IDisposer::HeapNullOption heap_null_option);
22 Event(Heap* disposer_heap, IDisposer::HeapNullOption heap_null_option, bool manual_reset);
23 ~Event() override;
24
25 Event(const Event&) = delete;
26 Event& operator=(const Event&) = delete;
27
28 void initialize(bool manual_reset);
29 void wait();
30 bool wait(TickSpan duration);
31 void setSignal();
32 void resetSignal();
33
34private:
35 void setInitialized([[maybe_unused]] bool initialized)
36 {
37#ifdef SEAD_DEBUG
38 mInitialized = initialized;
39#endif
40 }
41
42#ifdef NNSDK
43 nn::os::LightEventType mEventInner;
44#else
45#error "Unknown platform"
46#endif
47
48#ifdef SEAD_DEBUG
49 bool mInitialized = false;
50#endif
51};
52} // namespace sead
53