Go to the documentation of this file.00001
00011
00012
00013
00014
00015 #ifndef TCLAP_MULTI_SWITCH_ARG_H
00016 #define TCLAP_MULTI_SWITCH_ARG_H
00017
00018 #include <string>
00019 #include <vector>
00020
00021 #include "switch_arg.hpp"
00022
00023 namespace ecl {
00024
00029 class MultiSwitchArg : public SwitchArg
00030 {
00031 protected:
00032
00036 int _value;
00037
00038
00039 public:
00040
00054 MultiSwitchArg(const std::string& flag,
00055 const std::string& name,
00056 const std::string& desc,
00057 int init = 0,
00058 Visitor* v = NULL);
00059
00060
00075 MultiSwitchArg(const std::string& flag,
00076 const std::string& name,
00077 const std::string& desc,
00078 CmdLineInterface& parser,
00079 int init = 0,
00080 Visitor* v = NULL);
00081
00082
00091 virtual bool processArg(int* i, std::vector<std::string>& args);
00092
00096 int getValue();
00097
00101 std::string shortID(const std::string& val) const;
00102
00106 std::string longID(const std::string& val) const;
00107 };
00108
00110
00112 inline MultiSwitchArg::MultiSwitchArg(const std::string& flag,
00113 const std::string& name,
00114 const std::string& desc,
00115 int init,
00116 Visitor* v )
00117 : SwitchArg(flag, name, desc, false, v),
00118 _value( init )
00119 { }
00120
00121 inline MultiSwitchArg::MultiSwitchArg(const std::string& flag,
00122 const std::string& name,
00123 const std::string& desc,
00124 CmdLineInterface& parser,
00125 int init,
00126 Visitor* v )
00127 : SwitchArg(flag, name, desc, false, v),
00128 _value( init )
00129 {
00130 parser.add( this );
00131 }
00132
00133 inline int MultiSwitchArg::getValue() { return _value; }
00134
00135 inline bool MultiSwitchArg::processArg(int *i, std::vector<std::string>& args)
00136 {
00137 if ( _ignoreable && Arg::ignoreRest() )
00138 return false;
00139
00140 if ( argMatches( args[*i] ))
00141 {
00142
00143 _alreadySet = true;
00144
00145
00146 ++_value;
00147
00148 _checkWithVisitor();
00149
00150 return true;
00151 }
00152 else if ( combinedSwitchesMatch( args[*i] ) )
00153 {
00154
00155 _alreadySet = true;
00156
00157
00158 ++_value;
00159
00160
00161 while ( combinedSwitchesMatch( args[*i] ) )
00162 ++_value;
00163
00164 _checkWithVisitor();
00165
00166 return false;
00167 }
00168 else
00169 return false;
00170 }
00171
00172 inline std::string MultiSwitchArg::shortID(const std::string& val) const
00173 {
00174 std::string id = Arg::shortID() + " ... " + val;
00175
00176 return id;
00177 }
00178
00179 inline std::string MultiSwitchArg::longID(const std::string& val) const
00180 {
00181 std::string id = Arg::longID() + " (accepted multiple times) " + val;
00182
00183 return id;
00184 }
00185
00187
00189
00190 };
00191
00192 #endif