5 #include "LongOptions.h" 7 static const struct option null_long_opt =
9 nullptr, 0,
nullptr, 0,
15 m_long_opts.push_back(null_long_opt);
16 m_short_opts.push_back(
'\0');
23 if ( (long_opt.name ==
nullptr)
24 && (long_opt.has_arg == 0)
25 && (long_opt.flag ==
nullptr)
26 && (long_opt.val == 0))
28 std::runtime_error e(
"cannot add empty struct option");
33 if (m_long_opts_set.count(long_opt.name) == 1)
35 std::runtime_error e(
"duplicate long option name");
39 if (m_short_opts_set.count(long_opt.val) == 1)
41 std::runtime_error e(
"duplicate short option name");
46 m_long_opts_set.insert(long_opt.name);
47 m_short_opts_set.insert(long_opt.val);
50 m_short_to_long_map[long_opt.val] = long_opt.name;
53 m_long_opts.pop_back();
54 m_long_opts.push_back(long_opt);
55 m_long_opts.push_back(null_long_opt);
58 m_short_opts.pop_back();
59 m_short_opts.push_back(long_opt.val);
60 if (long_opt.has_arg == required_argument)
61 m_short_opts.push_back(
':');
62 else if (long_opt.has_arg == optional_argument)
64 m_short_opts.push_back(
':');
65 m_short_opts.push_back(
':');
67 m_short_opts.push_back(
'\0');
73 return m_long_opts.data();
79 return m_short_opts.data();
84 return m_short_to_long_map.at(short_option);
std::string getLongOptionName(char short_option) const
const char * getShortOpts() const
void add(struct option long_opt)
const struct option * getLongOpts() const