/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: CBWaitable.hpp Date: 2021-6-10 Author: Reece ***/ #pragma once namespace Aurora::Threading::Waitables { class CBWaitable : public IWaitable { public: CBWaitable(const AuFunction &value) : callback_(value) { } bool TryLock() override { return callback_(); } bool HasOSHandle(AuMach &mach) override { return false; } bool HasLockImplementation() override { return false; } void Unlock() override { SysPanic("CBWaitable is incompatible with WaitFor given an array of IWaitables"); } void Lock() override { SysPanic("CBWaitable is not lockable"); } bool LockMS(AuUInt64 timeout) override { SysPanic("CBWaitable is not lockable"); return false; } private: AuFunction callback_; }; }