76 lines
1.7 KiB
C++
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;
|
|
}
|
|
} |