| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- // -*- Mode: c++; c-basic-offset: 4; tab-width: 4; -*-
- /******************************************************************************
- *
- * file: ArgException.h
- *
- * Copyright (c) 2003, Michael E. Smoot .
- * Copyright (c) 2017 Google LLC
- * All rights reserved.
- *
- * 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.
- *
- *****************************************************************************/
- #ifndef TCLAP_ARG_EXCEPTION_H
- #define TCLAP_ARG_EXCEPTION_H
- #include <string>
- #include <exception>
- namespace TCLAP {
- /**
- * A simple class that defines and argument exception. Should be caught
- * whenever a CmdLine is created and parsed.
- */
- class ArgException : public std::exception
- {
- public:
-
- /**
- * Constructor.
- * \param text - The text of the exception.
- * \param id - The text identifying the argument source.
- * \param td - Text describing the type of ArgException it is.
- * of the exception.
- */
- ArgException( const std::string& text = "undefined exception",
- const std::string& id = "undefined",
- const std::string& td = "Generic ArgException")
- : std::exception(),
- _errorText(text),
- _argId( id ),
- _typeDescription(td)
- { }
-
- /**
- * Destructor.
- */
- virtual ~ArgException() throw() { }
- /**
- * Returns the error text.
- */
- std::string error() const { return ( _errorText ); }
- /**
- * Returns the argument id.
- */
- std::string argId() const
- {
- if ( _argId == "undefined" )
- return " ";
- else
- return ( "Argument: " + _argId );
- }
- /**
- * Returns the arg id and error text.
- */
- const char* what() const throw()
- {
- static std::string ex;
- ex = _argId + " -- " + _errorText;
- return ex.c_str();
- }
- /**
- * Returns the type of the exception. Used to explain and distinguish
- * between different child exceptions.
- */
- std::string typeDescription() const
- {
- return _typeDescription;
- }
- private:
- /**
- * The text of the exception message.
- */
- std::string _errorText;
- /**
- * The argument related to this exception.
- */
- std::string _argId;
- /**
- * Describes the type of the exception. Used to distinguish
- * between different child exceptions.
- */
- std::string _typeDescription;
- };
- /**
- * Thrown from within the child Arg classes when it fails to properly
- * parse the argument it has been passed.
- */
- class ArgParseException : public ArgException
- {
- public:
- /**
- * Constructor.
- * \param text - The text of the exception.
- * \param id - The text identifying the argument source
- * of the exception.
- */
- ArgParseException( const std::string& text = "undefined exception",
- const std::string& id = "undefined" )
- : ArgException( text,
- id,
- std::string( "Exception found while parsing " ) +
- std::string( "the value the Arg has been passed." ))
- { }
- };
- /**
- * Thrown from CmdLine when the arguments on the command line are not
- * properly specified, e.g. too many arguments, required argument missing, etc.
- */
- class CmdLineParseException : public ArgException
- {
- public:
- /**
- * Constructor.
- * \param text - The text of the exception.
- * \param id - The text identifying the argument source
- * of the exception.
- */
- CmdLineParseException( const std::string& text = "undefined exception",
- const std::string& id = "undefined" )
- : ArgException( text,
- id,
- std::string( "Exception found when the values ") +
- std::string( "on the command line do not meet ") +
- std::string( "the requirements of the defined ") +
- std::string( "Args." ))
- { }
- };
- /**
- * Thrown from Arg and CmdLine when an Arg is improperly specified, e.g.
- * same flag as another Arg, same name, etc.
- */
- class SpecificationException : public ArgException
- {
- public:
- /**
- * Constructor.
- * \param text - The text of the exception.
- * \param id - The text identifying the argument source
- * of the exception.
- */
- SpecificationException( const std::string& text = "undefined exception",
- const std::string& id = "undefined" )
- : ArgException( text,
- id,
- std::string("Exception found when an Arg object ")+
- std::string("is improperly defined by the ") +
- std::string("developer." ))
- { }
- };
- /**
- * Thrown when TCLAP thinks the program should exit.
- *
- * For example after parse error this exception will be thrown (and
- * normally caught). This allows any resource to be clened properly
- * before exit.
- *
- * If exception handling is disabled (CmdLine::setExceptionHandling),
- * this exception will propagate to the call site, allowing the
- * program to catch it and avoid program termination, or do it's own
- * cleanup. See for example, https://sourceforge.net/p/tclap/bugs/29.
- */
- class ExitException {
- public:
- ExitException(int estat) : _estat(estat) {}
- int getExitStatus() const { return _estat; }
- private:
- int _estat;
- };
- } // namespace TCLAP
- #endif
|