COIN-OR::LEMON - Graph Library

Changeset 2402:da8eb8f4ea41 in lemon-0.x for lemon/arg_parser.cc


Ignore:
Timestamp:
03/12/07 14:26:56 (13 years ago)
Author:
Alpar Juttner
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@3233
Message:

An improved version of ArgParser?: You don't need to give an explicit storage
for each option.
TODO: Documentation must be updated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/arg_parser.cc

    r2391 r2402  
    2929  ArgParser::ArgParser(int argc, char **argv) :_argc(argc), _argv(argv),
    3030                                               _command_name(argv[0]) {
    31     option("-help","Print a short help message",_showHelp,this);
     31    refOption("-help","Print a short help message",_showHelp,this);
    3232    synonym("help","-help");
    3333    synonym("h","-help");
     
    3535  }
    3636
    37   ArgParser &ArgParser::option(const std::string &name,
     37  ArgParser::~ArgParser()
     38  {
     39    for(Opts::iterator i=_opts.begin();i!=_opts.end();++i)
     40      if(i->second.self_delete)
     41        switch(i->second.type) {
     42        case BOOL:
     43          delete i->second.bool_p;
     44          break;
     45        case STRING:
     46          delete i->second.string_p;
     47          break;
     48        case DOUBLE:
     49          delete i->second.double_p;
     50          break;
     51        case INTEGER:
     52          delete i->second.int_p;
     53          break;
     54        case UNKNOWN:
     55          break;
     56        case FUNC:
     57          break;
     58        }
     59  }
     60 
     61
     62  ArgParser &ArgParser::intOption(const std::string &name,
     63                               const std::string &help,
     64                               int value, bool obl)
     65  {
     66    ParData p;
     67    p.int_p=new int(value);
     68    p.self_delete=true;
     69    p.help=help;
     70    p.type=INTEGER;
     71    p.mandatory=obl;
     72    p.self_delete=true;
     73    _opts[name]=p;
     74    return *this;
     75  }
     76
     77  ArgParser &ArgParser::doubleOption(const std::string &name,
     78                               const std::string &help,
     79                               double value, bool obl)
     80  {
     81    ParData p;
     82    p.double_p=new double(value);
     83    p.self_delete=true;
     84    p.help=help;
     85    p.type=DOUBLE;
     86    p.mandatory=obl;
     87    _opts[name]=p;
     88    return *this;
     89  }
     90
     91  ArgParser &ArgParser::boolOption(const std::string &name,
     92                               const std::string &help,
     93                               bool value, bool obl)
     94  {
     95    ParData p;
     96    p.bool_p=new bool(value);
     97    p.self_delete=true;
     98    p.help=help;
     99    p.type=BOOL;
     100    p.mandatory=obl;
     101    _opts[name]=p;
     102
     103    value = false;
     104
     105    return *this;
     106  }
     107
     108  ArgParser &ArgParser::stringOption(const std::string &name,
     109                               const std::string &help,
     110                               std::string value, bool obl)
     111  {
     112    ParData p;
     113    p.string_p=new std::string(value);
     114    p.self_delete=true;
     115    p.help=help;
     116    p.type=STRING;
     117    p.mandatory=obl;
     118    _opts[name]=p;
     119    return *this;
     120  }
     121
     122  ArgParser &ArgParser::refOption(const std::string &name,
    38123                               const std::string &help,
    39124                               int &value, bool obl)
     
    41126    ParData p;
    42127    p.int_p=&value;
     128    p.self_delete=false;
    43129    p.help=help;
    44130    p.type=INTEGER;
     
    48134  }
    49135
    50   ArgParser &ArgParser::option(const std::string &name,
     136  ArgParser &ArgParser::refOption(const std::string &name,
    51137                               const std::string &help,
    52138                               double &value, bool obl)
     
    54140    ParData p;
    55141    p.double_p=&value;
     142    p.self_delete=false;
    56143    p.help=help;
    57144    p.type=DOUBLE;
     
    61148  }
    62149
    63   ArgParser &ArgParser::option(const std::string &name,
     150  ArgParser &ArgParser::refOption(const std::string &name,
    64151                               const std::string &help,
    65152                               bool &value, bool obl)
     
    67154    ParData p;
    68155    p.bool_p=&value;
     156    p.self_delete=false;
    69157    p.help=help;
    70158    p.type=BOOL;
     
    77165  }
    78166
    79   ArgParser &ArgParser::option(const std::string &name,
     167  ArgParser &ArgParser::refOption(const std::string &name,
    80168                               const std::string &help,
    81169                               std::string &value, bool obl)
     
    83171    ParData p;
    84172    p.string_p=&value;
     173    p.self_delete=false;
    85174    p.help=help;
    86175    p.type=STRING;
     
    90179  }
    91180
    92   ArgParser &ArgParser::option(const std::string &name,
     181  ArgParser &ArgParser::refOption(const std::string &name,
    93182                               const std::string &help,
    94183                               void (*func)(void *),void *data)
     
    97186    p.func_p.p=func;
    98187    p.func_p.data=data;
     188    p.self_delete=false;
    99189    p.help=help;
    100190    p.type=FUNC;
     
    103193    return *this;
    104194  }
     195
    105196  ArgParser &ArgParser::optionGroup(const std::string &group,
    106197                                    const std::string &opt)
     
    378469    return *this;
    379470  } 
    380    
     471
    381472}
Note: See TracChangeset for help on using the changeset viewer.