Reece Wilson
04aca5fcf2
[+] Aurora::IO::FS::DirDeleterEx [+] Aurora::IO::Compress [+] Aurora::IO::Decompress [*] Aurora::Memory::ByteBuffer zero-alloc fixes [*] Aurora::Memory::ByteBuffer linear read of begin/end should return (`const AuUInt8 *`)'s [*] Changed NT file CREATE flags [*] Fix linux regression [*] Update logger sink DirLogArchive ... [+] DirectoryLogger::uMaxLogsOrZeroBeforeDelete ... [+] DirectoryLogger::uMaxCumulativeFileSizeInMiBOrZeroBeforeDelete ... [+] DirectoryLogger::uMaxCumulativeFileSizeInMiBOrZeroBeforeCompress ... [+] DirectoryLogger::uMaxFileTimeInDeltaMSOrZeroBeforeCompress ... [+] DirectoryLogger::uMaxFileTimeInDeltaMSOrZeroBeforeDelete [*] FIX: BufferedLineReader was taking the wrong end head (prep) LZMACompressor [*] Updated build-script for LZMA (when i can be bothered to impl it) (prep) FSOverlappedUtilities (prep) FSDefaultOverlappedWorkerThread | default worker pool / apc dispatcher / auasync dispatcher concept for higher level overlapped ops (stub) [+] Aurora::IO::FS::OverlappedForceDelegatedIO (stub) [+] Aurora::IO::FS::OverlappedCompress (stub) [+] Aurora::IO::FS::OverlappedDecompress (stub) [+] Aurora::IO::FS::OverlappedWrite (stub) [+] Aurora::IO::FS::OverlappedRead (stub) [+] Aurora::IO::FS::OverlappedStat (stub) [+] Aurora::IO::FS::OverlappedCopy (stub) [+] Aurora::IO::FS::OverlappedRelink (stub) [+] Aurora::IO::FS::OverlappedTrustFile (stub) [+] Aurora::IO::FS::OverlappedBlockFile (stub) [+] Aurora::IO::FS::OverlappedUnblockFile (stub) [+] Aurora::IO::FS::OverlappedDelete
69 lines
2.9 KiB
C++
69 lines
2.9 KiB
C++
/***
|
|
Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
File: Overlapped.hpp
|
|
Date: 2023-1-26
|
|
Author: Reece
|
|
Note: Defer to Async.hpp for creation of overlapped stream objects
|
|
This header defines FS.hpp-like APIs that run overlapped or on a
|
|
worker thread or two.
|
|
***/
|
|
#pragma once
|
|
|
|
namespace Aurora::IO::Loop
|
|
{
|
|
struct ILoopSource;
|
|
}
|
|
|
|
namespace Aurora::IO::FS
|
|
{
|
|
struct IOverlappedOperationBase;
|
|
|
|
AUKN_INTERFACE(IOverlappedCallback,
|
|
AUI_METHOD(void, OnSuccess, (AuSPtr<IOverlappedOperationBase>, pOriginator)),
|
|
AUI_METHOD(void, OnFailure, (AuSPtr<IOverlappedOperationBase>, pOriginator))
|
|
);
|
|
|
|
struct IOverlappedOperationBase
|
|
{
|
|
virtual AuSPtr<Loop::ILoopSource> ToWaitable() = 0;
|
|
|
|
virtual AuSPtr<IOverlappedCallback> SetCallback(AuSPtr<IOverlappedOperationBase> pCallback) = 0;
|
|
|
|
virtual bool IsOperationComplete() = 0;
|
|
virtual bool IsOperationSuccessful() = 0;
|
|
};
|
|
|
|
struct IOverlappedStatOperation : IOverlappedOperationBase
|
|
{
|
|
virtual AuSPtr<Stat> GetStats() = 0;
|
|
};
|
|
|
|
struct IOverlappedReadOperation : IOverlappedOperationBase
|
|
{
|
|
virtual AuSPtr<Aurora::Memory::ByteBuffer> GetByteBuffer() = 0;
|
|
virtual AuSPtr<Aurora::Memory::MemoryViewWrite> GetReadView() = 0;
|
|
};
|
|
|
|
/**
|
|
* @brief If running under AuAsync runner, we use the local thread for the entire IO operation.
|
|
* In the future, whence I can be bothered to finish the APC api, *all* overlapped operations
|
|
* will be processed on the local thread.
|
|
* Specifying true forces all IO to occour on a preallocated pool of IO workers
|
|
* @warning this api is thread-local
|
|
* @warning this api does not change the behaviour of overlapped file streamss
|
|
*/
|
|
AUKN_SYM bool OverlappedForceDelegatedIO(bool bForceIOWorkerThreads);
|
|
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedCompress(const AuString &path, AuInt8 iLevel = 17);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedDecompress(const AuString &path);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedWrite(const AuString &path, AuSPtr<Aurora::Memory::MemoryViewRead> pMemoryView);
|
|
AUKN_SYM AuSPtr<IOverlappedReadOperation> OverlappedRead(const AuString &path);
|
|
AUKN_SYM AuSPtr<IOverlappedStatOperation> OverlappedStat(const AuString &path);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedCopy(const AuString &path, const AuString &dest);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedRelink(const AuString &path, const AuString &dest);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedTrustFile(const AuString &path);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedBlockFile(const AuString &path);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedUnblockFile(const AuString &path);
|
|
AUKN_SYM AuSPtr<IOverlappedOperationBase> OverlappedDelete(const AuString &path);
|
|
} |