diff options
Diffstat (limited to 'src/tclap/SwitchArg.h')
-rw-r--r--[-rwxr-xr-x] | src/tclap/SwitchArg.h | 385 |
1 files changed, 193 insertions, 192 deletions
diff --git a/src/tclap/SwitchArg.h b/src/tclap/SwitchArg.h index dc4952e..78b8c0c 100755..100644 --- a/src/tclap/SwitchArg.h +++ b/src/tclap/SwitchArg.h @@ -1,24 +1,23 @@ - -/****************************************************************************** - * +/****************************************************************************** + * * file: SwitchArg.h - * + * * Copyright (c) 2003, Michael E. Smoot . * Copyright (c) 2004, Michael E. Smoot, Daniel Aarno. * All rights reverved. - * + * * See the file COPYING in the top directory of this distribution for * more information. - * - * THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ + * + * THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ #ifndef TCLAP_SWITCH_ARG_H @@ -29,200 +28,202 @@ #include <tclap/Arg.h> -namespace TCLAP { - -/** - * A simple switch argument. If the switch is set on the command line, then - * the getValue method will return the opposite of the default value for the - * switch. - */ -class SwitchArg : public Arg -{ - protected: - - /** - * The value of the switch. - */ - bool _value; - - /** - * Used to support the reset() method so that ValueArg can be - * reset to their constructed value. - */ - bool _default; - - public: - - /** - * SwitchArg constructor. - * \param flag - The one character flag that identifies this - * argument on the command line. - * \param name - A one word name for the argument. Can be - * used as a long flag on the command line. - * \param desc - A description of what the argument is for or - * does. - * \param def - The default value for this Switch. - * \param v - An optional visitor. You probably should not - * use this unless you have a very good reason. - */ - SwitchArg(const std::string& flag, - const std::string& name, - const std::string& desc, - bool def = false, - Visitor* v = NULL); - - - /** - * SwitchArg constructor. - * \param flag - The one character flag that identifies this - * argument on the command line. - * \param name - A one word name for the argument. Can be - * used as a long flag on the command line. - * \param desc - A description of what the argument is for or - * does. - * \param parser - A CmdLine parser object to add this Arg to - * \param def - The default value for this Switch. - * \param v - An optional visitor. You probably should not - * use this unless you have a very good reason. - */ - SwitchArg(const std::string& flag, - const std::string& name, - const std::string& desc, - CmdLineInterface& parser, - bool def = false, - Visitor* v = NULL); - - - /** - * Handles the processing of the argument. - * This re-implements the Arg version of this method to set the - * _value of the argument appropriately. - * \param i - Pointer the the current argument in the list. - * \param args - Mutable list of strings. Passed - * in from main(). - */ - virtual bool processArg(int* i, std::vector<std::string>& args); - - /** - * Checks a string to see if any of the chars in the string - * match the flag for this Switch. - */ - bool combinedSwitchesMatch(std::string& combined); - - /** - * Returns bool, whether or not the switch has been set. - */ - bool getValue(); - - virtual void reset(); - -}; - -////////////////////////////////////////////////////////////////////// -//BEGIN SwitchArg.cpp -////////////////////////////////////////////////////////////////////// -inline SwitchArg::SwitchArg(const std::string& flag, - const std::string& name, - const std::string& desc, - bool default_val, - Visitor* v ) -: Arg(flag, name, desc, false, false, v), - _value( default_val ), - _default( default_val ) -{ } - -inline SwitchArg::SwitchArg(const std::string& flag, - const std::string& name, - const std::string& desc, - CmdLineInterface& parser, - bool default_val, - Visitor* v ) -: Arg(flag, name, desc, false, false, v), - _value( default_val ), - _default(default_val) -{ - parser.add( this ); -} - -inline bool SwitchArg::getValue() { return _value; } - -inline bool SwitchArg::combinedSwitchesMatch(std::string& combinedSwitches ) +namespace TCLAP { - // make sure this is actually a combined switch - if ( combinedSwitches.length() > 0 && - combinedSwitches[0] != Arg::flagStartString()[0] ) - return false; + /** + * A simple switch argument. If the switch is set on the command line, then + * the getValue method will return the opposite of the default value for the + * switch. + */ + class SwitchArg : public Arg + { + protected: + /** + * The value of the switch. + */ + bool _value; + + /** + * Used to support the reset() method so that ValueArg can be + * reset to their constructed value. + */ + bool _default; + + public: + /** + * SwitchArg constructor. + * \param flag - The one character flag that identifies this + * argument on the command line. + * \param name - A one word name for the argument. Can be + * used as a long flag on the command line. + * \param desc - A description of what the argument is for or + * does. + * \param def - The default value for this Switch. + * \param v - An optional visitor. You probably should not + * use this unless you have a very good reason. + */ + SwitchArg(const std::string &flag, const std::string &name, const std::string &desc, + bool def = false, Visitor *v = NULL); + + + /** + * SwitchArg constructor. + * \param flag - The one character flag that identifies this + * argument on the command line. + * \param name - A one word name for the argument. Can be + * used as a long flag on the command line. + * \param desc - A description of what the argument is for or + * does. + * \param parser - A CmdLine parser object to add this Arg to + * \param def - The default value for this Switch. + * \param v - An optional visitor. You probably should not + * use this unless you have a very good reason. + */ + SwitchArg(const std::string &flag, const std::string &name, const std::string &desc, + CmdLineInterface &parser, bool def = false, Visitor *v = NULL); + + + /** + * Handles the processing of the argument. + * This re-implements the Arg version of this method to set the + * _value of the argument appropriately. + * \param i - Pointer the the current argument in the list. + * \param args - Mutable list of strings. Passed + * in from main(). + */ + virtual bool processArg(int *i, std::vector<std::string> &args); + + /** + * Checks a string to see if any of the chars in the string + * match the flag for this Switch. + */ + bool combinedSwitchesMatch(std::string &combined); + + /** + * Returns bool, whether or not the switch has been set. + */ + bool getValue(); + + virtual void reset(); + }; + + ////////////////////////////////////////////////////////////////////// + //BEGIN SwitchArg.cpp + ////////////////////////////////////////////////////////////////////// + inline SwitchArg::SwitchArg(const std::string &flag, const std::string &name, + const std::string &desc, bool default_val, Visitor *v) : + Arg(flag, name, desc, false, false, v), _value(default_val), _default(default_val) + { + } - // make sure it isn't a long name - if ( combinedSwitches.substr( 0, Arg::nameStartString().length() ) == - Arg::nameStartString() ) - return false; + inline SwitchArg::SwitchArg(const std::string &flag, const std::string &name, + const std::string &desc, CmdLineInterface &parser, bool default_val, + Visitor *v) : + Arg(flag, name, desc, false, false, v), _value(default_val), _default(default_val) + { + parser.add(this); + } - // make sure the delimiter isn't in the string - if ( combinedSwitches.find_first_of( Arg::delimiter() ) != std::string::npos ) - return false; + inline bool SwitchArg::getValue() + { + return _value; + } - // ok, we're not specifying a ValueArg, so we know that we have - // a combined switch list. - for ( unsigned int i = 1; i < combinedSwitches.length(); i++ ) - if ( _flag.length() > 0 && - combinedSwitches[i] == _flag[0] && - _flag[0] != Arg::flagStartString()[0] ) + inline bool SwitchArg::combinedSwitchesMatch(std::string &combinedSwitches) + { + // make sure this is actually a combined switch + if (combinedSwitches.length() > 0 && + combinedSwitches[0] != Arg::flagStartString()[0]) { - // update the combined switches so this one is no longer present - // this is necessary so that no unlabeled args are matched - // later in the processing. - //combinedSwitches.erase(i,1); - combinedSwitches[i] = Arg::blankChar(); - return true; + return false; } - // none of the switches passed in the list match. - return false; -} + // make sure it isn't a long name + if (combinedSwitches.substr(0, Arg::nameStartString().length()) == Arg::nameStartString()) + { + return false; + } + // make sure the delimiter isn't in the string + if (combinedSwitches.find_first_of(Arg::delimiter()) != std::string::npos) + { + return false; + } -inline bool SwitchArg::processArg(int *i, std::vector<std::string>& args) -{ - if ( _ignoreable && Arg::ignoreRest() ) + // ok, we're not specifying a ValueArg, so we know that we have + // a combined switch list. + for (unsigned int i = 1; i < combinedSwitches.length(); i++) + { + if (_flag.length() > 0 && + combinedSwitches[i] == _flag[0] && + _flag[0] != Arg::flagStartString()[0]) + { + // update the combined switches so this one is no longer present + // this is necessary so that no unlabeled args are matched + // later in the processing. + //combinedSwitches.erase(i,1); + combinedSwitches[i] = Arg::blankChar(); + return true; + } + } + + // none of the switches passed in the list match. return false; + } - if ( argMatches( args[*i] ) || combinedSwitchesMatch( args[*i] ) ) + inline bool SwitchArg::processArg(int *i, std::vector<std::string> &args) { - // If we match on a combined switch, then we want to return false - // so that other switches in the combination will also have a - // chance to match. - bool ret = false; - if ( argMatches( args[*i] ) ) - ret = true; - - if ( _alreadySet || ( !ret && combinedSwitchesMatch( args[*i] ) ) ) - throw(CmdLineParseException("Argument already set!", toString())); - - _alreadySet = true; + if (_ignoreable && Arg::ignoreRest()) + { + return false; + } - if ( _value == true ) - _value = false; + if (argMatches(args[*i]) || combinedSwitchesMatch(args[*i])) + { + // If we match on a combined switch, then we want to return false + // so that other switches in the combination will also have a + // chance to match. + bool ret = false; + if (argMatches(args[*i])) + { + ret = true; + } + + if (_alreadySet || (!ret && combinedSwitchesMatch(args[*i]))) + { + throw (CmdLineParseException("Argument already set!", toString())); + } + + _alreadySet = true; + + if (_value == true) + { + _value = false; + } + else + { + _value = true; + } + + _checkWithVisitor(); + + return ret; + } else - _value = true; - - _checkWithVisitor(); - - return ret; + { + return false; + } } - else - return false; -} -inline void SwitchArg::reset() -{ - Arg::reset(); - _value = _default; -} -////////////////////////////////////////////////////////////////////// -//End SwitchArg.cpp -////////////////////////////////////////////////////////////////////// + inline void SwitchArg::reset() + { + Arg::reset(); + _value = _default; + } + ////////////////////////////////////////////////////////////////////// + //End SwitchArg.cpp + ////////////////////////////////////////////////////////////////////// } //namespace TCLAP #endif |