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