/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ConditionEx.hpp Date: 2021-6-11 Author: Reece ***/ #pragma once namespace Aurora::Threading::Primitives { /** A comprehensive CV that does not strictly abide by typical assumptions.
This object is not optimal; however, it will work with any or no IWaitable
On systems where context switches are expensive, this object should be avoided at all costs
This object depends on the synchronization of primitives within our abstraction layer rather than the OS's implementation of condition variables
*/ class ConditionEx { public: virtual void WaitForSignal() = 0; virtual void WaitForSignal(Threading::IWaitable *waitable) = 0; virtual void WaitForSignal(const AuSPtr &waitable) = 0; virtual void Broadcast() = 0; virtual void Signal() = 0; }; AUKN_SHARED_API(FeaturefulCondition, ConditionEx); }