/*** 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 Threading::IWaitable *AsWaitable() = 0; /// Assuming AsWaitable()->TryLock() && Spawn != SpawnType::kSpawnAtomicOvermap, /// returns the true return value of the process /// otherwise returns zero virtual AuSInt GetExitCode() = 0; /// /// @param exitOnSpawn atomically destroys the current process
/// some platforms only support this /// 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 Write(const void *buffer, AuUInt32 len) = 0; }; }