AuroraRuntime/Source/IO/CompletionGroup/CompletionGroup.hpp

65 lines
2.1 KiB
C++
Raw Normal View History

2023-12-28 16:49:11 +00:00
/***
Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: CompletionGroup.hpp
Date: 2023-12-28
Author: Reece
***/
#pragma once
#include "CompletionQuantumEventProvider.hpp"
namespace Aurora::IO::CompletionGroup
{
struct CompletionGroup :
AuEnableSharedFromThis<CompletionGroup>,
ICompletionGroup
{
CompletionGroup();
~CompletionGroup();
AuSPtr<Loop::ILoopSource> ToAndLoopSource() override;
AuSPtr<Loop::ILoopSource> ToAnyLoopSource() override;
AuSPtr<AuAsync::IWorkItem> OnCompletion() override;
AuSPtr<AuAsync::IWorkItem> OnSingleCompletion() override;
2023-12-28 16:49:11 +00:00
bool WaitForAnyMS(AuUInt32 uTimeoutOrZeroMS) override;
bool WaitForAllMS(AuUInt32 uTimeoutOrZeroMS) override;
2023-12-28 16:49:11 +00:00
AuSPtr<Loop::ILSEvent> GetTriggerLoopSource() override;
void TryTrigger() override;
bool HasCompleted() override;
AuPair<AuUInt32, AuUInt32> GetStats() override;
void SetCallbacks(const AuSPtr<ICompletionGroupHooks> &pCallbacks) override;
void DoIOTick(bool bManual);
2023-12-28 16:49:11 +00:00
void ResetMemoryPins();
bool HasItemsActive();
void AddWorkItem(const AuSPtr<ICompletionGroupWorkItem> &pCompletable) override;
2023-12-28 16:49:11 +00:00
void AddCallbackTick(const AuSPtr<IIOProcessorManualInvoker> &pCallbackInvoker, bool bAny);
bool IsNeverEnding() override;
void SetNeverEnding(bool bValue) override;
2023-12-28 16:49:11 +00:00
private:
AuMutex mutex;
AuCriticalSection cs;
2023-12-28 16:49:11 +00:00
CompletionQuantumEventProvider anyProbablyAlwaysPresentEvent;
CompletionQuantumEventProvider andPlsDontAllocateFdIfUntouchedEvent;
AuList<AuSPtr<ICompletionGroupWorkItem>> workItems;
AuSPtr<ICompletionGroupHooks> pCallbacks;
AuSPtr<AuAsync::IWorkItem> pAnyBarrier;
AuSPtr<AuAsync::IWorkItem> pAndBarrier;
AuList<AuPair<AuSPtr<IIOProcessorManualInvoker>, bool>> callbackTicks;
2023-12-28 16:49:11 +00:00
AuUInt32 uAdded {};
AuUInt32 uTriggered {};
bool bNoAny {};
bool bIsNeverEnding {};
bool bTerminated {};
2023-12-28 16:49:11 +00:00
};
}