/*** Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: CompletionGroupLoopSource.cpp Date: 2023-12-28 Author: Reece ***/ #include #include #include "CompletionGroup.hpp" #include "CompletionGroupLoopSource.hpp" namespace Aurora::IO::CompletionGroup { CompletionGroupLoopSource::CompletionGroupLoopSource(CompletionGroup *pParent, bool bAnd) : pParent(pParent), bIsAnd(bAnd), Loop::LSEvent() { } bool CompletionGroupLoopSource::IsSignaled() { if (!Loop::LSEvent::IsSignaled()) { return false; } this->pParent->DoIOTick(false); if (this->bIsAnd) { return !this->pParent->HasItemsActive(); } else { return true; } } bool CompletionGroupLoopSource::OnTrigger(AuUInt handle) { if (!Loop::LSEvent::OnTrigger(handle)) { return false; } this->pParent->DoIOTick(false); if (this->bIsAnd) { if (!this->pParent->HasItemsActive()) { this->pParent->ResetAnd(); return true; } else { return false; } } else { return true; } } bool CompletionGroupLoopSource::DoInit(bool bSignaledAlready) { return this->TryInit(bSignaledAlready, true, true); } Loop::ELoopSource CompletionGroupLoopSource::GetType() { return Loop::ELoopSource::eSourceCompletionGroup; } }