1 #ifndef WIBBLE_COMMANDLINE_OPTIONS_H 2 #define WIBBLE_COMMANDLINE_OPTIONS_H 9 namespace commandline {
16 static bool parse(
const std::string& val);
18 static bool toBool(
const value_type& val);
19 static int toInt(
const value_type& val);
20 static std::string
toString(
const value_type& val);
27 static int parse(
const std::string& val);
29 static bool toBool(
const value_type& val);
30 static int toInt(
const value_type& val);
31 static std::string
toString(
const value_type& val);
38 static std::string
parse(
const std::string& val);
40 static bool toBool(
const value_type& val);
41 static int toInt(
const value_type& val);
42 static std::string
toString(
const value_type& val);
49 static std::string
parse(
const std::string& val);
50 static std::string
toString(
const value_type& val);
58 mutable std::string m_fullUsage;
63 Option(
const std::string& name) : m_name(name), m_isset(false), hidden(false) {}
66 const std::string& longName,
67 const std::string&
usage = std::string(),
68 const std::string& description = std::string())
69 : m_name(name), m_isset(false),
usage(
usage), description(description), hidden(false)
72 shortNames.push_back(shortName);
73 if (!longName.empty())
74 longNames.push_back(longName);
95 virtual bool parse(
const std::string& param) = 0;
101 virtual void parse_noarg() = 0;
110 bool isSet()
const {
return m_isset; }
111 const std::string&
name()
const {
return m_name; }
114 void addAlias(
const std::string& str) { longNames.push_back(str); }
117 const std::string& fullUsage()
const;
118 std::string fullUsageForMan()
const;
140 :
Option(name), m_value(false) {}
143 const std::string& longName,
144 const std::string&
usage = std::string(),
145 const std::string& description = std::string())
146 :
Option(name, shortName, longName,
usage, description), m_value(false) {}
149 virtual bool parse(
const std::string&) { parse_noarg();
return false; }
154 std::string
stringValue()
const {
return m_value ?
"true" :
"false"; }
173 const std::string& longName,
174 const std::string&
usage = std::string(),
175 const std::string& description = std::string())
176 :
Option(name, shortName, longName,
usage, description)
179 this->
usage =
"<val>";
184 if (begin == list.end())
186 m_value = T::parse(*begin);
191 bool parse(
const std::string& param)
193 m_value = T::parse(param);
207 typename T::value_type
value()
const {
return m_value; }
238 const std::string& longName,
239 const std::string&
usage = std::string(),
240 const std::string& description = std::string())
245 "creating option " + name +
" with optional value" 246 "short options with optional values are not allowed");
248 this->
usage =
"<val>";
254 "parsing option with optional value" 255 "short options with optional values are not allowed");
257 bool parse(
const std::string& param)
259 m_value = T::parse(param);
279 typename T::value_type
value()
const {
return m_value; }
308 std::vector< typename T::value_type > m_values;
318 const std::string& longName,
319 const std::string&
usage = std::string(),
320 const std::string& description = std::string())
321 :
Option(name, shortName, longName,
usage, description)
324 this->
usage =
"<val>";
329 if (begin == list.end())
332 m_values.push_back(T::parse(*begin));
336 bool parse(
const std::string& param)
339 m_values.push_back(T::parse(param));
349 const std::vector< typename T::value_type >&
values()
const {
return m_values; }
365 : m_manager(mman), description(description), hidden(false) {}
383 const std::string& longName,
384 const std::string&
usage = std::string(),
385 const std::string& description = std::string())
387 T* item =
new T(name, shortName, longName,
usage, description);
388 if (m_manager) m_manager->
add(item);
396 T*
add(
const std::string& name,
398 const std::string& longName,
399 const std::string&
usage = std::string(),
400 const std::string& description = std::string())
402 T* res = create<T>(name, shortName, longName,
usage, description);
static int init_val
Definition: options.h:32
virtual bool arg_is_optional() const
Return true if the argument to this function can be omitted.
Definition: options.h:104
Option * add(Option *o)
Definition: options.h:368
static std::string init_val
Definition: options.h:51
T * add(T *item)
Definition: core.h:76
int intValue() const
Definition: options.h:211
void parse_noarg()
Notify that the option is present in the command line, but has no arguments.
Definition: options.h:342
Iterator< typename I::value_type > iterator(I i)
Definition: iterator.h:123
VectorOption(const std::string &name)
Definition: options.h:311
void addAlias(char c)
Definition: options.h:113
std::vector< Option * > options
Definition: options.h:370
ArgList::iterator parse(ArgList &list, ArgList::iterator begin)
Parse the next commandline parameter after the short form of the command has been found...
Definition: options.h:182
SingleOption< ExistingFile > ExistingFileOption
Commandline option with a mandatory argument naming a file which must exist.
Definition: options.h:298
SingleOptvalOption< String > OptvalStringOption
Definition: options.h:289
ArgList::iterator parse(ArgList &list, ArgList::iterator begin)
Parse the next commandline parameter after the short form of the command has been found...
Definition: options.h:251
T::value_type m_value
Definition: options.h:164
T::value_type value() const
Definition: options.h:279
bool m_isset
Definition: options.h:61
std::string stringValue() const
Definition: options.h:154
SingleOptvalOption(const std::string &name)
Definition: options.h:231
void setValue(const typename T::value_type &a)
Definition: options.h:275
void parse_noarg()
Notify that the option is present in the command line, but has no arguments.
Definition: options.h:264
T::value_type m_value
Definition: options.h:228
static int toInt(const value_type &val)
Definition: options.cpp:26
int value_type
Definition: options.h:26
Exception thrown when some consistency check fails.
Definition: exception.h:254
std::vector< char > shortNames
Definition: options.h:120
std::string value_type
Definition: options.h:48
ArgList::iterator parse(ArgList &list, ArgList::iterator begin)
Parse the next commandline parameter after the short form of the command has been found...
Definition: options.h:327
void parse_noarg()
Notify that the option is present in the command line, but has no arguments.
Definition: options.h:197
std::string value_type
Definition: options.h:37
static std::string init_val
Definition: options.h:43
void usage(ostream &out, const string &argv0)
Definition: commandline-demo.cpp:75
virtual ~Option()
Definition: options.h:108
ListIterator< List > begin(List l)
Definition: list.h:420
VectorOption(const std::string &name, char shortName, const std::string &longName, const std::string &usage=std::string(), const std::string &description=std::string())
Definition: options.h:316
SingleOptvalOption(const std::string &name, char shortName, const std::string &longName, const std::string &usage=std::string(), const std::string &description=std::string())
Definition: options.h:236
bool boolValue() const
Definition: options.h:210
std::string usage
Definition: options.h:123
Definition: options.h:161
T::value_type value() const
Definition: options.h:207
BoolOption(const std::string &name, char shortName, const std::string &longName, const std::string &usage=std::string(), const std::string &description=std::string())
Definition: options.h:141
Parse commandline options.
Definition: engine.h:38
Interface for a parser for one commandline option.
Definition: options.h:55
SingleOption< String > StringOption
Definition: options.h:286
static bool toBool(const value_type &val)
Definition: options.cpp:25
SingleOption(const std::string &name, char shortName, const std::string &longName, const std::string &usage=std::string(), const std::string &description=std::string())
Definition: options.h:171
SingleOptvalOption< Int > OptvalIntOption
Definition: options.h:295
virtual ArgList::iterator parse(ArgList &, ArgList::iterator begin)
Parse the next commandline parameter after the short form of the command has been found...
Definition: options.h:148
bool parse(const std::string ¶m)
Parse the commandline parameter of a long commandline switch.
Definition: options.h:336
Boolean option.
Definition: options.h:134
Keep track of various wibble::commandline components, and deallocate them at object destruction...
Definition: core.h:62
bool m_hasval
Definition: options.h:229
BoolOption(const std::string &name)
Definition: options.h:139
std::string description
Definition: options.h:372
virtual bool parse(const std::string &)
Parse the commandline parameter of a long commandline switch.
Definition: options.h:149
static bool parse(const std::string &val)
Definition: options.cpp:17
static bool init_val
Definition: options.h:21
iterator & eraseAndAdvance(iterator &i)
Definition: core.h:34
bool parse(const std::string ¶m)
Parse the commandline parameter of a long commandline switch.
Definition: options.h:257
Group related commandline options.
Definition: options.h:359
bool hasValue() const
Definition: options.h:273
bool boolValue() const
Definition: options.h:153
bool parse(const std::string ¶m)
Parse the commandline parameter of a long commandline switch.
Definition: options.h:191
std::string stringValue() const
Definition: options.h:212
Definition: options.h:306
Single option whose value can be or not be specified.
Definition: options.h:225
bool boolValue() const
Definition: options.h:348
void addAlias(const std::string &str)
Definition: options.h:114
OptionGroup(MemoryManager *mman=0, const std::string &description=std::string())
Definition: options.h:364
const std::vector< typename T::value_type > & values() const
Definition: options.h:349
Option(const std::string &name, char shortName, const std::string &longName, const std::string &usage=std::string(), const std::string &description=std::string())
Definition: options.h:64
static std::string toString(const value_type &val)
Definition: options.cpp:27
std::vector< std::string > longNames
Definition: options.h:121
T * add(const std::string &name, char shortName, const std::string &longName, const std::string &usage=std::string(), const std::string &description=std::string())
Create a new option and add it to this group.
Definition: options.h:396
bool isSet() const
Definition: options.h:110
const std::string & name() const
Definition: options.h:111
bool hidden
Definition: options.h:375
bool hidden
Definition: options.h:127
SingleOption< Int > IntOption
Definition: options.h:292
Option(const std::string &name)
Definition: options.h:63
bool value_type
Definition: options.h:15
virtual void parse_noarg()
Notify that the option is present in the command line, but has no arguments.
Definition: options.h:150
T * create(const std::string &name, char shortName, const std::string &longName, const std::string &usage=std::string(), const std::string &description=std::string())
Create a new option.
Definition: options.h:381
SingleOptvalOption< ExistingFile > OptvalExistingFileOption
Commandline option with an optional argument naming a file which must exist.
Definition: options.h:301
void setValue(const typename T::value_type &a)
Definition: options.h:203
virtual bool arg_is_optional() const
Return true if the argument to this function can be omitted.
Definition: options.h:270
std::string description
Definition: options.h:124
SingleOption(const std::string &name)
Definition: options.h:166