/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuIOWaitableIOTimer.hpp Date: 2022-6-6 Author: Reece ***/ #pragma once namespace Aurora::IO { struct IOWaitableIOTimer : IIOWaitableIOTimer { IOWaitableIOTimer(); bool IsValid(); bool IsRunOnOtherTick() override; bool IsRunOnTick() override; bool CanRequestTick() override; void OnReportPumper(const AuSPtr &iface) override; bool IsRunOnSelfIO() override; AuSPtr GetSelfIOSource() override; bool IsRunOnSelfIOCheckedOnTimerTick() override; bool ApplyRateLimit() override; AuUInt32 IOTimeoutInMS() override; AuUInt64 SetConstantTick(AuUInt64 ns) override; AuUInt64 SetTargetTimeAbs(AuUInt64 ns) override; AuSPtr source; AuUInt64 constantTickNs {}; AuUInt64 targetTimeAbsNs {}; }; }