ROSE 0.11.145.147
CommandLineBoost.h
1// WARNING: Changes to this file must be contributed back to Sawyer or else they will
2// be clobbered by the next update from Sawyer. The Sawyer repository is at
3// https://gitlab.com/charger7534/sawyer.git.
4
5
6
7
8#ifndef Sawyer_CommandLine_Boost_H
9#define Sawyer_CommandLine_Boost_H
10
11#include <Sawyer/CommandLine.h>
12#include <Sawyer/Sawyer.h>
13
14namespace Sawyer {
15namespace CommandLine {
16
27namespace Boost {
28
36template<class T>
37struct value {};
38
46
49
51 explicit options_description(const std::string &title): sg(title) {}
52
61 options_description& operator()(const std::string &switchName, const value<std::string>&, const std::string &doc);
62 options_description& operator()(const std::string &switchName, const value<int>&, const std::string &doc);
63 options_description& operator()(const std::string &switchName, const value<long int>&, const std::string &doc);
64 options_description& operator()(const std::string &switchName, const value<std::vector<int> >&, const std::string &doc);
65 options_description& operator()(const std::string &switchName, const value< std::vector<std::string> >&,
66 const std::string &doc);
67 options_description& operator()(const std::string &switchName, const std::string &doc);
75 return *this;
76 }
77
85
91 void print() const;
92};
93
95std::ostream& operator<<(std::ostream &out, const options_description &x);
96
132
137struct parsed_values { // not a boost::program_options type
142
145
149 template<class T>
150 T as() {
151 return as_helper(T());
152 }
153
154private:
155 template<class T>
156 T as_helper(const T&) {
157 ASSERT_forbid(pv.empty());
158 return pv.back().as<T>();
159 }
160
161 template<class T>
162 std::vector<T> as_helper(const std::vector<T>&) {
163 std::vector<T> retval;
164 BOOST_FOREACH (const Sawyer::CommandLine::ParsedValue &v, pv) {
166 BOOST_FOREACH (const Sawyer::CommandLine::ParsedValue &elmt, elmts)
167 retval.push_back(elmt.as<T>());
168 }
169 return retval;
170 }
173};
174
180 size_t count(const std::string &swName) const;
181
183 parsed_values operator[](const std::string &swName) const;
184};
185
188
195
196} // namespace
197
198} // namespace
199} // namespace
200
201#endif
std::list< ParsedValue > ValueList
Value type for list ParsedValue.
Information about a parsed switch value.
T as() const
Convenient any_cast.
The result from parsing a command line.
const ParserResult & apply() const
Saves parsed values in switch-specified locations.
The parser for a program command line.
ParserResult parse(int argc, char *argv[])
Parse program arguments.
Parser & errorStream(const Message::SProxy &stream)
Specifies a message stream to which errors are sent.
A collection of related switch declarations.
void store(const Sawyer::CommandLine::ParserResult &results, variables_map &output)
Transfer parser results to map.
std::ostream & operator<<(std::ostream &out, const options_description &x)
Print documentation for a few switches.
void notify(variables_map &)
Transfer map to C++ variables.
std::vector< ParsedValue > ParsedValues
A vector of parsed values.
Facility mlog
Facility used by Sawyer components.
@ FATAL
Messages that indicate an abnormal situation from which the program was unable to recover.
Definition Message.h:332
Sawyer support library.
This namespace contains template functions that operate on the ROSE AST.
Definition sageGeneric.h:38
Wrapper around Sawyer's CommandLine class.
char ** argv
Arguments saved by c'tor to be available during parsing.
Sawyer::CommandLine::Parser parser
Wrapped parser.
command_line_parser & options(const options_description &)
Insert specified switch declarations.
Sawyer::CommandLine::ParserResult run()
Parse command-line.
command_line_parser & options(const Sawyer::CommandLine::SwitchGroup &)
Insert specified switch declarations.
command_line_parser & allow_unregistered()
Add predefined switches.
int argc
Argument count saved by c'tor to be available during parsing.
command_line_parser(int argc, char *argv[])
Construct a parser.
Replacement for basic use of boost::program_options::options_description.
options_description & operator()(const std::string &switchName, const value< std::string > &, const std::string &doc)
Declare a switch of specified type.
options_description & operator()(const std::string &switchName, const value< std::vector< int > > &, const std::string &doc)
Declare a switch of specified type.
options_description & operator()(const std::string &switchName, const value< std::vector< std::string > > &, const std::string &doc)
Declare a switch of specified type.
options_description & add(const options_description &other)
Insert other switches into this group.
options_description & operator()(const std::string &switchName, const std::string &doc)
Declare a switch of specified type.
void print() const
Print switch documentation.
options_description()
Construct an empty switch group without documentation.
options_description & operator()(const std::string &switchName, const value< long int > &, const std::string &doc)
Declare a switch of specified type.
options_description(const std::string &title)
Construct an empty switch group having a title.
options_description & operator()(const std::string &switchName, const value< int > &, const std::string &doc)
Declare a switch of specified type.
Sawyer::CommandLine::SwitchGroup sg
The underlying Sawyer mechanism.
options_description & add_options()
Boost intermediate type for adding more switches.
parsed_values(const Sawyer::CommandLine::ParsedValues &pv)
Wrap ParsedValues.
T as()
Convert parsed value to another type.
Sawyer::CommandLine::ParsedValues pv
Wrapped ParsedValues.
Replacement for basic use of boost::program_options::value.
parsed_values operator[](const std::string &swName) const
Saved values for a switch.
size_t count(const std::string &swName) const
Number of times a switch appeared.
Sawyer::CommandLine::ParserResult pr
Wrapped ParserResult.