From 42af66c84115404d1ea90be98bbd394ae86526c6 Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Sun, 25 Feb 2024 23:30:56 +0000 Subject: [PATCH] [+] AuIO::ReadAsync [+] AuIO::WriteAsync --- Include/Aurora/IO/IAsyncTransaction.hpp | 59 +++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/Include/Aurora/IO/IAsyncTransaction.hpp b/Include/Aurora/IO/IAsyncTransaction.hpp index 781384bc..76679c45 100644 --- a/Include/Aurora/IO/IAsyncTransaction.hpp +++ b/Include/Aurora/IO/IAsyncTransaction.hpp @@ -18,6 +18,7 @@ namespace Aurora::IO::CompletionGroup } #include "CompletionGroup/ICompletionGroupWorkHandle.hpp" +#include namespace Aurora::IO { @@ -93,4 +94,62 @@ namespace Aurora::IO AURT_ADD_USR_DATA_EXP(this->ToCompletionGroupHandle()); }; + + inline bool ReadAsync(const AuSPtr &pTransaction, + AuUInt64 uOffset, + const AuSPtr &memoryView, + AuOptional> callback = {}, + AuOptional> pCompletionGroup = {}) + { + SysCheckArgNotNull(pTransaction, false); + + if (pCompletionGroup) + { + (void)pTransaction->TryAttachToCompletionGroup(pCompletionGroup.Value()); + } + + if (callback) + { + auto pRet = AuMakeShared(); + if (!pRet) + { + SysPushErrorMemory(); + return false; + } + + pRet->OnAsyncFileOpFinishedFunctional = callback.Value(); + pTransaction->SetCallback(pRet); + } + + return pTransaction->StartRead(uOffset, memoryView); + } + + inline bool WriteAsync(const AuSPtr &pTransaction, + AuUInt64 uOffset, + const AuSPtr &memoryView, + AuOptional> callback = {}, + AuOptional> pCompletionGroup = {}) + { + SysCheckArgNotNull(pTransaction, false); + + if (pCompletionGroup) + { + (void)pTransaction->TryAttachToCompletionGroup(pCompletionGroup.Value()); + } + + if (callback) + { + auto pRet = AuMakeShared(); + if (!pRet) + { + SysPushErrorMemory(); + return false; + } + + pRet->OnAsyncFileOpFinishedFunctional = callback.Value(); + pTransaction->SetCallback(pRet); + } + + return pTransaction->StartWrite(uOffset, memoryView); + } } \ No newline at end of file