From fc7eec4af8c35012effdb62992adc9b49b869c28 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Wed, 2 Sep 2026 04:19:08 +0000 Subject: better option sys --- src/util/option_parse.cc | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/util/option_parse.cc (limited to 'src/util/option_parse.cc') diff --git a/src/util/option_parse.cc b/src/util/option_parse.cc new file mode 100644 index 0000000..f9185fb --- /dev/null +++ b/src/util/option_parse.cc @@ -0,0 +1,52 @@ +#include "util/option_parse.h" + +#include +#include +#include +#include +#include +#include + +#include "all.h" + +using namespace std; + +const char option_key_value_split = '='; +constexpr char option_prefix = '-'; + +namespace ov4 +{ + +void exe_option(char **c_argv) +{ + vector argv; + argv2string(&argv, c_argv); + + for (auto c : argv) + { + pair key_value = option_split(c); + if (key_value.first != "") + { + if (option_list.find(key_value.first) == option_list.end()) + { + cerr << key_value.first << ": option not fund" << endl; + continue; + } + option_list.at(key_value.first)(key_value.second); + } + } +} + +pair option_split(string s) +{ + if (s.size() == 0) return make_pair("", ""); + if (s[0] != option_prefix) return make_pair("", ""); + size_t pos = s.find(option_key_value_split); + if (pos == string::npos) return make_pair(s, ""); + if (pos == s.size()+1) return make_pair(s.substr(0, pos), ""); + string key = s.substr(0, pos); + string value = s.substr(pos+1); + return make_pair(key, value); +} + +} -- cgit v1.3.1-4-g156e