ucommon
commoncpp/exception.h
Go to the documentation of this file.
00001 // Copyright (C) 1999-2005 Open Source Telecom Corporation.
00002 // Copyright (C) 2006-2014 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 Lesser General Public License
00015 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 // As a special exception, you may use this file as part of a free software
00018 // library without restriction.  Specifically, if other files instantiate
00019 // templates or use macros or inline functions from this file, or you compile
00020 // this file and link it with other files to produce an executable, this
00021 // file does not by itself cause the resulting executable to be covered by
00022 // the GNU General Public License.  This exception does not however
00023 // invalidate any other reasons why the executable file might be covered by
00024 // the GNU General Public License.
00025 //
00026 // This exception applies only to the code released under the name GNU
00027 // Common C++.  If you copy code from other releases into a copy of GNU
00028 // Common C++, as the General Public License permits, the exception does
00029 // not apply to the code that you add in this way.  To avoid misleading
00030 // anyone as to the status of such modified files, you must delete
00031 // this exception notice from them.
00032 //
00033 // If you write modifications of your own for GNU Common C++, it is your choice
00034 // whether to permit this exception to apply to your modifications.
00035 // If you do not wish that, delete this exception notice.
00036 //
00037 
00043 #ifndef COMMONCPP_EXCEPTION_H_
00044 #define COMMONCPP_EXCEPTION_H_
00045 
00046 #ifndef COMMONCPP_CONFIG_H_
00047 #include <commoncpp/config.h>
00048 #endif
00049 
00050 #ifndef COMMONCPP_STRING_H_
00051 #include <commoncpp/string.h>
00052 #endif
00053 
00054 // see if we support useful and std exception handling, else we ignore
00055 // it for the rest of the system.
00056 
00057 #if defined(CCXX_EXCEPTIONS)
00058 #define COMMONCPP_EXCEPTIONS
00059 
00060 #include <exception>
00061 #include <stdexcept>
00062 
00063 namespace ost {
00064 
00073 class __EXPORT Exception : public std::exception
00074 {
00075 private:
00076     String _what;
00077 
00078 public:
00079     Exception(const String& what_arg) throw();
00080     virtual ~Exception() throw();
00081     virtual const char *getString() const;
00082     virtual const char *what() const throw();
00083 };
00084 
00091 class __EXPORT IOException : public Exception
00092 {
00093 private:
00094     long _systemError;
00095     mutable char* _systemErrorString;
00096 
00097 public:
00098     IOException(const String &what_arg, long systemError = 0) throw();
00099     virtual ~IOException() throw();
00100 
00101     virtual long getSystemError() const throw();
00102     virtual const char* getSystemErrorString() const throw();
00103 };
00104 
00111 class __EXPORT ThrException : public Exception
00112 {
00113 public:
00114     inline ThrException(const String &what_arg) : Exception(what_arg) {}
00115 };
00116 
00123 class __EXPORT SyncException : public ThrException
00124 {
00125 public:
00126     inline SyncException(const String &what_arg) : ThrException(what_arg) {}
00127 };
00128 
00129 class __EXPORT InterruptException : public ThrException
00130 {
00131 public:
00132     inline InterruptException() : ThrException("interrupted") {}
00133 };
00134 
00135 } // namespace ost
00136 
00137 #endif
00138 
00139 #endif