/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: FileStream.Unix.hpp Date: 2021-6-12 Author: Reece ***/ #pragma once #if !defined(_AURUNTIME_GENERICFILESTREAM) namespace Aurora::IO::FS { // Code-sharing for async API fallbacks... struct PosixFileStream : IFileStream { PosixFileStream(); ~PosixFileStream(); bool Init(AuSPtr pHandle); AuUInt64 GetOffset() override; bool SetOffset(AuUInt64 offset) override; AuUInt64 GetLength() override; bool Read(const Memory::MemoryViewStreamWrite ¶meters) override; bool Write(const Memory::MemoryViewStreamRead & parameters) override; void Close() override; void Flush() override; void WriteEoS() override; void MakeTemporary() override; bool IsFlushOnClose() const override; void SetFlushOnClose(bool bFlushOnClose) override; bool IsWriteEoSOnClose() const override; void SetWriteEoSOnClose(bool bFlushOnClose) override; AuSPtr GetHandle() override; IO::IStreamReader *ToStreamReader() override; IO::IStreamWriter *ToStreamWriter() override; IO::ISeekingReader *ToStreamSeekingReader() override; IO::ISeekingWriter *ToStreamSeekingWriter() override; int GetUnixHandle(); private: AuSPtr pHandle_; AuString path_; AuMutex mutex_; AuFS::FileReader reader_; AuFS::FileWriter writer_; AuFS::FileSeekableReader sreader_; AuFS::FileSeekableWriter swriter_; bool bMadeTemporary {}; }; } #endif