Sierra Toolkit  Version of the Day
Option.hpp
1 #ifndef STK_UTIL_DIAG_Option_h
2 #define STK_UTIL_DIAG_Option_h
3 
4 #include <map>
5 
6 namespace stk_classic {
7 namespace diag {
8 
9 
10 
11 typedef unsigned long OptionMask;
12 
19 {
25  {}
26 
37  virtual std::ostream &describe(std::ostream &os) const = 0;
38 };
39 
40 
47 struct Option : public OptionDescription
48 {
54  : m_name(""),
55  m_envName(""),
56  m_description(""),
57  m_value(""),
59  {}
60 
81  Option(const std::string &name, const std::string &env_name, const std::string &value = std::string(),
82  const std::string &description = "No description available",
83  const OptionDescription *sub_option_description = 0)
84  : m_name(name),
85  m_envName(env_name),
86  m_description(description),
87  m_value(value),
88  m_subOptionDescription(sub_option_description)
89  {}
90 
98  Option(const Option &option)
99  : m_name(option.m_name),
100  m_envName(option.m_envName),
102  m_value(option.m_value),
104  {}
105 
106 
114  Option &operator=(const Option &option)
115  {
116  m_name = option.m_name;
117  m_envName = option.m_envName;
118  m_description = option.m_description;
119  m_value = option.m_value;
121  return *this;
122  }
123 
128  virtual ~Option()
129  {}
130 
131  const std::string &getName() const {
132  return m_name;
133  }
134 
135  const std::string &getValue() const {
136  return m_value;
137  }
138 
149  virtual std::ostream &describe(std::ostream &os) const;
150 
151  operator std::string &() {
152  return m_value;
153  }
154 
155  std::string m_name;
156  std::string m_envName;
157  std::string m_description;
158  std::string m_value;
160 };
161 
162 
168 {
174  : m_name(""),
175  m_mask(0),
176  m_description("")
177  {}
178 
186  OptionMaskName(const std::string &name, const OptionMask &mask, const std::string &description = "No description available")
187  : m_name(name),
188  m_mask(mask),
189  m_description(description)
190  {}
191 
196  virtual ~OptionMaskName()
197  {}
198 
205  bool operator<(const OptionMaskName &o) const {
206  return m_name < o.m_name;
207  }
208 
215  virtual std::ostream &describe(std::ostream &os) const;
216 
217  std::string m_name;
218  OptionMask m_mask;
219  std::string m_description;
220 };
221 
222 
227 class OptionMaskNameMap: public std::map<std::string, OptionMaskName>
228 {
229 public:
237  void mask(const std::string &name, const OptionMask l_mask, const std::string &description) {
238  iterator it = find(name);
239  if (it == end())
240  insert(std::make_pair(name, OptionMaskName(name, l_mask, description)));
241  else {
242  (*it).second.m_mask = l_mask;
243  (*it).second.m_description = description;
244  }
245  }
246 };
247 
248 
259 {
260 public:
261  typedef OptionMask Mask;
262 
263 public:
270  m_optionMask(0),
271  m_status(true)
272  {}
273 
279  {}
280 
281  const OptionMaskNameMap &getOptionMaskNameMap() const {
282  return m_optionMaskNameMap;
283  }
284 
292  virtual Mask parse(const char *mask) const;
293 
303  virtual void parseArg(const std::string &name, const std::string &arg) const;
304 
315  Mask &operator[](const std::string &name) {
316  return m_optionMaskNameMap[name].m_mask;
317  }
318 
332  void mask(const std::string &name, const Mask l_mask, const std::string &description) {
333  m_optionMaskNameMap.mask(name, l_mask, description);
334  }
335 
342  std::ostream &describe(std::ostream &os) const;
343 
344 protected:
346  mutable OptionMask m_optionMask;
347  mutable bool m_status;
348 };
349 
350 } // namespace diag
351 } // namespace stk_classic
352 
353 namespace sierra {
354 typedef stk_classic::diag::OptionMask OptionMask;
355 typedef stk_classic::diag::OptionDescription OptionDescription;
356 typedef stk_classic::diag::Option Option;
357 typedef stk_classic::diag::OptionMaskName OptionMaskName;
358 typedef stk_classic::diag::OptionMaskNameMap OptionMaskNameMap;
359 typedef stk_classic::diag::OptionMaskParser OptionMaskParser;
360 } // namespace sierra
361 
362 #endif // STK_UTIL_DIAG_Option_h
Mask & operator[](const std::string &name)
Definition: Option.hpp:315
Option(const Option &option)
Definition: Option.hpp:98
Class OptionMaskNameMap ...
Definition: Option.hpp:227
Definition: Env.cpp:53
Class OptionMaskName ...
Definition: Option.hpp:167
bool operator<(const OptionMaskName &o) const
Member function < ...
Definition: Option.hpp:205
Option(const std::string &name, const std::string &env_name, const std::string &value=std::string(), const std::string &description="No description available", const OptionDescription *sub_option_description=0)
Definition: Option.hpp:81
std::string m_name
Name/Command line option name.
Definition: Option.hpp:155
virtual std::ostream & describe(std::ostream &os) const =0
Member function describe prints a description of the option to the stream.
std::string m_envName
Environment variable name.
Definition: Option.hpp:156
OptionMaskNameMap m_optionMaskNameMap
Mask name vector.
Definition: Option.hpp:345
virtual void parseArg(const std::string &name, const std::string &arg) const
Definition: Option.cpp:93
virtual std::ostream & describe(std::ostream &os) const
Member function describe ...
Definition: Option.cpp:124
void mask(const std::string &name, const Mask l_mask, const std::string &description)
Definition: Option.hpp:332
OptionMask m_optionMask
Most recently parsed mask.
Definition: Option.hpp:346
void mask(const std::string &name, const OptionMask l_mask, const std::string &description)
Member function mask ...
Definition: Option.hpp:237
virtual Mask parse(const char *mask) const
Definition: Option.cpp:15
OptionMaskName(const std::string &name, const OptionMask &mask, const std::string &description="No description available")
Definition: Option.hpp:186
bool m_status
Result of most recent parse.
Definition: Option.hpp:347
const OptionDescription * m_subOptionDescription
Suboptions (used for &#39;-h&#39; parsing)
Definition: Option.hpp:159
std::string m_value
Value of option.
Definition: Option.hpp:158
Sierra Toolkit.
Class Option holds the command line name, environment variable name and the current value of an optio...
Definition: Option.hpp:47
std::string m_description
Brief &#39;-h&#39; description.
Definition: Option.hpp:157
OptionMask Mask
Mask for this option.
Definition: Option.hpp:261
std::ostream & describe(std::ostream &os) const
Definition: Option.cpp:112
Part * find(const PartVector &parts, const std::string &name)
Find a part by name in a collection of parts.
Definition: Part.cpp:22
Option & operator=(const Option &option)
Member function operator= assigns an option from another option.
Definition: Option.hpp:114
Class OptionDescription is an interface class for describing a command line option or option value...
Definition: Option.hpp:18
virtual std::ostream & describe(std::ostream &os) const
Member function describe prints a description of the option to the stream.
bool insert(PartVector &v, Part &part)
Insert a part into a properly ordered collection of parts. Returns true if this is a new insertion...
Definition: Part.cpp:85