ucommon
|
00001 // Copyright (C) 1999-2005 Open Source Telecom Corporation. 00002 // Copyright (C) 2006-2010 David Sugar, Tycho Softworks. 00003 // 00004 // This program is free software; you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation; either version 2 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 // 00018 // As a special exception, you may use this file as part of a free software 00019 // library without restriction. Specifically, if other files instantiate 00020 // templates or use macros or inline functions from this file, or you compile 00021 // this file and link it with other files to produce an executable, this 00022 // file does not by itself cause the resulting executable to be covered by 00023 // the GNU General Public License. This exception does not however 00024 // invalidate any other reasons why the executable file might be covered by 00025 // the GNU General Public License. 00026 // 00027 // This exception applies only to the code released under the name GNU 00028 // Common C++. If you copy code from other releases into a copy of GNU 00029 // Common C++, as the General Public License permits, the exception does 00030 // not apply to the code that you add in this way. To avoid misleading 00031 // anyone as to the status of such modified files, you must delete 00032 // this exception notice from them. 00033 // 00034 // If you write modifications of your own for GNU Common C++, it is your choice 00035 // whether to permit this exception to apply to your modifications. 00036 // If you do not wish that, delete this exception notice. 00037 // 00038 00044 #ifndef COMMONCPP_EXCEPTION_H_ 00045 #define COMMONCPP_EXCEPTION_H_ 00046 00047 #ifndef COMMONCPP_CONFIG_H_ 00048 #include <commoncpp/config.h> 00049 #endif 00050 00051 #ifndef COMMONCPP_STRING_H_ 00052 #include <commoncpp/string.h> 00053 #endif 00054 00055 // see if we support useful and std exception handling, else we ignore 00056 // it for the rest of the system. 00057 00058 #if defined(CCXX_EXCEPTIONS) 00059 #define COMMONCPP_EXCEPTIONS 00060 00061 #include <exception> 00062 #include <stdexcept> 00063 00064 NAMESPACE_COMMONCPP 00065 00074 class __EXPORT Exception : public std::exception 00075 { 00076 private: 00077 String _what; 00078 00079 public: 00080 Exception(const String& what_arg) throw(); 00081 virtual ~Exception() throw(); 00082 virtual const char *getString() const; 00083 virtual const char *what() const throw(); 00084 }; 00085 00092 class __EXPORT IOException : public Exception 00093 { 00094 private: 00095 long _systemError; 00096 mutable char* _systemErrorString; 00097 00098 public: 00099 IOException(const String &what_arg, long systemError = 0) throw(); 00100 virtual ~IOException() throw(); 00101 00102 virtual long getSystemError() const throw(); 00103 virtual const char* getSystemErrorString() const throw(); 00104 }; 00105 00112 class __EXPORT ThrException : public Exception 00113 { 00114 public: 00115 inline ThrException(const String &what_arg) : Exception(what_arg) {}; 00116 }; 00117 00124 class __EXPORT SyncException : public ThrException 00125 { 00126 public: 00127 inline SyncException(const String &what_arg) : ThrException(what_arg) {}; 00128 }; 00129 00130 class __EXPORT InterruptException : public ThrException 00131 { 00132 public: 00133 inline InterruptException() : ThrException("interrupted") {}; 00134 }; 00135 00136 END_NAMESPACE 00137 00138 #endif 00139 00140 #endif