// Copyright 2014 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #include #include #include #include "common/common.h" #include "core/hle/kernel/kernel.h" #include "core/hle/kernel/event.h" #include "core/hle/kernel/thread.h" namespace Kernel { ResultVal> Event::Create(ResetType reset_type, std::string name) { SharedPtr evt(new Event); // TOOD(yuriks): Don't create Handle (see Thread::Create()) CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(evt)); evt->signaled = false; evt->reset_type = evt->intitial_reset_type = reset_type; evt->name = std::move(name); return MakeResult>(evt); } bool Event::ShouldWait() { return !signaled; } void Event::Acquire() { _assert_msg_(Kernel, !ShouldWait(), "object unavailable!"); // Release the event if it's not sticky... if (reset_type != RESETTYPE_STICKY) signaled = false; } void Event::Signal() { signaled = true; WakeupAllWaitingThreads(); } void Event::Clear() { signaled = false; } } // namespace