Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/CommandLineUI/Query/ElementsCommandLineQuery.cpp

    rf130d4 r2f429e  
    3636#include "CodePatterns/MemDebug.hpp"
    3737
     38#include <string>
     39
    3840#include "CommandLineUI/Query/CommandLineQuery.hpp"
    3941#include "CommandLineUI/CommandLineParser.hpp"
     
    5153{}
    5254
     55template <typename T>
     56std::vector<const element *> getElementsFromInput(const std::vector<std::string> &_input)
     57{
     58  periodentafel *periode = World::getInstance().getPeriode();
     59  std::vector<const element *> result;
     60  const element *temp_element;
     61  for (typename std::vector<std::string>::const_iterator ZRunner = _input.begin(); ZRunner != _input.end(); ++ZRunner) {
     62    const T argument = boost::lexical_cast<T>(*ZRunner);
     63    temp_element = periode->FindElement(argument);
     64    ASSERT(temp_element != NULL, "Invalid element specified in ElementCommandLineQuery");
     65    result.push_back(temp_element);
     66  }
     67  return result;
     68}
     69
    5370bool CommandLineDialog::ElementsCommandLineQuery::handle() {
    5471  // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector?
    55   periodentafel *periode = World::getInstance().getPeriode();
    56   std::vector<int> AllElements;
    5772  if (CommandLineParser::getInstance().vm.count(getTitle())) {
    5873    try {
    59       AllElements = CommandLineParser::getInstance().vm[getTitle()].as< vector<int> >();
     74      std::vector<std::string> AllArguments;
     75      AllArguments = CommandLineParser::getInstance().vm[getTitle()].as< vector<std::string> >();
     76      try {
     77        temp = getElementsFromInput<int>(AllArguments);
     78      } catch(boost::bad_lexical_cast &e) {
     79        try {
     80        temp = getElementsFromInput<std::string>(AllArguments);
     81        } catch(boost::bad_lexical_cast &e) {
     82          return false;
     83        }
     84      }
    6085    } catch(boost::bad_any_cast &e) {
    61       AllElements.clear();
    6286      return false;
    6387    }
    64     const element *temp_element;
    65     for (vector<int>::iterator ZRunner = AllElements.begin(); ZRunner != AllElements.end(); ++ZRunner) {
    66       temp_element = periode->FindElement(*ZRunner);
    67       ASSERT(temp_element != NULL, "Invalid element specified in ElementCommandLineQuery");
    68       temp.push_back(temp_element);
    69     }
    70     return true;
     88    if (temp.empty())
     89      return false;
     90    else
     91      return true;
    7192  }
    7293  return false;
Note: See TracChangeset for help on using the changeset viewer.