parse names
parent
620a16574d
commit
e702a651df
|
@ -131,15 +131,9 @@ namespace blt::parser {
|
||||||
inline const std::string& get(size_t i){
|
inline const std::string& get(size_t i){
|
||||||
return args[i];
|
return args[i];
|
||||||
}
|
}
|
||||||
inline const std::string& next(size_t& i){
|
|
||||||
return args[i++];
|
|
||||||
}
|
|
||||||
inline bool hasNext(size_t i){
|
inline bool hasNext(size_t i){
|
||||||
return (size_t)i < args.size();
|
return (size_t)i < args.size();
|
||||||
}
|
}
|
||||||
inline bool isFlag(size_t i){
|
|
||||||
return get(i).starts_with(FLAG);
|
|
||||||
}
|
|
||||||
public:
|
public:
|
||||||
arg_tokenizer() = default;
|
arg_tokenizer() = default;
|
||||||
|
|
||||||
|
@ -154,13 +148,17 @@ namespace blt::parser {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const std::string& next() {
|
inline const std::string& next() {
|
||||||
return next(nextIndex);
|
return get(nextIndex++);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool hasNext() {
|
inline bool hasNext() {
|
||||||
return hasNext(nextIndex);
|
return hasNext(nextIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool isFlag(size_t i){
|
||||||
|
return get(i).starts_with(FLAG);
|
||||||
|
}
|
||||||
|
|
||||||
inline bool isFlag() {
|
inline bool isFlag() {
|
||||||
return isFlag(nextIndex);
|
return isFlag(nextIndex);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +171,7 @@ namespace blt::parser {
|
||||||
struct {
|
struct {
|
||||||
std::vector<arg_properties> argStorage;
|
std::vector<arg_properties> argStorage;
|
||||||
HASHMAP<std::string, arg_properties*> flagAssociations;
|
HASHMAP<std::string, arg_properties*> flagAssociations;
|
||||||
HASHMAP<std::string, arg_properties*> nameAssociations;
|
std::vector<std::pair<std::string, arg_properties*>> nameAssociations;
|
||||||
} user_args;
|
} user_args;
|
||||||
|
|
||||||
struct arg_results {
|
struct arg_results {
|
||||||
|
|
|
@ -118,7 +118,7 @@ namespace blt::parser {
|
||||||
// associate the arg properties per name and flag to allow for quick access when parsing
|
// associate the arg properties per name and flag to allow for quick access when parsing
|
||||||
auto& names = args.a_flags.getNames();
|
auto& names = args.a_flags.getNames();
|
||||||
for (const auto& name : names)
|
for (const auto& name : names)
|
||||||
user_args.nameAssociations[name] = &arg;
|
user_args.nameAssociations.emplace_back(name, &arg);
|
||||||
|
|
||||||
auto& flags = args.a_flags.getFlags();
|
auto& flags = args.a_flags.getFlags();
|
||||||
for (const auto& flag : flags)
|
for (const auto& flag : flags)
|
||||||
|
@ -131,6 +131,15 @@ namespace blt::parser {
|
||||||
loaded_args.programName = asToken.next();
|
loaded_args.programName = asToken.next();
|
||||||
BLT_TRACE("Loading args for %s", loaded_args.programName.c_str());
|
BLT_TRACE("Loading args for %s", loaded_args.programName.c_str());
|
||||||
|
|
||||||
|
size_t lastPositional;
|
||||||
|
while (asToken.hasNext()) {
|
||||||
|
if (!asToken.isFlag()){
|
||||||
|
loaded_args.positionalArgs[user_args.nameAssociations[lastPositional].first] = asToken.next();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return loaded_args;
|
return loaded_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,8 @@ int main(int argc, const char** argv) {
|
||||||
blt::parser::argparse parser;
|
blt::parser::argparse parser;
|
||||||
parser.addArgument({{"--foo", "-f"}});
|
parser.addArgument({{"--foo", "-f"}});
|
||||||
auto args = parser.parse_args(argc, argv);
|
auto args = parser.parse_args(argc, argv);
|
||||||
|
const char* r[2]{"BLT_TESTS", "--foo"};
|
||||||
|
auto args2 = parser.parse_args(2, r);
|
||||||
//
|
//
|
||||||
// if (argc > 1 && std::string(argv[1]) == "--no_color") {
|
// if (argc > 1 && std::string(argv[1]) == "--no_color") {
|
||||||
// for (int i = (int)blt::logging::log_level::NONE; i < (int)blt::logging::log_level::FATAL; i++) {
|
// for (int i = (int)blt::logging::log_level::NONE; i < (int)blt::logging::log_level::FATAL; i++) {
|
||||||
|
|
Loading…
Reference in New Issue