summaryrefslogtreecommitdiff
path: root/src/KingSystem/Utils/Thread/Event.h
blob: 6db2822adb081468ca1483c30f55423cbd8fa8ba (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
#pragma once

#include <thread/seadAtomic.h>
#include <thread/seadEvent.h>
#include "KingSystem/Utils/Types.h"

namespace ksys::util {

class Event {
public:
    Event();
    explicit Event(sead::Heap* disposer_heap);
    explicit Event(bool manual_reset);
    Event(sead::Heap* disposer_heap, bool manual_reset);
    Event(sead::Heap* disposer_heap, sead::IDisposer::HeapNullOption heap_null_option,
          bool manual_reset);
    virtual ~Event();

    void initialize(bool manual_reset);
    void wait();
    bool wait(sead::TickSpan duration);
    void setSignal();
    void resetSignal();

    bool isSignalSet() const;

private:
    bool mManualReset = false;
    sead::Atomic<u32> mSignalSet = 0;
    sead::Event mEvent;
};
KSYS_CHECK_SIZE_NX150(sead::Event, 0x30);
KSYS_CHECK_SIZE_NX150(Event, 0x40);

}  // namespace ksys::util