#include "libcef_dll/cpptoc/waitable_event_cpptoc.h"
#include "libcef_dll/shutdown_checker.h"
CEF_EXPORT cef_waitable_event_t* cef_waitable_event_create(
int automatic_reset,
int initially_signaled) {
shutdown_checker::AssertNotShutdown();
CefRefPtr<CefWaitableEvent> _retval = CefWaitableEvent::CreateWaitableEvent(
automatic_reset ? true : false, initially_signaled ? true : false);
return CefWaitableEventCppToC::Wrap(_retval);
}
namespace {
void CEF_CALLBACK waitable_event_reset(struct _cef_waitable_event_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
CefWaitableEventCppToC::Get(self)->Reset();
}
void CEF_CALLBACK waitable_event_signal(struct _cef_waitable_event_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
CefWaitableEventCppToC::Get(self)->Signal();
}
int CEF_CALLBACK
waitable_event_is_signaled(struct _cef_waitable_event_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefWaitableEventCppToC::Get(self)->IsSignaled();
return _retval;
}
void CEF_CALLBACK waitable_event_wait(struct _cef_waitable_event_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
CefWaitableEventCppToC::Get(self)->Wait();
}
int CEF_CALLBACK waitable_event_timed_wait(struct _cef_waitable_event_t* self,
int64 max_ms) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefWaitableEventCppToC::Get(self)->TimedWait(max_ms);
return _retval;
}
}
CefWaitableEventCppToC::CefWaitableEventCppToC() {
GetStruct()->reset = waitable_event_reset;
GetStruct()->signal = waitable_event_signal;
GetStruct()->is_signaled = waitable_event_is_signaled;
GetStruct()->wait = waitable_event_wait;
GetStruct()->timed_wait = waitable_event_timed_wait;
}
CefWaitableEventCppToC::~CefWaitableEventCppToC() {
shutdown_checker::AssertNotShutdown();
}
template <>
CefRefPtr<CefWaitableEvent> CefCppToCRefCounted<
CefWaitableEventCppToC,
CefWaitableEvent,
cef_waitable_event_t>::UnwrapDerived(CefWrapperType type,
cef_waitable_event_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return nullptr;
}
template <>
CefWrapperType CefCppToCRefCounted<CefWaitableEventCppToC,
CefWaitableEvent,
cef_waitable_event_t>::kWrapperType =
WT_WAITABLE_EVENT;