GNU CommonC++
|
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 CCXX_EXCEPTION_H_ 00045 #define CCXX_EXCEPTION_H_ 00046 00047 #ifndef CCXX_CONFIG_H_ 00048 #include <cc++/config.h> 00049 #endif 00050 00051 #ifndef CCXX_STRING_H_ 00052 #include <cc++/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(HAVE_EXCEPTION) 00059 #define COMMON_STD_EXCEPTION 00060 00061 #include <exception> 00062 00063 #ifdef CCXX_NAMESPACES 00064 namespace ost { 00065 #endif 00066 00075 class __EXPORT Exception : public std::exception 00076 { 00077 private: 00078 String _what; 00079 00080 public: 00081 Exception(const String& what_arg) throw(); 00082 virtual ~Exception() throw(); 00083 virtual const char *getString() const; 00084 virtual const char *what() const throw(); 00085 }; 00086 00093 class __EXPORT IOException : public Exception 00094 { 00095 private: 00096 long _systemError; 00097 mutable char* _systemErrorString; 00098 00099 public: 00100 IOException(const String &what_arg, long systemError = 0) throw(); 00101 virtual ~IOException() throw(); 00102 00103 virtual long getSystemError() const throw(); 00104 virtual const char* getSystemErrorString() const throw(); 00105 }; 00106 00113 class __EXPORT ThrException : public Exception 00114 { 00115 public: 00116 ThrException(const String &what_arg) : Exception(what_arg) {}; 00117 }; 00118 00125 class __EXPORT SyncException : public ThrException 00126 { 00127 public: 00128 SyncException(const String &what_arg) : ThrException(what_arg) {}; 00129 }; 00130 00131 class __EXPORT InterruptException : public ThrException 00132 { 00133 public: 00134 InterruptException() : ThrException("interrupted") {}; 00135 }; 00136 00137 00138 #ifdef CCXX_NAMESPACES 00139 } 00140 #endif 00141 00142 #endif 00143 00144 #endif