cprover
options.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Options
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #include "options.h"
13 
14 #include "json.h"
15 #include "string2int.h"
16 #include "xml.h"
17 
18 void optionst::set_option(const std::string &option,
19  const std::string &value)
20 {
21  value_listt &value_list=option_map[option];
22  value_list.clear();
23  value_list.push_back(value);
24 }
25 
26 void optionst::set_option(const std::string &option,
27  const bool value)
28 {
29  set_option(option, std::string(value?"1":"0"));
30 }
31 
32 void optionst::set_option(const std::string &option, const int value)
33 {
34  set_option(option, std::to_string(value));
35 }
36 
37 void optionst::set_option(const std::string &option, const unsigned value)
38 {
39  set_option(option, std::to_string(value));
40 }
41 
42 bool optionst::get_bool_option(const std::string &option) const
43 {
44  const std::string value=get_option(option);
45  return value.empty()?false:(std::stoi(value)!=0);
46 }
47 
48 signed int optionst::get_signed_int_option(const std::string &option) const
49 {
50  const std::string value=get_option(option);
51  return value.empty()?0:std::stoi(value);
52 }
53 
54 unsigned int optionst::get_unsigned_int_option(const std::string &option) const
55 {
56  const std::string value=get_option(option);
57  return value.empty()?0:safe_string2unsigned(value);
58 }
59 
60 bool optionst::is_set(const std::string &option) const
61 {
62  return option_map.find(option) != option_map.end();
63 }
64 
65 const std::string optionst::get_option(const std::string &option) const
66 {
67  option_mapt::const_iterator it=
68  option_map.find(option);
69 
70  if(it==option_map.end())
71  return std::string();
72  else if(it->second.empty())
73  return std::string();
74  else
75  return it->second.front();
76 }
77 
79  const std::string &option) const
80 {
81  option_mapt::const_iterator it=
82  option_map.find(option);
83 
84  if(it==option_map.end())
85  return empty_list;
86  else
87  return it->second;
88 }
89 
92 {
93  json_objectt json_options;
94  for(const auto &option_pair : option_map)
95  {
96  json_arrayt &values = json_options[option_pair.first].make_array();
97  for(const auto &value : option_pair.second)
98  values.push_back(json_stringt(value));
99  }
100  return json_options;
101 }
102 
105 {
106  xmlt xml_options("options");
107  for(const auto &option_pair : option_map)
108  {
109  xmlt &xml_option = xml_options.new_element("option");
110  xml_option.set_attribute("name", option_pair.first);
111  for(const auto &value : option_pair.second)
112  {
113  xmlt &xml_value = xml_option.new_element("value");
114  xml_value.data = value;
115  }
116  }
117  return xml_options;
118 }
119 
121 void optionst::output(std::ostream &out) const
122 {
123  for(const auto &option_pair : option_map)
124  {
125  out << option_pair.first << ": ";
126  bool first = true;
127  for(const auto &value : option_pair.second)
128  {
129  if(first)
130  first = false;
131  else
132  out << ", ";
133  out << '"' << value << '"';
134  }
135  out << "\n";
136  }
137 }
optionst::output
void output(std::ostream &out) const
Outputs the options to out
Definition: options.cpp:121
optionst::get_option
const std::string get_option(const std::string &option) const
Definition: options.cpp:65
options.h
optionst::set_option
void set_option(const std::string &option, const bool value)
Definition: options.cpp:26
to_string
std::string to_string(const string_not_contains_constraintt &expr)
Used for debug printing.
Definition: string_constraint.cpp:53
optionst::value_listt
std::list< std::string > value_listt
Definition: options.h:25
xml.h
json_arrayt
Definition: json.h:146
json_objectt
Definition: json.h:244
string2int.h
optionst::to_json
json_objectt to_json() const
Returns the options as JSON key value pairs.
Definition: options.cpp:91
optionst::is_set
bool is_set(const std::string &option) const
N.B. opts.is_set("foo") does not imply opts.get_bool_option("foo")
Definition: options.cpp:60
optionst::option_map
option_mapt option_map
Definition: options.h:66
optionst::get_signed_int_option
signed int get_signed_int_option(const std::string &option) const
Definition: options.cpp:48
optionst::set_option
void set_option(const std::string &option, const unsigned value)
Definition: options.cpp:37
jsont::make_array
json_arrayt & make_array()
Definition: json.h:284
xmlt
Definition: xml.h:18
optionst::get_unsigned_int_option
unsigned int get_unsigned_int_option(const std::string &option) const
Definition: options.cpp:54
safe_string2unsigned
unsigned safe_string2unsigned(const std::string &str, int base)
Definition: string2int.cpp:54
optionst::empty_list
const value_listt empty_list
Definition: options.h:67
xmlt::set_attribute
void set_attribute(const std::string &attribute, unsigned value)
Definition: xml.cpp:175
optionst::get_bool_option
bool get_bool_option(const std::string &option) const
Definition: options.cpp:42
json.h
optionst::to_xml
xmlt to_xml() const
Returns the options in XML format.
Definition: options.cpp:104
xmlt::data
std::string data
Definition: xml.h:30
optionst::get_list_option
const value_listt & get_list_option(const std::string &option) const
Definition: options.cpp:78
json_arrayt::push_back
jsont & push_back(const jsont &json)
Definition: json.h:163
xmlt::new_element
xmlt & new_element(const std::string &key)
Definition: xml.h:86
json_stringt
Definition: json.h:214