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:
23  virtual bool parse(int argc, const char **argv, const char *optstring);
24 
25  std::string get_value(char option) const;
26  std::string get_value(const char *option) const;
27 
28  const std::list<std::string> &get_values(const std::string &option) const;
29  const std::list<std::string> &get_values(char option) const;
30 
31  std::list<std::string> get_comma_separated_values(const char *option) const;
32 
33  virtual bool isset(char option) const;
34  virtual bool isset(const char *option) const;
36  virtual void set(const std::string &option, bool value = true);
37  virtual void set(const std::string &option, const std::string &value);
38  virtual void set(const std::string &option, const char *value)
39  {
40  set(option, std::string{value});
41  }
42 
43  virtual void clear();
44 
45  bool has_option(const std::string &option) const
46  {
47  return getoptnr(option).has_value();
48  }
49 
51  {
52  explicit option_namest(const cmdlinet &command_line);
54  : public std::iterator<std::forward_iterator_tag, std::string>
55  {
57  explicit option_names_iteratort(
58  const cmdlinet *command_line,
59  std::size_t index);
63  operator=(const option_names_iteratort &) = default;
65 
68  const std::string &operator*();
69 
70  bool operator==(const option_names_iteratort &other);
71  bool operator!=(const option_names_iteratort &other);
72 
73  private:
74  const cmdlinet *command_line = nullptr;
75  std::size_t index = std::numeric_limits<std::size_t>::max();
76  bool is_valid_index() const;
77  void goto_next_valid_index();
78  };
81 
82  private:
84  };
85 
89 
90  typedef std::vector<std::string> argst;
92  std::string unknown_arg;
93 
94  cmdlinet();
95  virtual ~cmdlinet();
96 
97  std::vector<std::string>
98  get_argument_suggestions(const std::string &unknown_argument);
99 
100 protected:
101  struct optiont
102  {
103  bool isset;
104  bool hasval;
105  bool islong;
106  char optchar;
107  std::string optstring;
108  std::list<std::string> values;
109  public:
111  isset(false),
112  hasval(false),
113  islong(false),
114  optchar(0)
115  {}
116  };
117 
118  std::vector<optiont> options;
119 
120  optionalt<std::size_t> getoptnr(char option) const;
121  optionalt<std::size_t> getoptnr(const std::string &option) const;
122 };
123 
124 #endif // CPROVER_UTIL_CMDLINE_H
cmdlinet::args
argst args
Definition: cmdline.h:91
cmdlinet::option_namest::option_names_iteratort::operator*
const std::string & operator*()
Definition: cmdline.cpp:353
cmdlinet::parse
virtual bool parse(int argc, const char **argv, const char *optstring)
Definition: cmdline.cpp:154
cmdlinet::option_namest::begin
option_names_iteratort begin()
Definition: cmdline.cpp:378
cmdlinet::option_namest
Definition: cmdline.h:51
cmdlinet::isset
virtual bool isset(char option) const
Definition: cmdline.cpp:29
cmdlinet::option_namest::option_names_iteratort::operator=
option_names_iteratort & operator=(option_names_iteratort &&)=default
optional.h
cmdlinet::option_namest::option_names_iteratort::goto_next_valid_index
void goto_next_valid_index()
Definition: cmdline.cpp:338
cmdlinet::set
virtual void set(const std::string &option, const char *value)
Definition: cmdline.h:38
cmdlinet::optiont::optiont
optiont()
Definition: cmdline.h:110
cmdlinet::options
std::vector< optiont > options
Definition: cmdline.h:118
cmdlinet::option_namest::option_names_iteratort::option_names_iteratort
option_names_iteratort()=default
cmdlinet::option_namest::option_names_iteratort::option_names_iteratort
option_names_iteratort(option_names_iteratort &&other)=default
cmdlinet::option_namest::option_names_iteratort::index
std::size_t index
Definition: cmdline.h:75
cmdlinet::get_comma_separated_values
std::list< std::string > get_comma_separated_values(const char *option) const
Definition: cmdline.cpp:120
cmdlinet::set
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
cmdlinet::has_option
bool has_option(const std::string &option) const
Definition: cmdline.h:45
cmdlinet::optiont::islong
bool islong
Definition: cmdline.h:105
cmdlinet::option_namest::option_names_iteratort::operator!=
bool operator!=(const option_names_iteratort &other)
Definition: cmdline.cpp:367
cmdlinet::option_namest::option_namest
option_namest(const cmdlinet &command_line)
Definition: cmdline.cpp:373
cmdlinet::optiont::optstring
std::string optstring
Definition: cmdline.h:107
cmdlinet
Definition: cmdline.h:21
cmdlinet::optiont::isset
bool isset
Definition: cmdline.h:103
cmdlinet::~cmdlinet
virtual ~cmdlinet()
Definition: cmdline.cpp:19
cmdlinet::option_namest::command_line
const cmdlinet & command_line
Definition: cmdline.h:83
cmdlinet::get_value
std::string get_value(char option) const
Definition: cmdline.cpp:47
cmdlinet::unknown_arg
std::string unknown_arg
Definition: cmdline.h:92
cmdlinet::option_namest::option_names_iteratort::operator++
option_names_iteratort & operator++()
Definition: cmdline.cpp:323
cmdlinet::option_namest::option_names_iteratort
Definition: cmdline.h:55
cmdlinet::option_names
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:249
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
cmdlinet::optiont::values
std::list< std::string > values
Definition: cmdline.h:108
cmdlinet::clear
virtual void clear()
Definition: cmdline.cpp:23
cmdlinet::cmdlinet
cmdlinet()
Definition: cmdline.cpp:15
cmdlinet::getoptnr
optionalt< std::size_t > getoptnr(char option) const
Definition: cmdline.cpp:136
cmdlinet::optiont::optchar
char optchar
Definition: cmdline.h:106
cmdlinet::option_namest::option_names_iteratort::is_valid_index
bool is_valid_index() const
Definition: cmdline.cpp:330
cmdlinet::option_namest::option_names_iteratort::command_line
const cmdlinet * command_line
Definition: cmdline.h:74
cmdlinet::optiont
Definition: cmdline.h:102
cmdlinet::option_namest::option_names_iteratort::operator==
bool operator==(const option_names_iteratort &other)
Definition: cmdline.cpp:360
cmdlinet::get_argument_suggestions
std::vector< std::string > get_argument_suggestions(const std::string &unknown_argument)
Definition: cmdline.cpp:255
cmdlinet::option_namest::end
option_names_iteratort end()
Definition: cmdline.cpp:383
cmdlinet::option_namest::option_names_iteratort::option_names_iteratort
option_names_iteratort(const option_names_iteratort &other)=default
cmdlinet::optiont::hasval
bool hasval
Definition: cmdline.h:104
cmdlinet::get_values
const std::list< std::string > & get_values(const std::string &option) const
Definition: cmdline.cpp:108
cmdlinet::option_namest::option_names_iteratort::operator=
option_names_iteratort & operator=(const option_names_iteratort &)=default
cmdlinet::argst
std::vector< std::string > argst
Definition: cmdline.h:90