/*** Copyright (C) 2024 Jamie Reece Wilson (a/k/a "Reece"). All rights reserved. File: FSMemoryMappedFile.hpp Date: 2024-03-05 Author: Reece ***/ #pragma once namespace Aurora::IO::FS { struct MemoryMappedFile : IMemoryMappedFile { virtual IIOHandle * ToHandle() override; virtual AuUInt GetBaseAddress() override; virtual AuUInt GetEndAddress() override; virtual AuUInt GetLength() override; virtual AuSPtr NewStreamReader() override; virtual AuSPtr NewStreamWriter() override; virtual AuSPtr NewAsyncReadTransaction() override; virtual AuSPtr NewAsyncWriteTransaction() override; virtual ISeekingReader * ToStreamSeekingReader() override; virtual ISeekingWriter * ToStreamSeekingWriter() override; AuMemoryViewRead ToReadView(); AuMemoryViewWrite ToWriteView(); AuMemoryViewRead ToReadViewAlt(); AuMemoryViewWrite ToWriteViewAlt(); virtual void Flush(AuUInt uOffset, AuUInt uLength) override; virtual void Prefetch(AuUInt uOffset, AuUInt uLength) override; bool Init(EFileOpenMode eMode, AuUInt64 uFileMapOffset, AuUInt64 uFileMapLength, AuInt64 iAdjustStreamOffset, EFileAdvisoryLockLevel eLockLevel); AuIOHandle handle; AuSPtr pHandleShared; AuSPtr pView; AuUInt64 uFileMapLength; AuUInt64 uFileMapOffset; AuInt64 iAdjustStreamOffset; AuOptional optSeekableWriter; AuOptional optSeekableReader; }; }