Further Development!!

This commit is contained in:
2025-07-04 13:40:24 -04:00
parent 0badef2ccd
commit 0ac5d8bd4f
3 changed files with 118 additions and 27 deletions

View File

@@ -5,6 +5,8 @@ ArgsParser::ArgsParser(int argc, char **argv, bool keep_program_name) {
args = std::vector<std::string>(argv, argv+argc);
}
bool ArgsParser::empty() const { return args.empty();}
bool ArgsParser::has_next() const {
return !args.empty();
}
@@ -57,6 +59,8 @@ bool ArgsParser::has_flag_arg(const std::string &option) {
auto it = std::ranges::find(args, option);
return it!=args.end() && ++it!=args.end();
}
return false;
}
@@ -68,18 +72,35 @@ std::optional<std::string> ArgsParser::get_flag_arg(const std::string &option) {
}
std::optional<std::string> ArgsParser::consume_flag_arg(const std::string &flag) {
if (has_flag_arg(flag)) {
auto it = std::ranges::find(args, flag);
++it;
std::string ret_val = std::string(*it);
args.erase(std::remove(args.begin(), args.end(), flag), args.end());
args.erase(it);
return ret_val;
}
return std::nullopt;
}
std::tuple<bool, std::string> ArgsParser::consume_flag_arg(const std::initializer_list<std::string> &flags) {
std::optional<std::string> ArgsParser::consume_flag_arg(const std::initializer_list<std::string> &flags) {
for (auto& flag : flags) {
if (has_flag_arg(flag))
return consume_flag_arg(flag);
}
}
std::vector<std::string> ArgsParser::get_remaining_args() const {
return args;
}
bool ArgsParser::has_flag_contains(const std::string &match) {
std::vector<std::string> ArgsParser::get_unmatched() const { return get_remaining_args(); }
bool ArgsParser::has_flag_contains(const std::string &match) const {
for (auto& token : args) {
if (token.find(match) != std::string::npos)
return true;
@@ -104,3 +125,34 @@ std::string ArgsParser::get_flag_starts_with(const std::string &prefix) const {
}
}
std::vector<std::string> ArgsParser::consume_flag_arg_multiple(const std::string &flag) {
std::vector<std::string> ret_val;
for (auto it = args.begin(); it != args.end();) {
if (*it == flag) {
if (it != args.end()) {
ret_val.push_back(*std::next(it, 1).base());
it = args.erase(it);
it = args.erase(it);
//args.erase(it);
}
} else
++it;
//++it;
}
return ret_val;
}
std::vector<std::string> ArgsParser::consume_flag_arg_multiple(const std::initializer_list<std::string> &flag_aliases) {
std::vector<std::string> ret_val;
for (auto& flag : flag_aliases) {
std::vector<std::string> pass = consume_flag_arg_multiple(flag);
for (auto& val : pass) {
ret_val.push_back(val);
}
}
return ret_val;
}