00001 /* 00002 * xyzzy 00003 * Copyright (C) 2007 Karl W. Pfalzer 00004 * 00005 * This program is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU General Public License 00007 * as published by the Free Software Foundation; either version 2 00008 * of the License, or (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the 00017 * Free Software Foundation, Inc. 00018 * 51 Franklin Street, Fifth Floor 00019 * Boston, MA 02110-1301, USA. 00020 */ 00021 00022 #if !defined(_xyzzy_exception_hxx_) 00023 # define _xyzzy_exception_hxx_ 00024 00025 namespace xyzzy 00026 { 00027 class TException; 00028 00031 class TException 00032 { 00033 public: 00036 explicit TException() 00037 : m_reason(stNoReason) 00038 {} 00039 00043 explicit TException(const char* reason) 00044 : m_reason(reason) 00045 {} 00046 00047 const char* getReason() const 00048 { 00049 return m_reason; 00050 } 00051 00055 void print() const; 00056 00057 virtual ~TException(); 00058 00059 protected: 00062 const char* m_reason; 00063 00064 private: 00065 static const char* const stNoReason; 00066 }; 00067 00068 void invariant(bool cond) throw(TException); 00069 00071 class TNullPointerException : public TException 00072 { 00073 public: 00074 explicit TNullPointerException(); 00075 }; 00076 00078 class TDynamicCastException : public TException 00079 { 00080 public: 00081 explicit TDynamicCastException(); 00082 }; 00083 }; 00084 00085 #endif //_xyzzy_exception_hxx_