Files
Xenia-Canary/src/xenia/kernel/objects/xevent.cc
2015-06-12 19:47:28 -05:00

66 lines
1.9 KiB
C++

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/base/logging.h"
#include "xenia/kernel/objects/xevent.h"
namespace xe {
namespace kernel {
XEvent::XEvent(KernelState* kernel_state)
: XObject(kernel_state, kTypeEvent), native_handle_(NULL) {}
XEvent::~XEvent() {
if (native_handle_) {
CloseHandle(native_handle_);
}
}
void XEvent::Initialize(bool manual_reset, bool initial_state) {
assert_null(native_handle_);
native_handle_ = CreateEvent(NULL, manual_reset, initial_state, NULL);
}
void XEvent::InitializeNative(void* native_ptr, X_DISPATCH_HEADER& header) {
assert_null(native_handle_);
bool manual_reset;
switch (header.type) {
case 0x00: // EventNotificationObject (manual reset)
manual_reset = true;
break;
case 0x01: // EventSynchronizationObject (auto reset)
manual_reset = false;
break;
default:
assert_always();
return;
}
bool initial_state = header.signal_state ? true : false;
native_handle_ = CreateEvent(NULL, manual_reset, initial_state, NULL);
}
int32_t XEvent::Set(uint32_t priority_increment, bool wait) {
return SetEvent(native_handle_) ? 1 : 0;
}
int32_t XEvent::Pulse(uint32_t priority_increment, bool wait) {
return PulseEvent(native_handle_) ? 1 : 0;
}
int32_t XEvent::Reset() { return ResetEvent(native_handle_) ? 1 : 0; }
void XEvent::Clear() { ResetEvent(native_handle_); }
} // namespace kernel
} // namespace xe