// Copyright (c) 2020 Egor Tensin // This file is part of the "winapi-common" project. // For details, see https://github.com/egor-tensin/winapi-common. // Distributed under the MIT License. #pragma once #include #include #include #include namespace winapi { class CommandLine { public: static CommandLine query(); static CommandLine parse(const std::string&); static CommandLine from_main(int argc, wchar_t* argv[]); CommandLine() = default; CommandLine(const std::string& argv0, const std::vector& args = {}) : argv0(argv0), args(args) {} CommandLine(std::string&& argv0, std::vector&& args = {}) : argv0(std::move(argv0)), args(std::move(args)) {} static std::string escape(const std::string&); static std::string escape_cmd(const std::string&); std::string to_string() const; std::string args_to_string() const; std::string get_argv0() const { return argv0; } bool has_args() const { return !get_args().empty(); } const std::vector& get_args() const { return args; } private: static BOOST_CONSTEXPR char token_sep() { return ' '; } std::string escape_argv0() const { return escape(get_argv0()); } std::vector escape_args() const; std::string argv0; std::vector args; }; } // namespace winapi