/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuSemaphore.Generic.hpp Date: 2021-6-12 Author: Reece ***/ #pragma once #if defined(AURORA_IS_MODERNNT_DERIVED) #include "AuSemaphore.NT.hpp" #elif defined(AURORA_IS_LINUX_DERIVED) #include "AuSemaphore.Linux.hpp" #elif defined(AURORA_HAS_PTHREADS) #include "AuSemaphore.Unix.hpp" #else #define _AURUNTIME_GENERIC_SEMAPHORE namespace Aurora::Threading::Primitives { class Semaphore : public ISemaphore { public: Semaphore(long intialValue = 0); ~Semaphore(); bool HasOSHandle(AuMach &mach) override; bool HasLockImplementation() override; bool TryLock() override; bool Lock(AuUInt64 timeout) override; void Lock() override; void Unlock(long count) override; void Unlock() override; private: std::atomic_long value_{}; }; } #endif