9 void find_opt(std::string
const& command_line_args, std::string arg_name, std::vector<std::string>& out_values)
15 for (
size_t start = 0; start < command_line_args.size();)
17 auto idx = command_line_args.find(arg_name, start);
18 if (idx == std::string::npos)
21 auto idx_after_arg = idx + arg_name.size();
24 for (; idx_after_arg < command_line_args.size() && std::isspace(command_line_args[idx_after_arg]); ++idx_after_arg)
27 if (idx_after_arg == command_line_args.size())
30 if (command_line_args[idx_after_arg] ==
'-' &&
32 !(idx_after_arg + 1 < command_line_args.size() &&
33 (command_line_args[idx_after_arg + 1] >=
'0' && command_line_args[idx_after_arg + 1] <=
'9')))
35 start = idx_after_arg;
40 auto idx_after_value = idx_after_arg;
41 for (; idx_after_value < command_line_args.size() && !std::isspace(command_line_args[idx_after_value]);
45 auto value_size = idx_after_value - idx_after_arg;
47 out_values.push_back(command_line_args.substr(idx_after_arg, value_size));
49 start = idx_after_arg + 1;
53 std::vector<std::string>
find_opt(std::string
const& command_line_args, std::string arg_name)
55 std::vector<std::string> values;
56 find_opt(command_line_args, arg_name, values);
60 template <
typename T,
typename S, S (*F)(const
char*)>
61 bool find_opt_parse(std::string
const& command_line_args, std::string arg_name, T& value)
63 std::vector<std::string> opts =
find_opt(command_line_args, arg_name);
68 value = (T)F(opts[0].c_str());
73 bool find_opt_float(std::string
const& command_line_args, std::string arg_name,
float& value)
75 return find_opt_parse<float, double, atof>(command_line_args, arg_name, value);
78 bool find_opt_int(std::string
const& command_line_args, std::string arg_name,
int& value)
80 return find_opt_parse<int, int, atoi>(command_line_args, arg_name, value);
bool find_opt_int(std::string const &command_line_args, std::string arg_name, int &value)
void find_opt(std::string const &command_line_args, std::string arg_name, std::vector< std::string > &out_values)
bool find_opt_parse(std::string const &command_line_args, std::string arg_name, T &value)
bool find_opt_float(std::string const &command_line_args, std::string arg_name, float &value)