/*** Copyright (C) 2024 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuIOWaitableIOCompletionGroup.cpp Date: 2024-1-6 Author: Reece ***/ #include #include #include "AuIOWaitableIOCompletionGroup.hpp" #include namespace Aurora::IO { IOWaitableIOCompletionGroup::IOWaitableIOCompletionGroup(const AuSPtr &pGroup, bool bAny) : pGroup(pGroup), bAny(bAny) { } IOWaitableIOCompletionGroup::IOWaitableIOCompletionGroup() : bAny { true } { } void IOWaitableIOCompletionGroup::SetGroup(const AuSPtr &pGroup) { this->pGroup = pGroup; if (this->pParent) { this->Bind(this->pGroup, this->pParent); } else { // wait } } bool IOWaitableIOCompletionGroup::IsRunOnOtherTick() { return {}; } bool IOWaitableIOCompletionGroup::IsRunOnTick() { return {}; } bool IOWaitableIOCompletionGroup::CanRequestTick() { return true; } void IOWaitableIOCompletionGroup::OnReportPumper(const AuSPtr &iface) { this->pParent = iface; if (this->pGroup) { this->Bind(this->pGroup, this->pParent); } } void IOWaitableIOCompletionGroup::Bind(const AuSPtr &pGroup, const AuSPtr &pParent) { AuStaticCast(pGroup)->AddCallbackTick(pParent, this->bAny); AuResetMember(this->pGroup); } bool IOWaitableIOCompletionGroup::IsRunOnSelfIO() { return false; } AuSPtr IOWaitableIOCompletionGroup::GetSelfIOSource() { return {}; } bool IOWaitableIOCompletionGroup::ApplyRateLimit() { return {}; } bool IOWaitableIOCompletionGroup::IsRunOnSelfIOCheckedOnTimerTick() { return true; } AuUInt32 IOWaitableIOCompletionGroup::IOTimeoutInMS() { return 0; } AUKN_SYM AuSPtr NewWaitableItemForSleepingCompletionGroup(const AuSPtr &pGroup, bool bAny) { auto pThat = AuMakeShared(pGroup, bAny); if (!pThat) { SysPushErrorMemory(); return {}; } return pThat; } }