/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: LSSemaphore.Linux.hpp Date: 2022-4-5 Author: Reece ***/ #pragma once #include "LSHandle.hpp" namespace Aurora::Loop { struct LSSemaphore : public ILSSemaphore, public LSHandle { LSSemaphore(AuUInt32 initialCount); LSSemaphore(int handle, int tag); ~LSSemaphore(); bool AddOne() override; virtual bool OnTrigger(AuUInt handle) override; bool IsSignaled() override; bool WaitOn(AuUInt32 timeout) override; virtual ELoopSource GetType() override; private: void Init(AuUInt32 initialCount); bool IsSignaledNonblocking(); }; }