00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef TCLAP_MULTI_SWITCH_ARG_H
00026 #define TCLAP_MULTI_SWITCH_ARG_H
00027
00028 #include <string>
00029 #include <vector>
00030
00031 #include <tclap/SwitchArg.h>
00032
00033 namespace TCLAP {
00034
00039 class MultiSwitchArg : public SwitchArg
00040 {
00041 protected:
00042
00046 int _value;
00047
00052 int _default;
00053
00054 public:
00055
00069 MultiSwitchArg(const std::string& flag,
00070 const std::string& name,
00071 const std::string& desc,
00072 int init = 0,
00073 Visitor* v = NULL);
00074
00075
00090 MultiSwitchArg(const std::string& flag,
00091 const std::string& name,
00092 const std::string& desc,
00093 CmdLineInterface& parser,
00094 int init = 0,
00095 Visitor* v = NULL);
00096
00097
00106 virtual bool processArg(int* i, std::vector<std::string>& args);
00107
00111 int getValue();
00112
00116 std::string shortID(const std::string& val) const;
00117
00121 std::string longID(const std::string& val) const;
00122
00123 void reset();
00124
00125 };
00126
00128
00130 inline MultiSwitchArg::MultiSwitchArg(const std::string& flag,
00131 const std::string& name,
00132 const std::string& desc,
00133 int init,
00134 Visitor* v )
00135 : SwitchArg(flag, name, desc, false, v),
00136 _value( init ),
00137 _default( init )
00138 { }
00139
00140 inline MultiSwitchArg::MultiSwitchArg(const std::string& flag,
00141 const std::string& name,
00142 const std::string& desc,
00143 CmdLineInterface& parser,
00144 int init,
00145 Visitor* v )
00146 : SwitchArg(flag, name, desc, false, v),
00147 _value( init ),
00148 _default( init )
00149 {
00150 parser.add( this );
00151 }
00152
00153 inline int MultiSwitchArg::getValue() { return _value; }
00154
00155 inline bool MultiSwitchArg::processArg(int *i, std::vector<std::string>& args)
00156 {
00157 if ( _ignoreable && Arg::ignoreRest() )
00158 return false;
00159
00160 if ( argMatches( args[*i] ))
00161 {
00162
00163 _alreadySet = true;
00164
00165
00166 ++_value;
00167
00168 _checkWithVisitor();
00169
00170 return true;
00171 }
00172 else if ( combinedSwitchesMatch( args[*i] ) )
00173 {
00174
00175 _alreadySet = true;
00176
00177
00178 ++_value;
00179
00180
00181 while ( combinedSwitchesMatch( args[*i] ) )
00182 ++_value;
00183
00184 _checkWithVisitor();
00185
00186 return false;
00187 }
00188 else
00189 return false;
00190 }
00191
00192 inline std::string
00193 MultiSwitchArg::shortID(const std::string& val) const
00194 {
00195 return Arg::shortID(val) + " ... ";
00196 }
00197
00198 inline std::string
00199 MultiSwitchArg::longID(const std::string& val) const
00200 {
00201 return Arg::longID(val) + " (accepted multiple times)";
00202 }
00203
00204 inline void
00205 MultiSwitchArg::reset()
00206 {
00207 MultiSwitchArg::_value = MultiSwitchArg::_default;
00208 }
00209
00211
00213
00214 }
00215
00216 #endif