Code forensics
0.1
Generate historical information about code changes
|
Go to the documentation of this file. 1 #ifndef CLI_OPTIONS_HPP
2 #define CLI_OPTIONS_HPP
6 #include <boost/program_options.hpp>
7 #include <boost/describe.hpp>
8 #include <boost/describe/enum_to_string.hpp>
9 #include <boost/describe/enum_from_string.hpp>
10 #include <boost/describe/operators.hpp>
11 #include <boost/function.hpp>
12 #include <boost/bind.hpp>
13 #include <boost/lambda/lambda.hpp>
14 #include <boost/unordered_map.hpp>
28 boost::reference_wrapper<T> a,
29 boost::reference_wrapper<T> b)
const {
30 return a.get() == b.get();
38 boost::reference_wrapper<std::type_info const>,
39 boost::function<void(boost::any&)>,
47 return boost::any_cast<T>(any);
54 fs.insert(std::make_pair(
55 boost::ref(
typeid(T)),
57 f, boost::bind(any_cast_f<T>, boost::lambda::_1))));
58 }
catch (boost::bad_any_cast& e) {
59 std::cout << e.what() << std::endl;
67 auto it =
fs.find(boost::ref(x.type()));
77 namespace po = boost::program_options;
80 template <IsDescribedEnum E>
85 inline E
get() const noexcept {
return value; }
102 CR<std::type_info> S,
103 CR<std::type_info> T,
106 inline const char*
what() const noexcept
override {
109 return strdup((
msg).c_str());
112 template <
typename S,
typename T>
132 inline const char*
what() const noexcept
override {
134 (Str{po::validation_error::what()} +
": " +
msg).c_str());
140 template <IsDescribedEnum E>
143 if (bd::enum_from_string<E>(in.c_str(), result)) {
146 throw ::bad_lexical_cast::init<Str, E>(
147 std::string(
"Invalid enumerator name '") + in +
148 "' for enum type '" +
typeid(E).name() +
"'");
153 template <IsDescribedEnum E>
155 return Str{bd::enum_to_string<E>(in)};
160 template <
typename E>
176 operator bool()
const {
return state; }
184 template <IsDescribedEnum E>
188 }
catch (CR<boost::bad_lexical_cast> err) {
189 throw validation_error(err.what());
193 po::variables_map
parse_cmdline(
int argc,
const char** argv);
197 CR<any_visitor> visitor,
199 const po::variables_map vm);
201 #endif // CLI_OPTIONS_HPP
const char * what() const noexcept override
Definition: cli_options.hpp:106
Compare reference wrappers for equality.
Definition: cli_options.hpp:25
enum
Definition: cli_options.hpp:81
boost::unordered_map< boost::reference_wrapper< std::type_info const >, boost::function< void(boost::any &)>, type_info_hash, equal_ref > fs
Definition: cli_options.hpp:42
EnumOption(E in)
Definition: cli_options.hpp:83
bool state
Definition: cli_options.hpp:179
Definition: cli_options.cpp:7
po::variables_map parse_cmdline(int argc, const char **argv)
Definition: cli_options.cpp:116
bool operator()(boost::reference_wrapper< T > a, boost::reference_wrapper< T > b) const
Definition: cli_options.hpp:27
Str msg
Stored user message.
Definition: cli_options.hpp:123
BOOST_DESCRIBE_CLASS(EnumOption,(),(value),(),())
BoolOption(bool initialState=false)
Definition: cli_options.hpp:170
void print_variables_map(CR< any_visitor > visitor, std::ostream &out, const po::variables_map vm)
Definition: cli_options.cpp:32
validation_error(Str _msg)
create validation error with 'invalid option' state
Definition: cli_options.hpp:127
static bad_lexical_cast init(CR< Str > msg)
Definition: cli_options.hpp:113
void validate(boost::any &v, CR< Vec< Str >> xs, EnumOption< E > *opt, long)
unparse input enum option into the stored value
Definition: cli_options.hpp:161
bool operator()(boost::any &x) const
try to call any of the stored oeprators with provided
Definition: cli_options.hpp:66
const char * what() const noexcept override
get error message description, returning baseline one concatenated with the user-provdede elaboration
Definition: cli_options.hpp:132
bad_lexical_cast(CR< std::type_info > S, CR< std::type_info > T, CR< Str > _msg)
Definition: cli_options.hpp:101
void insert_visitor(boost::function< void(T)> f)
add visitor for the specified mapping
Definition: cli_options.hpp:52
static T any_cast_f(boost::any &any)
Convert 'any' value to specified type.
Definition: cli_options.hpp:46
boost::any visitor helper
Definition: cli_options.hpp:36
E value
Definition: cli_options.hpp:88
std::size_t operator()(std::type_info const &t) const
Definition: cli_options.hpp:19
E lexical_cast(CR< Str > in)
lexical cast overload for 'described' enums
Definition: cli_options.hpp:141
specify boolean true/false flags on the boost command line
Definition: cli_options.hpp:164
Main code analysis state and configuration classes.
E get() const noexcept
Definition: cli_options.hpp:85
bool getState() const
Definition: cli_options.hpp:171
void switchState()
toggle stored state
Definition: cli_options.hpp:173
Str msg
Definition: cli_options.hpp:98
Has typeinfo information for type-implementation mapping.
Definition: cli_options.hpp:18