49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
/***
|
|
Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
File: CompletionGroup.hpp
|
|
Date: 2023-12-28
|
|
Author: Reece
|
|
***/
|
|
#pragma once
|
|
|
|
namespace Aurora::Async
|
|
{
|
|
struct IWorkItem;
|
|
}
|
|
|
|
namespace Aurora::IO::Loop
|
|
{
|
|
struct ILSEvent;
|
|
}
|
|
|
|
namespace Aurora::IO::CompletionGroup
|
|
{
|
|
struct ICompletionGroup
|
|
{
|
|
virtual AuSPtr<Loop::ILoopSource> ToAndLoopSource() = 0;
|
|
virtual AuSPtr<Loop::ILoopSource> ToAnyLoopSource() = 0;
|
|
|
|
virtual AuSPtr<Aurora::Async::IWorkItem> OnCompletion() = 0;
|
|
virtual AuSPtr<Aurora::Async::IWorkItem> OnSingleCompletion() = 0;
|
|
|
|
virtual bool HasCompleted() = 0;
|
|
virtual AuPair<AuUInt32, AuUInt32> GetStats() = 0;
|
|
virtual void SetCallbacks(const AuSPtr<ICompletionGroupHooks> &pCallbacks) = 0;
|
|
|
|
virtual void AddWorkItem(const AuSPtr<ICompletionGroupWorkItem> &pCompletable) = 0;
|
|
|
|
virtual AuSPtr<Loop::ILSEvent> GetTriggerLoopSource() = 0;
|
|
virtual void TryTrigger() = 0;
|
|
virtual void TryTriggerLater() = 0;
|
|
|
|
// 0 = indefinite
|
|
virtual bool WaitForAnyMS(AuUInt32 uTimeoutOrZeroMS = 0) = 0;
|
|
virtual bool WaitForAllMS(AuUInt32 uTimeoutOrZeroMS = 0) = 0;
|
|
|
|
virtual bool IsNeverEnding() = 0;
|
|
virtual void SetNeverEnding(bool bValue) = 0;
|
|
};
|
|
|
|
AUKN_SYM AuSPtr<ICompletionGroup> NewCompletionGroup();
|
|
} |