00001 #if !defined(__MCEXCEPT_H_)
00002 #define __MCEXCEPT_H_
00003
00004 #ident "@(#)$Id: MCExcept.h,v 1.6 2004/12/02 07:05:20 mike Exp $"
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #if defined(WIN32)
00026 #pragma warning(disable:4290)
00027 #endif
00028 #include <exception>
00029 #include "mcllib/MCSrcMsg.h"
00030
00031 namespace mcllib
00032 {
00033
00034 class MCStringStream;
00035
00049 class MCExcept : public std::exception
00050 {
00051 public:
00061 MCExcept(const MCSrcMsg& msg);
00068 MCExcept(const char* exStr);
00073 const MCSrcMsg& getMsg() const;
00074
00076 virtual ~MCExcept() throw();
00078 virtual const char* what() const throw();
00079
00080 protected:
00086 void complete(const MCStringStream& mcss);
00087
00089 virtual void suffix(MCStringStream& mcss);
00091 virtual void prefix(MCStringStream& mcss);
00093 MCExcept();
00095 void setFileLine(const char* file, MCSrcMsg::linenum_t line);
00096
00097 private:
00098 MCSrcMsg m_msg;
00099 };
00100
00108 class MCExceptFatal : public MCExcept
00109 {
00110 public:
00116 MCExceptFatal(const MCSrcMsg& msg);
00120 MCExceptFatal(const char* exStr);
00121
00123 virtual ~MCExceptFatal() throw();
00124
00125 protected:
00127 MCExceptFatal();
00128 };
00129
00130
00139 void MCLogExcept(const std::exception& ex);
00140
00141 };
00142
00143 #endif