From 23a80b8039caa9bbc7be2fed0745ec91cdb6ae3a Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Thu, 8 Aug 2024 20:21:03 +0100 Subject: [PATCH] [*] Refactor ConditionEx -> IFlexibleConditionVariable --- .../Threading/Primitives/ConditionEx.hpp | 10 +++++----- Source/Threading/Primitives/AuConditionEx.cpp | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Include/Aurora/Threading/Primitives/ConditionEx.hpp b/Include/Aurora/Threading/Primitives/ConditionEx.hpp index edd6317e..4513e368 100644 --- a/Include/Aurora/Threading/Primitives/ConditionEx.hpp +++ b/Include/Aurora/Threading/Primitives/ConditionEx.hpp @@ -19,20 +19,20 @@ namespace Aurora::Threading::Primitives Note: Missing 'pWaitable's cannnot serve as an `atomic wait for while is [not] value` operation. There are no legal use cases for this feature. It's just there. */ - struct ConditionEx + struct IFlexibleConditionVariable { virtual void WaitForSignal() = 0; - virtual void WaitForSignal(const AuSPtr &pWaitable) = 0; + virtual void WaitForSignal(IWaitable *pWaitable) = 0; virtual bool WaitForSignalNS(AuUInt64 uRelativeNanoseconds) = 0; - virtual bool WaitForSignalNS(const AuSPtr &pWaitable, AuUInt64 uRelativeNanoseconds) = 0; + virtual bool WaitForSignalNS(IWaitable *pWaitable, AuUInt64 uRelativeNanoseconds) = 0; virtual bool WaitForSignalAbsNS(AuUInt64 uAbsNanoseconds) = 0; - virtual bool WaitForSignalAbsNS(const AuSPtr &pWaitable, AuUInt64 uAbsNanoseconds) = 0; + virtual bool WaitForSignalAbsNS(IWaitable *pWaitable, AuUInt64 uAbsNanoseconds) = 0; virtual void Broadcast() = 0; virtual void Signal() = 0; }; - AUKN_SHARED_SOO_NCM(FlexibleConditionVariable, ConditionEx, kPrimitiveSizeSemaphoreCV); + AUKN_SHARED_SOO_NCM(FlexibleConditionVariable, IFlexibleConditionVariable, kPrimitiveSizeSemaphoreCV); } \ No newline at end of file diff --git a/Source/Threading/Primitives/AuConditionEx.cpp b/Source/Threading/Primitives/AuConditionEx.cpp index f38489b4..70dcc6c9 100644 --- a/Source/Threading/Primitives/AuConditionEx.cpp +++ b/Source/Threading/Primitives/AuConditionEx.cpp @@ -12,18 +12,19 @@ namespace Aurora::Threading::Primitives { - struct SemaphoreConditionVariableImpl : ConditionEx + struct SemaphoreConditionVariableImpl : + IFlexibleConditionVariable { SemaphoreConditionVariableImpl(); - void WaitForSignal(const AuSPtr &pWaitable) override; + void WaitForSignal(IWaitable *pWaitable) override; void WaitForSignal() override; bool WaitForSignalNS(AuUInt64 uRelativeNanoseconds) override; - bool WaitForSignalNS(const AuSPtr &waitable, AuUInt64 uRelativeNanoseconds) override; + bool WaitForSignalNS(IWaitable *pWaitable, AuUInt64 uRelativeNanoseconds) override; bool WaitForSignalAbsNS(AuUInt64 uAbsNanoseconds) override; - bool WaitForSignalAbsNS(const AuSPtr &pWaitable, AuUInt64 uAbsNanoseconds) override; + bool WaitForSignalAbsNS(IWaitable *pWaitable, AuUInt64 uAbsNanoseconds) override; void Signal() override; void Broadcast() override; @@ -45,7 +46,7 @@ namespace Aurora::Threading::Primitives return WaitForSignalNS(nullptr, uRelativeNanoseconds); } - bool SemaphoreConditionVariableImpl::WaitForSignalAbsNS(const AuSPtr &pWaitable, + bool SemaphoreConditionVariableImpl::WaitForSignalAbsNS(IWaitable *pWaitable, AuUInt64 uNanoseconds) { AuAtomicAdd(&this->uWaiters_, 1u); @@ -81,14 +82,14 @@ namespace Aurora::Threading::Primitives return bSuccess; } - bool SemaphoreConditionVariableImpl::WaitForSignalNS(const AuSPtr &pWaitable, + bool SemaphoreConditionVariableImpl::WaitForSignalNS(IWaitable *pWaitable, AuUInt64 uAbsNanoseconds) { return this->WaitForSignalAbsNS(pWaitable, uAbsNanoseconds ? AuTime::SteadyClockNS() + uAbsNanoseconds : 0); } - void SemaphoreConditionVariableImpl::WaitForSignal(const AuSPtr &pWaitable) + void SemaphoreConditionVariableImpl::WaitForSignal(IWaitable *pWaitable) { AuAtomicAdd(&this->uWaiters_, 1u); @@ -163,12 +164,12 @@ namespace Aurora::Threading::Primitives } } - AUKN_SYM ConditionEx *FlexibleConditionVariableNew() + AUKN_SYM IFlexibleConditionVariable *FlexibleConditionVariableNew() { return _new SemaphoreConditionVariableImpl(); } - AUKN_SYM void FlexibleConditionVariableRelease(ConditionEx *pCVEx) + AUKN_SYM void FlexibleConditionVariableRelease(IFlexibleConditionVariable *pCVEx) { AuSafeDelete(pCVEx); }