/*** Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuConditionVariable.Linux.hpp Date: 2023-8-11 Author: Reece ***/ #pragma once #if !defined(_AURUNTIME_GENERICCV) #include "AuConditionMutex.Linux.hpp" namespace Aurora::Threading::Primitives { struct ConditionVariableImpl final : IConditionVariable { ConditionVariableImpl(const AuSPtr &mutex); ~ConditionVariableImpl(); AuSPtr GetMutex() override; bool WaitForSignal(AuUInt32 timeout) override; bool WaitForSignalNsEx(const std::shared_ptr &pMutex, AuUInt64 timeout); bool WaitForSignalNS(AuUInt64 qwTimeout) override; void Signal() override; void Broadcast() override; bool WaitOne(AuUInt64 qwTimeout); private: AuUInt32 uState_ {}; AuUInt32 uSleeping_ {}; std::shared_ptr mutex_; }; struct CondVarDummy : IConditionVariable { AuUInt32 uState_ {}; AuUInt32 uSleeping_ {}; }; static const auto kSizeOfDummyCondVar = sizeof(CondVarDummy); } #endif