cprover
cmdline.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_UTIL_CMDLINE_H
11 #define CPROVER_UTIL_CMDLINE_H
12 
13 #include <limits>
14 #include <list>
15 #include <string>
16 #include <vector>
17 
18 #include "optional.h"
19 
20 class cmdlinet
21 {
22 public:
75  virtual bool parse(int argc, const char **argv, const char *optstring);
76 
77  std::string get_value(char option) const;
78  std::string get_value(const char *option) const;
79 
80  const std::list<std::string> &get_values(const std::string &option) const;
81  const std::list<std::string> &get_values(char option) const;
82 
83  std::list<std::string> get_comma_separated_values(const char *option) const;
84 
85  virtual bool isset(char option) const;
86  virtual bool isset(const char *option) const;
88  virtual void set(const std::string &option, bool value = true);
89  virtual void set(const std::string &option, const std::string &value);
90  virtual void set(const std::string &option, const char *value)
91  {
92  set(option, std::string{value});
93  }
94 
95  virtual void clear();
96 
97  bool has_option(const std::string &option) const
98  {
99  return getoptnr(option).has_value();
100  }
101 
103  {
104  explicit option_namest(const cmdlinet &command_line);
106  : public std::iterator<std::forward_iterator_tag, std::string>
107  {
109  explicit option_names_iteratort(
110  const cmdlinet *command_line,
111  std::size_t index);
115  operator=(const option_names_iteratort &) = default;
117 
120  const std::string &operator*();
121 
122  bool operator==(const option_names_iteratort &other);
123  bool operator!=(const option_names_iteratort &other);
124 
125  private:
126  const cmdlinet *command_line = nullptr;
127  std::size_t index = std::numeric_limits<std::size_t>::max();
128  bool is_valid_index() const;
129  void goto_next_valid_index();
130  };
133 
134  private:
136  };
137 
140  option_namest option_names() const;
141 
142  typedef std::vector<std::string> argst;
144  std::string unknown_arg;
145 
146  cmdlinet();
147  virtual ~cmdlinet();
148 
149  std::vector<std::string>
150  get_argument_suggestions(const std::string &unknown_argument);
151 
152 protected:
153  struct optiont
154  {
155  bool isset;
156  bool hasval;
157  bool islong;
158  char optchar;
159  std::string optstring;
160  std::list<std::string> values;
161  public:
163  isset(false),
164  hasval(false),
165  islong(false),
166  optchar(0)
167  {}
168  };
169 
174  void parse_optstring(const char *optstring);
175 
180  bool parse_arguments(int argc, const char **argv);
181 
182  std::vector<optiont> options;
183 
184  optionalt<std::size_t> getoptnr(char option) const;
185  optionalt<std::size_t> getoptnr(const std::string &option) const;
186 };
187 
188 #endif // CPROVER_UTIL_CMDLINE_H
std::string get_value(char option) const
Definition: cmdline.cpp:47
virtual void set(const std::string &option, const char *value)
Definition: cmdline.h:90
std::string unknown_arg
Definition: cmdline.h:144
virtual bool isset(char option) const
Definition: cmdline.cpp:29
std::list< std::string > get_comma_separated_values(const char *option) const
Definition: cmdline.cpp:120
bool has_option(const std::string &option) const
Definition: cmdline.h:97
cmdlinet()
Definition: cmdline.cpp:15
argst args
Definition: cmdline.h:143
optionalt< std::size_t > getoptnr(char option) const
Definition: cmdline.cpp:136
bool parse_arguments(int argc, const char **argv)
Parses a commandline according to a previously parsed optstring and writes the result to cmdlinet::op...
Definition: cmdline.cpp:270
std::vector< optiont > options
Definition: cmdline.h:182
virtual ~cmdlinet()
Definition: cmdline.cpp:19
virtual void set(const std::string &option, bool value=true)
Set option option to value, or true if the value is omitted.
Definition: cmdline.cpp:57
virtual bool parse(int argc, const char **argv, const char *optstring)
Parses a commandline according to a specification given in optstring.
Definition: cmdline.cpp:154
std::vector< std::string > get_argument_suggestions(const std::string &unknown_argument)
Definition: cmdline.cpp:211
void parse_optstring(const char *optstring)
Parses an optstring and writes the result to cmdlinet::options.
Definition: cmdline.cpp:166
option_namest option_names() const
Pseudo-object that can be used to iterate over options in this cmdlinet (should not outlive this)
Definition: cmdline.cpp:162
std::vector< std::string > argst
Definition: cmdline.h:142
virtual void clear()
Definition: cmdline.cpp:23
const std::list< std::string > & get_values(const std::string &option) const
Definition: cmdline.cpp:108
nonstd::optional< T > optionalt
Definition: optional.h:35
option_names_iteratort(option_names_iteratort &&other)=default
option_names_iteratort & operator=(option_names_iteratort &&)=default
option_names_iteratort & operator=(const option_names_iteratort &)=default
bool operator==(const option_names_iteratort &other)
Definition: cmdline.cpp:367
option_names_iteratort(const option_names_iteratort &other)=default
bool operator!=(const option_names_iteratort &other)
Definition: cmdline.cpp:374
option_names_iteratort end()
Definition: cmdline.cpp:390
option_names_iteratort begin()
Definition: cmdline.cpp:385
option_namest(const cmdlinet &command_line)
Definition: cmdline.cpp:380
const cmdlinet & command_line
Definition: cmdline.h:135
std::string optstring
Definition: cmdline.h:159
std::list< std::string > values
Definition: cmdline.h:160