#include #include "GLTB/commandline.h" #include "GLTB/exception.h" namespace gltb { void CommandLine::setArgs(int argc, char *argv[]) { for(int i=0;i argument) { arguments.push_back(argument); argumentHandled.push_back(false); } void CommandLineParser::parse(int argc, const char *argv[]) { for(int i = 1; i < argc; i++) { bool isArgument = false; for(size_t j = 0; j < arguments.size(); j++) { if(argv[i] == arguments[j]->getName()) { if(argumentHandled[j] == true && arguments[j]->onlyOnceAllowed()) { throw Exception("command line argument " + arguments[j]->getName() + " present multiple times on the command line", "gltb::CommandLineParser::parse()"); } if(i > argc - (arguments[j]->getNumParameters() + 1)) { std::ostringstream exceptionMessage; exceptionMessage << "command line argument " << arguments[j]->getName() << " expects " << arguments[j]->getNumParameters() << " parameters, but only " << argc - (arguments[j]->getNumParameters() + 1) - i << " are present"; throw Exception(exceptionMessage.str(), "gltb::CommandLineParser::parse()"); } std::vector parameters; for(int k = 0; k < arguments[j]->getNumParameters(); k++) { parameters.push_back(argv[i + k + 1]); } arguments[j]->_addParameters(parameters); i += arguments[j]->getNumParameters(); argumentHandled[j] = true; isArgument = true; break; } } if(!isArgument) { unhandledArguments.push_back(argv[i]); } } } }