Go to the documentation of this file.
50 if(i.has_value() && !
options[*i].values.empty())
51 return options[*i].values.front();
65 "unknown command line option", option);
76 options[*i].values.push_back(value);
81 "unknown command line option", option);
101 if(i.has_value() && !
options[*i].values.empty())
102 return options[*i].values.front();
108 const std::string &option)
const
118 std::list<std::string>
121 std::list<std::string> separated_values;
123 if(i.has_value() && !
options[*i].values.empty())
125 std::istringstream values_stream(
options[*i].values.front());
126 std::string single_value;
127 while(std::getline(values_stream, single_value,
','))
129 separated_values.push_back(single_value);
132 return separated_values;
137 for(std::size_t i=0; i<
options.size(); i++)
146 for(std::size_t i=0; i<
options.size(); i++)
147 if(
options[i].optstring==option)
157 while(optstring[0]!=0)
162 optstring[0] !=
':',
"cmdlinet::parse: Invalid option string\n");
164 if(optstring[0]==
'(')
171 for(optstring++; optstring[0]!=
')' && optstring[0]!=0; optstring++)
174 if(optstring[0]==
')')
187 if(optstring[0]==
':')
198 for(
int i=1; i<argc; i++)
201 args.push_back(argv[i]);
206 if(argv[i][1]!=0 && argv[i][2]==0)
208 else if(argv[i][1]==
'-')
216 if(!optnr.has_value())
220 if(!optnr.has_value())
230 if(argv[i][2]==0 ||
options[*optnr].islong)
235 if(argv[i][0]==
'-' && argv[i][1]!=0)
237 options[*optnr].values.push_back(argv[i]);
240 options[*optnr].values.push_back(argv[i]+2);
256 : command_line(command_line), index(index)
266 goto_next_valid_index();
280 while(index < command_line->
options.size() && !is_valid_index())
302 return index == other.
index;
309 return index != other.
index;
const std::string & operator*()
virtual bool parse(int argc, const char **argv, const char *optstring)
option_names_iteratort begin()
virtual bool isset(char option) const
void goto_next_valid_index()
std::vector< optiont > options
option_names_iteratort()=default
std::list< std::string > get_comma_separated_values(const char *option) const
virtual void set(const std::string &option, bool value=true)
static std::list< std::string > immutable_empty_list
bool operator!=(const option_names_iteratort &other)
option_namest(const cmdlinet &command_line)
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
const cmdlinet & command_line
#define PRECONDITION(CONDITION)
std::string get_value(char option) const
option_names_iteratort & operator++()
option_namest option_names() const
Pseudo-object that can be used to iterate over options in this cmdlinet (should not outlive this)
nonstd::optional< T > optionalt
optionalt< std::size_t > getoptnr(char option) const
bool is_valid_index() const
const cmdlinet * command_line
bool operator==(const option_names_iteratort &other)
option_names_iteratort end()
Thrown when users pass incorrect command line arguments, for example passing no files to analysis or ...
const std::list< std::string > & get_values(const std::string &option) const