25 virtual bool validate(
const std::string& value)
const = 0;
31 double minValue, maxValue;
35 :
IValidator(argType), minValue(min), maxValue(max) {}
37 bool validate(
const std::string& value)
const override {
41 int intValue = std::stoi(value);
42 return intValue >=
static_cast<int>(minValue) && intValue <=
static_cast<int>(maxValue);
45 double doubleValue = std::stod(value);
46 return doubleValue >= minValue && doubleValue <= maxValue;
60 return "Value must be between " + std::to_string(minValue) +
" and " + std::to_string(maxValue);
65 std::vector<std::string> allowedValues;
69 :
IValidator(argType), allowedValues(values) {}
71 bool validate(
const std::string& value)
const override {
75 int intValue = std::stoi(value);
76 return std::find(allowedValues.begin(), allowedValues.end(), std::to_string(intValue)) != allowedValues.end();
83 double doubleValue = std::stod(value);
84 std::ostringstream oss;
86 return std::find(allowedValues.begin(), allowedValues.end(), oss.str()) != allowedValues.end();
92 return std::find(allowedValues.begin(), allowedValues.end(), value) != allowedValues.end();
99 std::ostringstream oss;
100 oss <<
"Value must be one of: ";
101 for (
size_t i = 0; i < allowedValues.size(); ++i) {
102 oss << allowedValues[i];
103 if (i < allowedValues.size() - 1) oss <<
", ";
111 std::string longName, shortName, helpText;
115 std::optional<std::string> defaultValue;
116 std::vector<std::shared_ptr<IValidator>> validators;
120 Argument(
const std::string& longName,
const std::string& shortName,
const std::string& helpText,
121 ArgType type,
bool isRequired,
bool allowsMultiple,
122 std::optional<std::string> defaultValue,
bool isPositional);
124 void addValidator(std::shared_ptr<IValidator> validator);
126 bool validate(
const std::string& value)
const;
138 std::string longName, shortName, helpText;
140 bool isRequired =
false;
141 bool allowsMultiple =
false;
142 std::optional<std::string> defaultValue = std::nullopt;
143 std::vector<std::shared_ptr<IValidator>> validators;
144 bool isPositional =
false;
160 std::vector<Argument> arguments;
161 std::vector<Argument> positional_arguments;
162 std::map<std::string, std::vector<std::string>> parsedValues;
163 std::vector<std::string> positionalValues;
167 void parse(
int argc,
char* argv[]);
168 std::string
getValue(
const std::string& name)
const;
169 std::vector<std::string>
getValues(
const std::string& name)
const;
171 bool exists(
const std::string& name)
const;
174 T get(
const std::string& name)
const;
177 T getOr(
const std::string& name,
const T& defaultValue)
const;
180 std::vector<T>
getMany(
const std::string& name)
const;
183 std::vector<T>
getManyOr(
const std::string& name,
const std::vector<T>& defaultValues)
const;
189 static T convertFromString(
const std::string& s);
191 const Argument* findArgumentByLongName(
const std::string& name)
const;
194#include "ArgsParser.tpp"
bool validate(const std::string &value) const override
std::string errorMessage() const override
AllowedValuesValidator(const std::vector< std::string > &values, ArgType argType)
T get(const std::string &name) const
std::vector< T > getMany(const std::string &name) const
std::vector< T > getManyOr(const std::string &name, const std::vector< T > &defaultValues) const
void parse(int argc, char *argv[])
std::vector< std::string > getValues(const std::string &name) const
std::vector< std::string > getPositionalValues() const
std::string getValue(const std::string &name) const
void addArgument(const Argument &arg)
T getOr(const std::string &name, const T &defaultValue) const
bool exists(const std::string &name) const
ArgumentBuilder & setAllowsMultiple(bool multiple)
ArgumentBuilder & setType(ArgType argType)
ArgumentBuilder & setLongName(const std::string &name)
ArgumentBuilder & setDefaultValue(const std::string &value)
ArgumentBuilder & setHelpText(const std::string &text)
ArgumentBuilder & setPositional(bool positional)
ArgumentBuilder & setRequired(bool required)
ArgumentBuilder & setShortName(const std::string &name)
ArgumentBuilder & addValidator(std::shared_ptr< IValidator > validator)
bool allowsMultipleValues() const
bool isRequiredArg() const
std::string getLongName() const
bool validate(const std::string &value) const
bool isPositionalArg() const
std::optional< std::string > getDefaultValue() const
std::string getShortName() const
void addValidator(std::shared_ptr< IValidator > validator)
std::string getHelpText() const
virtual std::string errorMessage() const =0
virtual bool validate(const std::string &value) const =0
virtual ~IValidator()=default
IValidator(ArgType argType)
std::string errorMessage() const override
bool validate(const std::string &value) const override
RangeValidator(double min, double max, ArgType argType)
double T(double x)
Wilson coefficient T(x).