#ifndef SYSTEM_H #define SYSTEM_H #include // size_t #include // function #include #include #include namespace Util { using SplitCallback = std::function; class System { public: System() {} virtual ~System() {} enum FileDescriptor { ReadFileDescriptor, WriteFileDescriptor, }; void operator()(const char* command); void operator()(std::string command); void operator()(std::string_view command); void operator()(const std::vector& arguments); void operator()(const std::vector& arguments); void operator()(const std::vector& arguments); std::string output() const { return m_output; } std::string error() const { return m_error; } int status() const { return m_status; } private: void operator()(const std::vector& arguments); void readFromFileDescriptor(int fileDescriptor[2], std::string& output); size_t split(char* split, const char* delimiters, SplitCallback callback = {}); std::string m_output; std::string m_error; int m_status { 0 }; }; } // namespace Util #endif // SYSTEM_H