00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef TCLAP_ARG_EXCEPTION_H
00024 #define TCLAP_ARG_EXCEPTION_H
00025
00026 #include <string>
00027 #include <exception>
00028
00029 namespace TCLAP {
00030
00035 class ArgException : public std::exception
00036 {
00037 public:
00038
00046 ArgException( const std::string& text = "undefined exception",
00047 const std::string& id = "undefined",
00048 const std::string& td = "Generic ArgException")
00049 : std::exception(),
00050 _errorText(text),
00051 _argId( id ),
00052 _typeDescription(td)
00053 { }
00054
00058 virtual ~ArgException() throw() { }
00059
00063 std::string error() const { return ( _errorText ); }
00064
00068 std::string argId() const
00069 {
00070 if ( _argId == "undefined" )
00071 return " ";
00072 else
00073 return ( "Argument: " + _argId );
00074 }
00075
00079 const char* what() const throw()
00080 {
00081 static std::string ex;
00082 ex = _argId + " -- " + _errorText;
00083 return ex.c_str();
00084 }
00085
00090 std::string typeDescription() const
00091 {
00092 return _typeDescription;
00093 }
00094
00095
00096 private:
00097
00101 std::string _errorText;
00102
00106 std::string _argId;
00107
00112 std::string _typeDescription;
00113
00114 };
00115
00120 class ArgParseException : public ArgException
00121 {
00122 public:
00129 ArgParseException( const std::string& text = "undefined exception",
00130 const std::string& id = "undefined" )
00131 : ArgException( text,
00132 id,
00133 std::string( "Exception found while parsing " ) +
00134 std::string( "the value the Arg has been passed." ))
00135 { }
00136 };
00137
00142 class CmdLineParseException : public ArgException
00143 {
00144 public:
00151 CmdLineParseException( const std::string& text = "undefined exception",
00152 const std::string& id = "undefined" )
00153 : ArgException( text,
00154 id,
00155 std::string( "Exception found when the values ") +
00156 std::string( "on the command line do not meet ") +
00157 std::string( "the requirements of the defined ") +
00158 std::string( "Args." ))
00159 { }
00160 };
00161
00166 class SpecificationException : public ArgException
00167 {
00168 public:
00175 SpecificationException( const std::string& text = "undefined exception",
00176 const std::string& id = "undefined" )
00177 : ArgException( text,
00178 id,
00179 std::string("Exception found when an Arg object ")+
00180 std::string("is improperly defined by the ") +
00181 std::string("developer." ))
00182 { }
00183
00184 };
00185
00186 }
00187
00188 #endif
00189