Ejemplo n.º 1
0
const Pololu::Command::Argument& Pololu::Command::Application::operator[](
    const std::string& key) const {
  std::map<std::string, Argument>::const_iterator
    it = keyedArguments.find(key);

  if (it != keyedArguments.end())
    return it->second;
  else
    throw ArgumentKeyError(key);
}
Ejemplo n.º 2
0
void SeekThermal::Command::Application::addArgument(const std::string& key,
    const Argument& argument) {
  std::map<std::string, Argument>::iterator it = keyedArguments.find(key);

  if (it == keyedArguments.end()) {
    it = keyedArguments.insert(std::make_pair(key, argument)).first;
    if (it->second.getValue().empty())
      it->second.setValue<bool>(false);
  }
  else
    throw ArgumentKeyError(key);
}
Ejemplo n.º 3
0
bool SeekThermal::Command::Application::parseArguments(size_t argc,
    char** argv) {
  std::string argument = argv[0];

  size_t i = argument.rfind('/');
  if (i != std::string::npos)
    executable = argument.substr(i+1);
  else
    executable = argument;

  int j = 0;
  for (int i = 1; i < argc; ++i) {
    argument = argv[i];

    if ((argument[0] == '-') && (argument[1] == '-')) {
      std::string key = argument.substr(2);

      std::map<std::string, Argument>::iterator it = keyedArguments.find(key);
      if (it != keyedArguments.end()) {
        if (it->second.getFormat().empty()) {
          it->second.setValue<bool>(true);

          if ((*this)["help"].getValue<bool>()) {
            writeHelp(std::cerr);
            return false;
          }

          if ((*this)["version"].getValue<bool>()) {
            writeVersion(std::cout);
            return false;
          }
        }
        else if (i+1 < argc) {
          std::string value = argv[++i];
          it->second.setValue(value);
        }
        else
          throw ArgumentFormatError(key, it->second.getFormat());
      }
      else
        throw ArgumentKeyError(key);
    }
    else {
      if (j < arguments.size()) {
        if (arguments[j].getGreedy()) {
          std::string args;
          for ( ; i < argc; ++i) {
            args += argv[i];
            if (i+1 < argc)
              args += " ";
          }

          arguments[j].setValue(args);
        }
        else {
          arguments[j].setValue(argument);
          ++j;
        }
      }
      else
        throw UnexpectedArgumentError(argument);
    }
  }

  for ( ; j < arguments.size(); ++j)
    if (arguments[j].getValue().empty())
      throw MissingArgumentError(arguments[j].getFormat());

  return true;
}