/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: IProcess.hpp Date: 2021-6-9 Author: Reece ***/ #pragma once namespace Aurora::Threading { class IWaitable; } namespace Aurora::Processes { class IProcess { public: /// /// @return the waitable of a waitable child process or thread leader virtual AuSPtr AsWaitable() = 0; /// Assuming AsWaitable()->TryLock() && Spawn != SpawnType::kSpawnAtomicOvermap, /// returns the true return value of the process /// otherwise returns zero virtual AuSInt GetExitCode() = 0; virtual AuUInt GetProcessId() = 0; /// // TODO(Reece): what in the hell this is ugly virtual bool Start(enum ESpawnType, bool fwdOut, bool fwdErr, bool fwdIn) = 0; virtual bool Terminate() = 0; virtual bool TryKill() = 0; virtual bool Read(bool error, void *buffer, AuUInt32 &len) = 0; virtual bool Read(void *buffer, AuUInt32 &len, bool errorStream = false, bool nonblock = true) = 0; virtual bool Write(const void *buffer, AuUInt32 len) = 0; }; }