From 98861b74bbe2c68e09347c9277601d752572e263 Mon Sep 17 00:00:00 2001 From: bergmann Date: Wed, 8 May 2019 01:07:27 +0200 Subject: [PATCH] * implemented simple parser (to store parameters in simple variables or to invoke a callback) * implemented member parser (to store parameters in suitable configuration objects) --- include/cppargs.h | 7 +- include/cppargs/group.h | 9 + include/cppargs/group/group.h | 68 +++++++ include/cppargs/group/group.inl | 58 ++++++ include/cppargs/group/member_group.h | 102 +++++++++++ include/cppargs/group/member_group.inl | 53 ++++++ include/cppargs/group/simple_group.h | 28 +++ include/cppargs/group/simple_group.inl | 15 ++ include/cppargs/misc.h | 7 + include/cppargs/misc/context.h | 34 ++++ include/cppargs/misc/context.inl | 56 ++++++ include/cppargs/misc/misc.h | 44 +++++ include/cppargs/misc/option_parser.h | 17 ++ include/cppargs/misc/option_parser.inl | 167 ++++++++++++++++++ include/cppargs/option.h | 161 ----------------- include/cppargs/option.inl | 33 ---- include/cppargs/options.h | 6 + include/cppargs/options/member.h | 7 + .../cppargs/options/member/member_option.h | 40 +++++ .../cppargs/options/member/member_option.inl | 19 ++ .../options/member/member_predicate_option.h | 41 +++++ .../member/member_predicate_option.inl | 21 +++ include/cppargs/options/option.h | 52 ++++++ include/cppargs/options/option.inl | 12 ++ include/cppargs/options/simple.h | 6 + .../cppargs/options/simple/simple_option.h | 14 ++ .../options/simple/simple_predicate_option.h | 42 +++++ .../simple/simple_predicate_option.inl | 21 +++ include/cppargs/parser.h | 99 +---------- include/cppargs/parser/member_parser.h | 100 +++++++++++ include/cppargs/parser/member_parser.inl | 66 +++++++ include/cppargs/parser/parser.h | 70 ++++++++ include/cppargs/parser/parser.inl | 95 ++++++++++ include/cppargs/parser/simple_parser.h | 78 ++++++++ include/cppargs/parser/simple_parser.inl | 51 ++++++ src/CMakeLists.txt | 4 + test/cppargs.cpp | 22 --- test/cppargs/member_parser.cpp | 81 +++++++++ test/cppargs/simple_parser.cpp | 103 +++++++++++ 39 files changed, 1596 insertions(+), 313 deletions(-) create mode 100644 include/cppargs/group.h create mode 100644 include/cppargs/group/group.h create mode 100644 include/cppargs/group/group.inl create mode 100644 include/cppargs/group/member_group.h create mode 100644 include/cppargs/group/member_group.inl create mode 100644 include/cppargs/group/simple_group.h create mode 100644 include/cppargs/group/simple_group.inl create mode 100644 include/cppargs/misc.h create mode 100644 include/cppargs/misc/context.h create mode 100644 include/cppargs/misc/context.inl create mode 100644 include/cppargs/misc/misc.h create mode 100644 include/cppargs/misc/option_parser.h create mode 100644 include/cppargs/misc/option_parser.inl delete mode 100644 include/cppargs/option.h delete mode 100644 include/cppargs/option.inl create mode 100644 include/cppargs/options.h create mode 100644 include/cppargs/options/member.h create mode 100644 include/cppargs/options/member/member_option.h create mode 100644 include/cppargs/options/member/member_option.inl create mode 100644 include/cppargs/options/member/member_predicate_option.h create mode 100644 include/cppargs/options/member/member_predicate_option.inl create mode 100644 include/cppargs/options/option.h create mode 100644 include/cppargs/options/option.inl create mode 100644 include/cppargs/options/simple.h create mode 100644 include/cppargs/options/simple/simple_option.h create mode 100644 include/cppargs/options/simple/simple_predicate_option.h create mode 100644 include/cppargs/options/simple/simple_predicate_option.inl create mode 100644 include/cppargs/parser/member_parser.h create mode 100644 include/cppargs/parser/member_parser.inl create mode 100644 include/cppargs/parser/parser.h create mode 100644 include/cppargs/parser/parser.inl create mode 100644 include/cppargs/parser/simple_parser.h create mode 100644 include/cppargs/parser/simple_parser.inl delete mode 100644 test/cppargs.cpp create mode 100644 test/cppargs/member_parser.cpp create mode 100644 test/cppargs/simple_parser.cpp diff --git a/include/cppargs.h b/include/cppargs.h index c3c2448..c487dca 100644 --- a/include/cppargs.h +++ b/include/cppargs.h @@ -1,6 +1,5 @@ #pragma once -#include "cppargs/option.h" -#include "cppargs/parser.h" - -#include "cppargs/option.inl" +#include +#include +#include diff --git a/include/cppargs/group.h b/include/cppargs/group.h new file mode 100644 index 0000000..7d34be5 --- /dev/null +++ b/include/cppargs/group.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include diff --git a/include/cppargs/group/group.h b/include/cppargs/group/group.h new file mode 100644 index 0000000..aecb45b --- /dev/null +++ b/include/cppargs/group/group.h @@ -0,0 +1,68 @@ +#pragma once + +#include +#include +#include + +namespace cppargs +{ + + /** + * @brief Struct to collect group meta data. + */ + struct group_meta + { + const std::string name { "" }; //!< Name of the group. + const std::string description { "" }; //!< Description of the group. + }; + + /** + * @brief Struct to manage options and subgroups. + */ + struct group + { + public: + using option_type = option; + using option_ptr_type = std::unique_ptr; + using option_vector_type = std::vector; + + using group_type = group; + using group_ptr_type = std::unique_ptr; + using group_vector_type = std::vector; + + public: + friend struct parser; + + const group_meta meta; + + protected: + option_vector_type _options; + group_vector_type _groups; + + private: + inline group(const group&) = delete; + + public: + /** + * @brief Constructor. + * + * @param[in] p_meta Meta data of the group. + * @param[in] p_args Sub groups and options. + */ + template + inline group( + const group_meta& p_meta, + T_args&&... p_args); + + /** + * @brief Move constructor. + */ + inline group(group&&) = default; + + /** + * @brief Destructor. + */ + virtual ~group() = default; + }; + +} diff --git a/include/cppargs/group/group.inl b/include/cppargs/group/group.inl new file mode 100644 index 0000000..bb145aa --- /dev/null +++ b/include/cppargs/group/group.inl @@ -0,0 +1,58 @@ +#pragma once + +#include + +#include "group.h" + +namespace cppargs +{ + + template + struct group_init; + + template + struct group_init< + std::unique_ptr, + utl::mp::enable_if>> + { + using option_ptr_type = std::unique_ptr