AuroraRuntime/Source/IO/CompletionGroup/CompletionGroupLoopSource.cpp

76 lines
1.7 KiB
C++

/***
Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: CompletionGroupLoopSource.cpp
Date: 2023-12-28
Author: Reece
***/
#include <Source/RuntimeInternal.hpp>
#include <Aurora/IO/IOExperimental.hpp>
#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;
}
}