ThreadedExamples/example02/src/argParse.cpp

36 lines
1,004 B
C++

#include "argParse.hpp"
#include <cstring>
Ex02::ArgParse::ParseResult Ex02::ArgParse::parseArgs(
int argc,
char **argv,
const Ex02::ArgParse::ArgsType &singleArgs,
const Ex02::ArgParse::ArgsType &doubleArgs) {
ParseResult result;
bool found;
--argc; ++argv;
while(argc > 0) {
found = false;
for(const std::string &singleArg : singleArgs) {
if(std::strcmp(argv[0], singleArg.c_str()) == 0) {
result.insert({singleArg, EX02_ARG_PARSE_SINGLE_ARG_PLACEHOLDER});
found = true;
break;
}
}
if(!found && argc > 1) {
for(const std::string &doubleArg: doubleArgs) {
if(std::strcmp(argv[0], doubleArg.c_str()) == 0) {
result.insert({doubleArg, argv[1]});
--argc; ++argv;
break;
}
}
}
--argc; ++argv;
}
return result;
}