1#ifndef SDL3PP_PROCESS_H_
2#define SDL3PP_PROCESS_H_
4#include <SDL3/SDL_process.h>
5#include "SDL3pp_iostream.h"
6#include "SDL3pp_properties.h"
7#include "SDL3pp_stdinc.h"
61 constexpr explicit operator bool()
const {
return !!
value; }
115 SDL_PROCESS_STDIO_INHERITED;
119 SDL_PROCESS_STDIO_NULL;
155 : m_resource(resource)
212 Process(
const char*
const* args,
bool pipe_stdio)
213 : m_resource(SDL_CreateProcess(args, pipe_stdio))
279 : m_resource(SDL_CreateProcessWithProperties(props))
289 std::swap(m_resource, other.m_resource);
300 m_resource =
nullptr;
308 constexpr bool operator==(std::nullptr_t _)
const {
return !m_resource; }
311 constexpr explicit operator bool()
const {
return !!m_resource; }
420 if (data.
empty())
return {};
421 size_t sz = data.
size() /
sizeof(T);
492 void Kill(
bool force);
524 bool Wait(
bool block,
int* exitcode);
594 return Process(args, pipe_stdio);
663namespace prop::process {
665constexpr auto CREATE_ARGS_POINTER = SDL_PROP_PROCESS_CREATE_ARGS_POINTER;
667constexpr auto CREATE_ENVIRONMENT_POINTER =
668 SDL_PROP_PROCESS_CREATE_ENVIRONMENT_POINTER;
670constexpr auto CREATE_STDIN_NUMBER = SDL_PROP_PROCESS_CREATE_STDIN_NUMBER;
672constexpr auto CREATE_STDIN_POINTER = SDL_PROP_PROCESS_CREATE_STDIN_POINTER;
674constexpr auto CREATE_STDOUT_NUMBER = SDL_PROP_PROCESS_CREATE_STDOUT_NUMBER;
676constexpr auto CREATE_STDOUT_POINTER = SDL_PROP_PROCESS_CREATE_STDOUT_POINTER;
678constexpr auto CREATE_STDERR_NUMBER = SDL_PROP_PROCESS_CREATE_STDERR_NUMBER;
680constexpr auto CREATE_STDERR_POINTER = SDL_PROP_PROCESS_CREATE_STDERR_POINTER;
682constexpr auto CREATE_STDERR_TO_STDOUT_BOOLEAN =
683 SDL_PROP_PROCESS_CREATE_STDERR_TO_STDOUT_BOOLEAN;
685constexpr auto CREATE_BACKGROUND_BOOLEAN =
686 SDL_PROP_PROCESS_CREATE_BACKGROUND_BOOLEAN;
688constexpr auto PID_NUMBER = SDL_PROP_PROCESS_PID_NUMBER;
690constexpr auto STDIN_POINTER = SDL_PROP_PROCESS_STDIN_POINTER;
692constexpr auto STDOUT_POINTER = SDL_PROP_PROCESS_STDOUT_POINTER;
694constexpr auto STDERR_POINTER = SDL_PROP_PROCESS_STDERR_POINTER;
696constexpr auto BACKGROUND_BOOLEAN = SDL_PROP_PROCESS_BACKGROUND_BOOLEAN;
731 return {
CheckError(SDL_GetProcessProperties(process))};
769 auto data =
static_cast<char*
>(SDL_ReadProcess(process, &size, exitcode));
804 return {SDL_GetProcessInput(process)};
836 return {SDL_GetProcessOutput(process)};
904 return SDL_WaitProcess(process, block, exitcode);
Base class for SDL memory allocated array wrap.
Definition: SDL3pp_ownPtr.h:44
constexpr bool empty() const
True if size() == 0.
Definition: SDL3pp_ownPtr.h:74
T * release()
Release control on object.
Definition: SDL3pp_ownPtr.h:91
constexpr size_t size() const
Size.
Definition: SDL3pp_ownPtr.h:83
An opaque handle representing a system process.
Definition: SDL3pp_process.h:140
constexpr Process(Process &&other)
Move constructor.
Definition: SDL3pp_process.h:163
constexpr bool operator==(std::nullptr_t _) const
Comparison.
Definition: SDL3pp_process.h:308
Process(const char *const *args, bool pipe_stdio)
Create a new process.
Definition: SDL3pp_process.h:212
constexpr ProcessRaw release()
Retrieves underlying ProcessRaw and clear this.
Definition: SDL3pp_process.h:297
constexpr ProcessRaw get() const
Retrieves underlying ProcessRaw.
Definition: SDL3pp_process.h:294
Process(PropertiesParam props)
Create a new process with the specified properties.
Definition: SDL3pp_process.h:278
constexpr auto operator<=>(const Process &other) const =default
Comparison.
OwnArray< T > ReadAs(int *exitcode=nullptr)
Read all the output from a process.
Definition: SDL3pp_process.h:417
constexpr Process(const Process &other)=delete
Copy constructor.
~Process()
Destructor.
Definition: SDL3pp_process.h:284
constexpr Process(const ProcessRaw resource)
Constructs from ProcessParam.
Definition: SDL3pp_process.h:154
constexpr Process()=default
Default ctor.
Process & operator=(Process other)
Assignment operator.
Definition: SDL3pp_process.h:287
constexpr void CheckError(bool result)
Check and throw if returned value from SDL is an error.
Definition: SDL3pp_error.h:198
IOStreamRef GetOutput()
Get the IOStream associated with process standard output.
Definition: SDL3pp_process.h:839
void KillProcess(ProcessParam process, bool force)
Stop a process.
Definition: SDL3pp_process.h:864
void Destroy()
Destroy a previously created process object.
Definition: SDL3pp_process.h:931
SDL_ProcessIO ProcessIO
Description of where standard I/O should be directed when creating a process.
Definition: SDL3pp_process.h:112
IOStreamRef GetProcessOutput(ProcessParam process)
Get the IOStream associated with process standard output.
Definition: SDL3pp_process.h:834
StringResult ReadProcess(ProcessParam process, int *exitcode=nullptr)
Read all the output from a process.
Definition: SDL3pp_process.h:766
PropertiesRef GetProperties() const
Get the properties associated with a process.
Definition: SDL3pp_process.h:734
IOStreamRef GetProcessInput(ProcessParam process)
Get the IOStream associated with process standard input.
Definition: SDL3pp_process.h:802
Process CreateProcess(const char *const *args, bool pipe_stdio)
Create a new process.
Definition: SDL3pp_process.h:592
Process CreateProcessWithProperties(PropertiesParam props)
Create a new process with the specified properties.
Definition: SDL3pp_process.h:658
constexpr ProcessIO PROCESS_STDIO_APP
The I/O stream is connected to a new IOStream that the application can read or write.
Definition: SDL3pp_process.h:125
constexpr ProcessIO PROCESS_STDIO_NULL
The I/O stream is ignored.
Definition: SDL3pp_process.h:118
bool Wait(bool block, int *exitcode)
Wait for a process to finish.
Definition: SDL3pp_process.h:907
void Kill(bool force)
Stop a process.
Definition: SDL3pp_process.h:869
bool WaitProcess(ProcessParam process, bool block, int *exitcode)
Wait for a process to finish.
Definition: SDL3pp_process.h:902
PropertiesRef GetProcessProperties(ProcessParam process)
Get the properties associated with a process.
Definition: SDL3pp_process.h:729
void DestroyProcess(ProcessRaw process)
Destroy a previously created process object.
Definition: SDL3pp_process.h:929
IOStreamRef GetInput()
Get the IOStream associated with process standard input.
Definition: SDL3pp_process.h:807
SDL_Process * ProcessRaw
Alias to raw representation for Process.
Definition: SDL3pp_process.h:38
constexpr ProcessIO PROCESS_STDIO_REDIRECT
The I/O stream is redirected to an existing IOStream.
Definition: SDL3pp_process.h:128
constexpr ProcessIO PROCESS_STDIO_INHERITED
The I/O stream is inherited from the application.
Definition: SDL3pp_process.h:114
StringResult Read(int *exitcode=nullptr)
Read all the output from a process.
Definition: SDL3pp_process.h:773
Main include header for the SDL3pp library.
Semi-safe reference for IOStream.
Definition: SDL3pp_iostream.h:1629
Safely wrap Process for non owning parameters.
Definition: SDL3pp_process.h:45
constexpr ProcessParam(std::nullptr_t _=nullptr)
Constructs null/invalid.
Definition: SDL3pp_process.h:55
constexpr ProcessParam(ProcessRaw value)
Constructs from ProcessRaw.
Definition: SDL3pp_process.h:49
constexpr auto operator<=>(const ProcessParam &other) const =default
Comparison.
ProcessRaw value
parameter's ProcessRaw
Definition: SDL3pp_process.h:46
Semi-safe reference for Process.
Definition: SDL3pp_process.h:529
~ProcessRef()
Destructor.
Definition: SDL3pp_process.h:549
ProcessRef(const ProcessRef &other)
Copy constructor.
Definition: SDL3pp_process.h:543
ProcessRef(ProcessParam resource)
Constructs from ProcessParam.
Definition: SDL3pp_process.h:537
Safely wrap Properties for non owning parameters.
Definition: SDL3pp_properties.h:52
Semi-safe reference for Properties.
Definition: SDL3pp_properties.h:701
A simple std::string-like interface for SDL allocated strings.
Definition: SDL3pp_strings.h:153