diff options
| author | Egor Tensin <egor@tensin.name> | 2026-07-22 21:32:59 +0200 |
|---|---|---|
| committer | Egor Tensin <egor@tensin.name> | 2026-07-22 21:32:59 +0200 |
| commit | ff93a0a580416f73bc86c7a12c5637819ca146e6 (patch) | |
| tree | 071c758a6b7f883be32d57900395231781a8abb5 | |
| parent | rewrite: the beginning (diff) | |
| download | aes-tools-ff93a0a580416f73bc86c7a12c5637819ca146e6.tar.gz aes-tools-ff93a0a580416f73bc86c7a12c5637819ca146e6.zip | |
rewrite: sort out and modernize Boost.Program_Options usage
| -rw-r--r-- | aesxx/utils/helpers/cmd_parser.hpp | 15 | ||||
| -rw-r--r-- | aesxx/utils/helpers/cmd_parser_block.hpp | 22 | ||||
| -rw-r--r-- | aesxx/utils/helpers/cmd_parser_file.hpp | 30 | ||||
| -rw-r--r-- | aesxx/utils/helpers/data_parsers.hpp | 38 |
4 files changed, 38 insertions, 67 deletions
diff --git a/aesxx/utils/helpers/cmd_parser.hpp b/aesxx/utils/helpers/cmd_parser.hpp index 11146e8..cc8d00c 100644 --- a/aesxx/utils/helpers/cmd_parser.hpp +++ b/aesxx/utils/helpers/cmd_parser.hpp @@ -28,20 +28,17 @@ public: } virtual void parse(int argc, char* argv[]) { - boost::program_options::options_description all; + namespace po = boost::program_options; + po::options_description all; all.add(hidden).add(visible); - boost::program_options::variables_map vm; - boost::program_options::store( - boost::program_options::command_line_parser{argc, argv} - .options(all) - .positional(positional) - .run(), - vm + po::variables_map vm; + po::store( + po::command_line_parser{argc, argv}.options(all).positional(positional).run(), vm ); if (vm.count("help")) _exit_with_usage = true; else - boost::program_options::notify(vm); + po::notify(vm); } bool exit_with_usage() const { diff --git a/aesxx/utils/helpers/cmd_parser_block.hpp b/aesxx/utils/helpers/cmd_parser_block.hpp index 7e24874..b3412d0 100644 --- a/aesxx/utils/helpers/cmd_parser_block.hpp +++ b/aesxx/utils/helpers/cmd_parser_block.hpp @@ -50,20 +50,14 @@ public: }; explicit BlockSettings(std::string_view argv0) : SettingsParser{argv0} { + namespace po = boost::program_options; + + visible.add_options()("verbose,v", po::bool_switch(&_verbose), "enable verbose output"); visible.add_options()( - "verbose,v", boost::program_options::bool_switch(&_verbose), "enable verbose output" - ); - visible.add_options()( - "algorithm,a", - boost::program_options::value<aes::Algorithm>(&algorithm) - ->required() - ->value_name("NAME"), - "set algorithm" + "algorithm,a", po::value(&algorithm)->required()->value_name("NAME"), "set algorithm" ); visible.add_options()( - "mode,m", - boost::program_options::value<aes::Mode>(&mode)->required()->value_name("MODE"), - "set mode of operation" + "mode,m", po::value(&mode)->required()->value_name("MODE"), "set mode of operation" ); } @@ -74,11 +68,7 @@ public: void parse(int argc, char* argv[]) override { std::vector<std::string> args; - hidden.add_options()( - "args", - boost::program_options::value<std::vector<std::string>>(&args), - "shouldn't be visible" - ); + hidden.add_options()("args", boost::program_options::value(&args), "shouldn't be visible"); positional.add("args", -1); SettingsParser::parse(argc, argv); diff --git a/aesxx/utils/helpers/cmd_parser_file.hpp b/aesxx/utils/helpers/cmd_parser_file.hpp index 8adfb1d..d66c139 100644 --- a/aesxx/utils/helpers/cmd_parser_file.hpp +++ b/aesxx/utils/helpers/cmd_parser_file.hpp @@ -14,46 +14,32 @@ #include <boost/program_options.hpp> #include <optional> -#include <ostream> #include <string> #include <string_view> -#include <utility> class FileSettings : public SettingsParser { public: explicit FileSettings(std::string_view argv0) : SettingsParser{argv0} { + namespace po = boost::program_options; + visible.add_options()( - "algorithm,a", - boost::program_options::value<aes::Algorithm>(&algorithm) - ->required() - ->value_name("NAME"), - "set algorithm" + "algorithm,a", po::value(&algorithm)->required()->value_name("NAME"), "set algorithm" ); visible.add_options()( - "mode,m", - boost::program_options::value<aes::Mode>(&mode)->required()->value_name("MODE"), - "set mode of operation" + "mode,m", po::value(&mode)->required()->value_name("MODE"), "set mode of operation" ); visible.add_options()( - "key,k", - boost::program_options::value<std::string>(&key)->required()->value_name("KEY"), - "set encryption key" + "key,k", po::value(&key)->required()->value_name("KEY"), "set encryption key" ); visible.add_options()( - "iv,v", - boost::program_options::value(&iv)->value_name("BLOCK"), - "set initialization vector" + "iv,v", po::value(&iv)->value_name("BLOCK"), "set initialization vector" ); visible.add_options()( - "input,i", - boost::program_options::value<std::string>(&input_path)->required()->value_name("PATH"), - "set input file path" + "input,i", po::value(&input_path)->required()->value_name("PATH"), "set input file path" ); visible.add_options()( "output,o", - boost::program_options::value<std::string>(&output_path) - ->required() - ->value_name("PATH"), + po::value(&output_path)->required()->value_name("PATH"), "set output file path" ); } diff --git a/aesxx/utils/helpers/data_parsers.hpp b/aesxx/utils/helpers/data_parsers.hpp index a66a433..fc44f80 100644 --- a/aesxx/utils/helpers/data_parsers.hpp +++ b/aesxx/utils/helpers/data_parsers.hpp @@ -8,16 +8,20 @@ #include <aesxx/all.hpp> #include <boost/algorithm/string.hpp> -#include <boost/optional.hpp> +#include <boost/any.hpp> #include <boost/program_options.hpp> -#include <istream> #include <string> #include <unordered_map> +#include <vector> -inline std::istream& operator>>(std::istream& is, aes::Mode& dest) { - std::string src; - is >> src; +namespace boost { + +inline void validate(any& dest, const std::vector<std::string>& values, aes::Mode*, int) { + using namespace program_options; + + validators::check_first_occurrence(dest); + const auto& src = validators::get_single_string(values); static const std::unordered_map<std::string, aes::Mode> lookup_table = { {"ecb", AES_ECB}, @@ -27,18 +31,17 @@ inline std::istream& operator>>(std::istream& is, aes::Mode& dest) { {"ctr", AES_CTR}, }; - const auto it = lookup_table.find(boost::algorithm::to_lower_copy(src)); - + const auto it = lookup_table.find(algorithm::to_lower_copy(src)); if (it == lookup_table.cend()) - throw boost::program_options::invalid_option_value(src); - + throw invalid_option_value(src); dest = it->second; - return is; } -inline std::istream& operator>>(std::istream& is, aes::Algorithm& dest) { - std::string src; - is >> src; +inline void validate(any& dest, const std::vector<std::string>& values, aes::Algorithm*, int) { + using namespace program_options; + + validators::check_first_occurrence(dest); + const auto& src = validators::get_single_string(values); static const std::unordered_map<std::string, aes::Algorithm> lookup_table = { {"aes128", AES_AES128}, @@ -46,17 +49,12 @@ inline std::istream& operator>>(std::istream& is, aes::Algorithm& dest) { {"aes256", AES_AES256}, }; - const auto it = lookup_table.find(boost::algorithm::to_lower_copy(src)); - + const auto it = lookup_table.find(algorithm::to_lower_copy(src)); if (it == lookup_table.cend()) - throw boost::program_options::invalid_option_value(src); - + throw invalid_option_value(src); dest = it->second; - return is; } -namespace boost { - inline void validate(any& dest, const std::vector<std::string>& values, aes::Block*, int) { const std::string& src = program_options::validators::get_single_string(values); dest = aes::Block{src}; |
