AuroraRuntime/Include/Aurora/IO/CompletionGroup/ICompletionGroup.hpp

48 lines
1.3 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
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<Async::IWorkItem> OnCompletion() = 0;
virtual AuSPtr<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(AuSPtr<ICompletionGroupWorkItem> pCompletable) = 0;
virtual AuSPtr<Loop::ILSEvent> GetTriggerLoopSource() = 0;
virtual void TryTrigger() = 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;
2023-12-28 16:49:11 +00:00
};
AUKN_SYM AuSPtr<ICompletionGroup> NewCompletionGroup();
}