/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: LSSemaphore.NT.cpp Date: 2021-10-1 Author: Reece ***/ #include #include "LSSemaphore.hpp" namespace Aurora::Loop { bool Semaphore::AddOne() { LONG atomicOld; return ReleaseSemaphore(reinterpret_cast(handle), 1, &atomicOld); } bool Semaphore::IsSignaled() { return LSHandle::IsSignaled(); } ELoopSource Semaphore::GetType() { return ELoopSource::eSourceSemaphore; } AUKN_SYM AuSPtr NewLSSemaphore(AuUInt32 initialCount) { AuSPtr ret; auto mutex = CreateSemaphoreA(NULL, initialCount, std::numeric_limits::max(), NULL); if (mutex == INVALID_HANDLE_VALUE) { SysPushErrorGen("Out of OS resources?"); return {}; } if (!(ret = AuMakeShared(mutex))) { return {}; } return ret; } }