#include "args.hh" #include #include #include #include namespace { class OptionImpl : public OptionWithArg { public: OptionImpl(char short_name, std::string long_name, std::string description, bool require_arg, std::string arg_description) : short_name_(short_name), long_name_(std::move(long_name)), description_(std::move(description)), require_arg_(require_arg), arg_description_(std::move(arg_description)) { } bool is_set() const override { return set_; } std::string const& arg() const override { return arg_; } char short_name() const { return short_name_; } std::string const& long_name() const { return long_name_; } std::string const& description() const { return description_; } bool require_arg() const { return require_arg_; } std::string const& arg_description() const { return arg_description_; } void reset() { set_ = false; arg_.clear(); } void set() { set_ = true; } void set_arg(std::string arg) { arg_ = std::move(arg); } private: char const short_name_; std::string const long_name_; std::string const description_; bool const require_arg_; std::string const arg_description_; bool set_ = false; std::string arg_; }; class ArgsImpl : public Args { public: ArgsImpl() = default; std::shared_ptr