54 return options[*i].values.front();
77 options[*i].values.push_back(value);
104 return options[*i].values.front();
111 const std::string &option)
const 121 std::list<std::string>
124 std::list<std::string> separated_values;
126 if(i.has_value() && !
options[*i].values.empty())
128 std::istringstream values_stream(
options[*i].values.front());
129 std::string single_value;
130 while(std::getline(values_stream, single_value,
','))
132 separated_values.push_back(single_value);
135 return separated_values;
140 for(std::size_t i=0; i<
options.size(); i++)
149 for(std::size_t i=0; i<
options.size(); i++)
150 if(
options[i].optstring==option)
160 while(optstring[0]!=0)
165 optstring[0] !=
':',
"cmdlinet::parse: Invalid option string\n");
167 if(optstring[0]==
'(')
174 for(optstring++; optstring[0]!=
')' && optstring[0]!=0; optstring++)
177 if(optstring[0]==
')')
190 if(optstring[0]==
':')
201 for(
int i=1; i<argc; i++)
204 args.push_back(argv[i]);
209 if(argv[i][1]!=0 && argv[i][2]==0)
211 else if(argv[i][1]==
'-')
219 if(!optnr.has_value())
223 if(!optnr.has_value())
233 if(argv[i][2]==0 ||
options[*optnr].islong)
238 if(argv[i][0]==
'-' && argv[i][1]!=0)
240 options[*optnr].values.push_back(argv[i]);
243 options[*optnr].values.push_back(argv[i]+2);
const std::list< std::string > & get_values(const std::string &option) const
std::string get_value(char option) const
virtual bool parse(int argc, const char **argv, const char *optstring)
virtual bool isset(char option) const
static std::list< std::string > immutable_empty_list
nonstd::optional< T > optionalt
virtual void set(const std::string &option)
std::list< std::string > get_comma_separated_values(const char *option) const
optionalt< std::size_t > getoptnr(char option) const
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
std::vector< optiont > options