mirror of
https://github.com/zeldaret/botw
synced 2026-07-12 06:48:15 -04:00
ksys/Utils: Add Event
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#include "KingSystem/Utils/Thread/Event.h"
|
||||
|
||||
namespace ksys::util {
|
||||
|
||||
Event::Event() = default;
|
||||
|
||||
Event::Event(sead::Heap* disposer_heap) : mEvent(disposer_heap) {}
|
||||
|
||||
Event::Event(bool manual_reset) : mManualReset(manual_reset), mEvent(manual_reset) {}
|
||||
|
||||
Event::Event(sead::Heap* disposer_heap, bool manual_reset)
|
||||
: mManualReset(manual_reset), mEvent(disposer_heap, manual_reset) {}
|
||||
|
||||
Event::Event(sead::Heap* disposer_heap, sead::IDisposer::HeapNullOption heap_null_option,
|
||||
bool manual_reset)
|
||||
: mManualReset(manual_reset), mEvent(disposer_heap, heap_null_option, manual_reset) {}
|
||||
|
||||
Event::~Event() = default;
|
||||
|
||||
void Event::initialize(bool manual_reset) {
|
||||
mManualReset = manual_reset;
|
||||
mEvent.initialize(manual_reset);
|
||||
}
|
||||
|
||||
void Event::wait() {
|
||||
if (!mSignalSet || !mManualReset)
|
||||
mEvent.wait();
|
||||
}
|
||||
|
||||
bool Event::wait(sead::TickSpan duration) {
|
||||
return (mSignalSet && mManualReset) || mEvent.wait(duration);
|
||||
}
|
||||
|
||||
void Event::setSignal() {
|
||||
if (mSignalSet == 1 && mManualReset)
|
||||
return;
|
||||
|
||||
mSignalSet.exchange(1);
|
||||
mEvent.setSignal();
|
||||
}
|
||||
|
||||
void Event::resetSignal() {
|
||||
if (!mSignalSet && mManualReset)
|
||||
return;
|
||||
|
||||
mEvent.resetSignal();
|
||||
mSignalSet.exchange(0);
|
||||
}
|
||||
|
||||
} // namespace ksys::util
|
||||
Reference in New Issue
Block a user