22 #ifndef PROGRAM_OPTIONS_PROGRAM_OPTIONS_H_INCLUDED
23 #define PROGRAM_OPTIONS_PROGRAM_OPTIONS_H_INCLUDED
33 namespace ProgramOptions {
55 Option(
const std::string& longName,
char shortName,
60 const std::string&
name()
const {
return name_; }
70 const char* description_;
100 const std::string&
caption()
const {
return caption_; }
102 std::size_t
size()
const {
return options_.size(); }
103 bool empty()
const {
return options_.empty(); }
124 void addOption(std::auto_ptr<Option> option);
134 std::string caption_;
169 typedef std::size_t key_type;
170 typedef std::map<std::string, key_type> Name2Key;
171 typedef std::vector<OptionGroup> GroupList;
172 typedef Name2Key::const_iterator index_iterator;
173 typedef std::pair<index_iterator, index_iterator> PrefixRange;
183 const std::string&
caption()
const;
216 std::size_t
size()
const {
return options_.size(); }
218 std::size_t
groups()
const {
return groups_.size(); }
261 std::string
defaults(std::size_t prefixSize = 0)
const;
272 void insertOption(
size_t groupId,
const SharedOptPtr& o);
273 size_t findGroupKey(
const std::string& name)
const;
278 std::string caption_;
290 bool empty()
const {
return parsed_.empty(); }
291 std::size_t
size()
const {
return parsed_.size(); }
292 std::size_t
count(
const std::string& name)
const {
return parsed_.count(name); }
293 void add(
const std::string& name) { parsed_.insert(name); }
309 std::set<std::string> parsed_;
319 typedef std::vector<OptionAndValue>
Values;
331 void add(
const std::string& opt,
const std::string& value);
366 virtual void doParse() = 0;
376 std::size_t
format(std::vector<char>& buffer,
const Option& o, std::size_t maxW);
382 std::size_t
format(std::vector<char>& buffer,
const char* desc,
const Value&, std::size_t maxW);
396 template <
class Writer,
class Formatter = DefaultFormat>
401 , formatter_(form) { }
403 writer_.write(buffer_, formatter_.format(buffer_, ctx));
407 writer_.write(buffer_, formatter_.format(buffer_, group));
411 writer_.write(buffer_, formatter_.format(buffer_, opt, maxW));
412 writer_.write(buffer_, formatter_.format(buffer_, opt.
description(), *opt.
value(), maxW));
416 std::vector<char> buffer_;
418 Formatter formatter_;
423 void write(
const std::vector<char>& buf, std::size_t
num);
430 void write(
const std::vector<char>& buf, std::size_t
num);
437 void write(
const std::vector<char>& buf, std::size_t
num);
452 typedef bool (*
PosOption)(
const std::string&, std::string&);
473 ParsedValues
parseCommandLine(
int& argc,
char** argv,
const OptionContext& ctx,
474 bool allowUnregistered =
true,
507 ParsedValues
parseCfgFile(std::istream& is,
const OptionContext& o,
bool allowUnregistered);
DescriptionLevel getActiveDescLevel() const
Definition: program_options.h:255
Definition: program_options.h:455
OptionList::const_iterator option_iterator
Type for identifying an option within a context.
Definition: program_options.h:177
virtual void addValue(const SharedOptPtr &key, const std::string &value)=0
Definition: program_options.h:344
OptionOutputImpl< StringWriter > StringOut
Definition: program_options.h:441
iterator end() const
Definition: program_options.h:337
virtual ~ParseContext()
Definition: program_options.cpp:575
iterator begin() const
Definition: program_options.h:336
std::size_t size() const
Definition: program_options.h:102
DescriptionLevel
Definition: value.h:38
char alias() const
Definition: program_options.h:61
bool printGroup(const OptionGroup &group)
Definition: program_options.h:406
void add(const SharedOptPtr &opt, const std::string &value)
Definition: program_options.h:332
FILE * out
Definition: program_options.h:438
Definition: refcountable.h:37
~Option()
Definition: program_options.cpp:195
virtual SharedOptPtr getOption(const char *name, FindType ft)=0
OptionOutputImpl< OstreamWriter > StreamOut
Definition: program_options.h:440
Definition: program_options.h:220
const char * argName() const
Definition: program_options.h:64
std::size_t groups() const
Returns the number of groups in this context.
Definition: program_options.h:218
Definition: program_options.h:220
const std::string & caption() const
Returns the caption of this group.
Definition: program_options.h:100
const std::string & name() const
Definition: program_options.h:60
Set of options holding a parsed value.
Definition: program_options.h:286
OptionContext::FindType FindType
Definition: program_options.h:356
A (logically grouped) list of unique options.
Definition: program_options.h:167
FindType
Definition: program_options.h:220
option_iterator begin() const
Definition: program_options.h:212
bool assignDefault() const
Definition: program_options.cpp:219
OptionContext & addAlias(const std::string &aliasName, option_iterator option)
Adds an alias name for the given option.
Definition: program_options.cpp:339
Writes formatted option descriptions to an std::string.
Definition: program_options.h:428
void setActiveDescLevel(DescriptionLevel level)
Sets the description level to be used when generating description.
Definition: program_options.cpp:315
PrefixRange OptionRange
Definition: program_options.h:178
std::vector< OptionAndValue > Values
Definition: program_options.h:319
ParsedValues parseCommandString(const std::string &cmd, const OptionContext &ctx, bool allowUnreg=false, PosOption posParser=0, unsigned flags=command_line_allow_flag_value)
Definition: program_options.cpp:875
Manages the value of an option and defines how it is parsed from a string.
Definition: value.h:53
const OptionGroup & findGroup(const std::string &caption) const
Definition: program_options.cpp:347
auto f
Definition: statements.cc:122
const OptionGroup * tryFindGroup(const std::string &caption) const
Definition: program_options.cpp:352
option_iterator end() const
Definition: program_options.h:213
ParsedValues parseCommandLine(int &argc, char **argv, const OptionContext &ctx, bool allowUnregistered=true, PosOption posParser=0, unsigned flags=0)
Definition: program_options.cpp:858
OptionList::const_iterator option_iterator
Definition: program_options.h:91
OptionContext(const std::string &caption="", DescriptionLevel desc_default=desc_level_default)
Definition: program_options.cpp:306
StringWriter(std::string &str)
Definition: program_options.h:429
void add(const std::string &opt, const std::string &value)
Adds a value for option opt.
Definition: program_options.cpp:555
const OptionContext * ctx
Definition: program_options.h:328
OptionInitHelper & operator()(const char *key, Value *val, const char *desc)
Factory function for creating an option.
Definition: program_options.cpp:263
Definition: program_options.h:139
OptionOutput()
Definition: program_options.h:388
Implementation class for printing options.
Definition: program_options.h:397
OptionGroup(const std::string &caption="", DescriptionLevel descLevel=desc_level_default)
Definition: program_options.cpp:228
const char * arg() const
Returns the name of this value.
Definition: program_options.cpp:134
std::unique_ptr< ValTerm > val(Value v)
Definition: term_helper.hh:31
ParseContext & ctx() const
Definition: program_options.h:361
bool assignDefaults(const ParsedOptions &exclude) const
Assigns any default values to all options not in exclude.
Definition: program_options.cpp:482
Writes formatted option descriptions to an std::ostream.
Definition: program_options.h:421
void write(const std::vector< char > &buf, std::size_t num)
Definition: program_options.cpp:111
OstreamWriter(std::ostream &os)
Definition: program_options.h:422
std::size_t size() const
Returns the number of options in this context.
Definition: program_options.h:216
option_iterator begin() const
Definition: program_options.h:104
void format(OptionOutput &out, size_t maxW, DescriptionLevel level=desc_level_default) const
Creates a formated description of all options with level() <= level in this group.
Definition: program_options.cpp:250
OptionInitHelper addOptions()
Returns an object that can be used to add options.
Definition: program_options.cpp:231
Represents one program option.
Definition: program_options.h:45
Option(const std::string &longName, char shortName, const char *description, Value *value)
Definition: program_options.cpp:186
DescriptionLevel descLevel() const
Definition: program_options.h:106
void addOptionValue(const SharedOptPtr &key, const std::string &value)
Definition: program_options.h:364
Value * level(DescriptionLevel lev)
Sets a description level for the corresponding option.
Definition: value.h:96
void write(const std::vector< char > &buf, std::size_t num)
Definition: program_options.cpp:114
void add(const std::string &name)
Definition: program_options.h:293
std::size_t size() const
Definition: program_options.h:291
bool assign(const ParsedValues &p, const ParsedOptions *exclude=0)
Assigns the parsed values in p to their options.
Definition: program_options.cpp:496
std::vector< SharedOptPtr > OptionList
Definition: program_options.h:90
friend std::ostream & operator<<(std::ostream &os, const OptionContext &ctx)
Writes a formatted description of options in this context to os.
Definition: program_options.cpp:476
OptionContext::FindType FindType
Definition: program_options.h:346
Definition: program_options.h:316
virtual bool printGroup(const OptionGroup &group)=0
std::pair< SharedOptPtr, std::string > OptionAndValue
Definition: program_options.h:318
Writes formatted option descriptions to a FILE.
Definition: program_options.h:435
OptionContext & add(const OptionGroup &group)
Adds the given group of options to this context.
Definition: program_options.cpp:325
DescriptionLevel descLevel() const
Definition: program_options.h:67
bool printOption(const Option &opt, std::size_t maxW)
Definition: program_options.h:410
void setDescriptionLevel(DescriptionLevel level)
Definition: program_options.h:126
const char * description() const
Definition: program_options.h:63
option_iterator find(const char *key, FindType t=find_name) const
Returns the option with the given key.
Definition: program_options.cpp:384
OptionParser(ParseContext &ctx)
Definition: program_options.cpp:564
ParseContext & parse()
Definition: program_options.cpp:571
unsigned num
Definition: dependency.cc:114
option_iterator tryFind(const char *key, FindType t=find_name) const
Definition: program_options.cpp:388
Values::const_iterator iterator
Definition: program_options.h:320
Value * value() const
Definition: program_options.h:62
Definition: program_options.h:220
OptionOutputImpl< FileWriter > FileOut
Definition: program_options.h:442
tuple p
Definition: server.py:49
OptionOutputImpl(const Writer &w=Writer(), const Formatter &form=Formatter())
Definition: program_options.h:399
StringSet str
Definition: dependency.cc:92
bool empty() const
Definition: program_options.h:290
std::size_t maxColumn() const
Definition: program_options.cpp:198
Base class for options parsers.
Definition: program_options.h:354
void write(const std::vector< char > &buf, std::size_t num)
Definition: program_options.cpp:108
ParsedValues(const OptionContext &a_ctx)
Definition: program_options.h:325
Value * alias(char c)
Sets an alias name for the corresponding option.
Definition: value.h:89
const std::string & caption() const
Definition: program_options.cpp:312
ParsedOptions()
Definition: program_options.cpp:494
virtual ~OptionOutput()
Definition: program_options.h:389
Definition: refcountable.h:26
bool printContext(const OptionContext &ctx)
Definition: program_options.h:402
void addOption(std::auto_ptr< Option > option)
Adds option to this group.
Definition: program_options.cpp:235
OptionOutput & description(OptionOutput &out) const
Writes a formatted description of options in this context.
Definition: program_options.cpp:426
unsigned flags
Definition: program_options.cpp:588
CommandLineFlags
Definition: program_options.h:454
std::ostream & out
Definition: program_options.h:424
~OptionGroup()
Definition: program_options.cpp:229
ParsedValues parseCfgFile(std::istream &is, const OptionContext &o, bool allowUnregistered)
Definition: program_options.cpp:880
~OptionContext()
Definition: program_options.cpp:310
Definition: program_options.h:220
Base class for printing options.
Definition: program_options.h:386
std::size_t maxColumn(DescriptionLevel level) const
Definition: program_options.cpp:240
std::string defaults(std::size_t prefixSize=0) const
Returns the default command-line of this context.
Definition: program_options.cpp:446
std::string & out
Definition: program_options.h:431
option_iterator end() const
Definition: program_options.h:105
bool(* PosOption)(const std::string &, std::string &)
Definition: program_options.h:452
bool empty() const
Definition: program_options.h:103
SharedOptPtr getOption(int posKey, const char *tok) const
Definition: program_options.h:363
SharedOptPtr getOption(const char *name, FindType ft) const
Definition: program_options.h:362
detail::IntrusiveSharedPtr< Option > SharedOptPtr
Definition: program_options.h:74
A list of options logically grouped under a caption.
Definition: program_options.h:88
std::size_t count(const std::string &name) const
Definition: program_options.h:292
void clear()
Definition: program_options.h:339
~ParsedOptions()
Definition: program_options.cpp:495
LparseOutputter & out
Definition: output.cc:685
virtual bool printOption(const Option &opt, std::size_t maxW)=0
OptionRange findImpl(const char *key, FindType t, unsigned eMask=unsigned(-1)) const
Definition: program_options.h:243
OptionInitHelper(OptionGroup &owner)
Definition: program_options.cpp:260
FileWriter(FILE *f)
Definition: program_options.h:436
unsigned eMask
Definition: program_options.cpp:853
virtual bool printContext(const OptionContext &ctx)=0
virtual ~OptionParser()
Definition: program_options.cpp:568