/*** Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuIOHandle.hpp Date: 2023-7-28 Author: Reece ***/ #pragma once namespace Aurora::IO::IPC { struct IPCPipeImpl; } namespace Aurora::IO { struct AFileHandle : IIOHandle { virtual ~AFileHandle(); bool InitFromHandle(AuSPtr pHandle) override; bool InitFromCopy(AuUInt64 uOSHandle) override; bool InitFromMove(AuUInt64 uOSHandle) override; bool InitFromPair(AuUInt64 uOSReadHandle, AuUInt64 uOSWriteHandle) override; bool InitFromPairMove(AuOptionalEx uOSReadHandle, AuOptionalEx uOSWriteHandle) override; AuUInt64 GetOSHandle() override; AuOptionalEx GetOSHandleSafe() override; AuUInt64 GetOSReadHandle() override; AuOptionalEx GetOSReadHandleSafe() override; AuUInt64 GetOSWriteHandle() override; AuOptionalEx GetOSWriteHandleSafe() override; bool IsValid() override; bool HasUniqueWriteHandle() override; bool IsAsync() override; AuString GetPath() override; bool IsFile() override; bool IsTTY() override; bool IsPipe() override; AuOptionalEx uOSWriteHandle; AuOptionalEx uOSReadHandle; AuSPtr pThat; bool bIsAsync {}; AuString path; IPC::IPCPipeImpl *pIPCPipe {}; bool bDirectIO {}; AuOptionalEx optIsFile; AuOptionalEx optIsPipe; AuOptionalEx optIsTTY; protected: // Implement me: // bool InitFromPath(HandleCreate create) override; static AuUInt64 DupHandle(AuUInt64 uOSHandle, bool bWriteAccess); static void CloseHandle(AuUInt64 uOSHandle); }; }