9#include <kernel/util/string.hpp> 
   10#include <kernel/util/string_mapped.hpp> 
  147    std::map<String, std::pair<int, std::deque<String> > > 
_opts;
 
  166      for(
int i(0); i < argc; ++i)
 
  178      return int(
_args.size());
 
  202      if((i < 0) || (i >= 
int(
_args.size())))
 
  204      return _args.at(std::size_t(i));
 
  212      std::deque<String> dsa;
 
  214        dsa.push_back(
_args.at(i));
 
  274          s += (double_newline ? 
"\n\n" : 
"\n");
 
  275        s += 
"--" + it->first + 
" " + it->second;
 
  294      std::deque<std::pair<int,String> > result;
 
  297      for(
auto it = 
_opts.begin(); it != 
_opts.end(); ++it)
 
  301        int idx = it->second.first;
 
  311          result.push_back(std::make_pair(idx, name));
 
  331      auto it =
_opts.find(option);
 
  332      if(it == 
_opts.end())
 
  334      return int(it->second.second.size());
 
  356    const std::pair<int, std::deque<String> >* 
query(
const String& option)
 const 
  358      auto it = 
_opts.find(option);
 
  359      if(it == 
_opts.end())
 
  361      return &(it->second);
 
  383    template<
typename... Prms_>
 
  387      auto it = 
_opts.find(option);
 
  388      if(it == 
_opts.end())
 
  392      return _parse(it->second, std::size_t(0), std::forward<Prms_>(prms)...);
 
  407    template<
typename T_>
 
  410      T_ val(default_value);
 
  411      return parse(option, val) == 1 ? val : default_value;
 
  419      auto opt = 
_opts.end();
 
  425      for(
int i(1); i < int(
_args.size()); ++i)
 
  431        if((arg.size() > std::size_t(1)) && (arg[0] == 
'-') && (arg[1] == 
'-'))
 
  437          auto ik = 
_opts.insert(std::make_pair(optname, std::make_pair(i, std::deque<String>())));
 
  444            opt->second.first = i;
 
  445            opt->second.second.clear();
 
  448        else if(opt != 
_opts.end())
 
  451          opt->second.second.push_back(arg);
 
  461    template<
typename Prm_>
 
  462    int _parse_prm(
const std::pair<
int,std::deque<String> >& isd, std::size_t offset, Prm_&& prm)
 const 
  465      if(offset >= isd.second.size())
 
  469      if(isd.second.at(offset).parse(std::forward<Prm_>(prm)))
 
  472        return -isd.first - int(offset) - 1; 
 
  476    template<
typename ValueType_>
 
  477    int _parse_prm(
const std::pair<
int,std::deque<String> >& isd, std::size_t offset, StringMapped<ValueType_>&& prm)
 const 
  480      if(offset >= isd.second.size())
 
  484      if(prm.lookup(isd.second.at(offset)))
 
  487        return -isd.first - int(offset) - 1; 
 
  490    template<
typename Prm1_>
 
  491    int _parse(
const std::pair<
int,std::deque<String> >& isd, std::size_t offset, Prm1_&& prm1)
 const 
  493      int rtn = _parse_prm(isd, offset, std::forward<Prm1_>(prm1));
 
  497        return int(offset) + 1;
 
  511    template<
typename Prm1_, 
typename... Prms_>
 
  512    int _parse(
const std::pair<
int,std::deque<String> >& isd, std::size_t offset, Prm1_&& prm1, Prms_&&... prms)
 const 
  514      int rtn = _parse_prm(isd, offset, std::forward<Prm1_>(prm1));
 
  518        return _parse(isd, ++offset, std::forward<Prms_>(prms)...);
 
Simple argument parser implementation.
SimpleArgParser(int argc, const char *const *const argv)
Constructor.
std::map< String, String > _supported
supported option set
std::deque< String > _args
command line arguments
int num_skipped_args() const
Returns the number of arguments skipped by the parser.
int check(const String &option) const
Checks whether an option was given.
std::map< String, std::pair< int, std::deque< String > > > _opts
option-parameter map
T_ parse_default(const String &option, T_ default_value) const
Parses a single parameter of an option and returns it or, if not given, a default value.
String get_supported_help(bool double_newline=true) const
Returns a string of all supported options and their help strings.
String get_arg(int i) const
Returns an argument.
std::deque< String > skipped_args() const
Returns a deque of all arguments skipped by the parser.
const std::pair< int, std::deque< String > > * query(const String &option) const
Query the parameters of an option.
std::deque< std::pair< int, String > > query_unsupported() const
Queries all unsupported options passed in the command line.
void support(const String &option, const String &description=String())
Adds an option to the set of supported options.
int parse(const String &option, Prms_ &&... prms) const
Parses the parameters of an option.
int _num_skipped_args
number of skipped arguments
int num_args() const
Returns the total number of arguments passed in the constructor.
String class implementation.
bool starts_with(const String &head) const
Checks whether this string starts with another string.
String trim(const String &charset) const
Trims the string.