bool ArgumentProcessor::notIn(const std::string &what, const std::vector<std::vector<std::string> > &where) const { int32_t sum = 0; for(auto elem : where) { if(notIn(what, elem)) { ++sum; } } return (sum == where.size()) ? true : false; }
QxSqlQuery & QxSqlQuery::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5, const QVariant & val6, const QVariant & val7, const QVariant & val8, const QVariant & val9) { return notIn(QVariantList() << val1 << val2 << val3 << val4 << val5 << val6 << val7 << val8 << val9); }
QxSqlQuery & QxSqlQuery::notIn(const QVariant & val1, const QVariant & val2, const QVariant & val3, const QVariant & val4, const QVariant & val5) { return notIn(QVariantList() << val1 << val2 << val3 << val4 << val5); }
QxSqlQuery & QxSqlQuery::notIn(const QVariant & val1, const QVariant & val2) { return notIn(QVariantList() << val1 << val2); }
std::unordered_map<std::string, std::string> ArgumentProcessor::parse(int32_t argc, char *argv[]) { std::vector<std::string> args = toStringVector(argc, argv); std::unordered_map<std::string, std::string> argumentMap; for(size_t idx = 0; idx < argc; ++idx) { std::string currentArgument = args[idx]; if(notIn(currentArgument, mArguments) && notIn(currentArgument, mOptionalArguments) && notIn(currentArgument, mSwitches)) { continue; } else { size_t nextIdx = idx + 1; if(nextIdx >= argc) { if(notIn(currentArgument, mSwitches)) { continue; } else { argumentMap[parseFlag(currentArgument)] = "true"; } } else { std::string nextArgument = args[nextIdx]; if(!notIn(currentArgument, mArguments) && notIn(nextArgument, {mOptionalArguments, mSwitches})) { if(!mAllowedValues[currentArgument].empty()) { if(!notIn(nextArgument, mAllowedValues[currentArgument])) { argumentMap[parseFlag(currentArgument)] = nextArgument; } else { std::stringstream s; s << "Encountered invalid option: " << currentArgument << " " << nextArgument << std::endl; throw CommandLineError(s.str(), currentMethod, currentLine); } } else { argumentMap[parseFlag(currentArgument)] = nextArgument; } } else if(!notIn(currentArgument, mOptionalArguments) && notIn(nextArgument, {mArguments, mSwitches})) { if(!mAllowedValues[currentArgument].empty()) { if(!notIn(nextArgument, mAllowedValues[currentArgument])) { argumentMap[parseFlag(currentArgument)] = nextArgument; } else { std::stringstream s; s << "Encountered invalid option: " << currentArgument << " " << nextArgument << std::endl; throw CommandLineError(s.str(), currentMethod, currentLine); } } else { argumentMap[parseFlag(currentArgument)] = nextArgument; } } else if(!notIn(currentArgument, mSwitches) && !notIn(nextArgument, {mArguments, mOptionalArguments})) { argumentMap[parseFlag(currentArgument)] = "true"; } } } } if(argumentMap[parseFlag("--help")].empty()) { for(std::string arg : mArguments) { if(argumentMap[parseFlag(arg)].empty()) { std::stringstream s; s << "Missing required argument: " << arg << std::endl; throw CommandLineError(s.str(), currentMethod, currentLine); } } } else { std::stringstream s; s << "Let me help you!" << std::endl; throw CommandLineError(s.str()); } return argumentMap; }