Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _EXCEPTION_H_
00014 #define _EXCEPTION_H_
00015
00016
00017 #include <string>
00018 #include "dllexport.h"
00019
00020
00021 #ifdef HAVE_LIBEBT
00022
00023 #include <libebt/libebt.hh>
00024 #include <libebt/libebt_util.hh>
00025
00026 struct ExceptionTag { };
00027 typedef libebt::BacktraceContext<ExceptionTag, std::string> Context;
00028
00029
00034
00035 class DLLDIR Exception : public libebt::Backtraceable<ExceptionTag>,
00036 public std::exception {
00037 protected:
00038 const std::string _message;
00039 const int _error_number;
00040
00041 public:
00042 Exception(const std::string & message, const int error_number) throw () :
00043 libebt::Backtraceable<ExceptionTag>(),
00044 std::exception(),
00045 _message(message), _error_number(error_number) {
00046 }
00047
00048 virtual ~Exception() throw () {
00049 }
00050
00051 std::string message() const throw() {
00052 return _message;
00053 }
00054 const char* what() const throw() {
00055 return _message.c_str();
00056 }
00057
00058 const int error_number() const throw() {
00059 return _error_number;
00060 }
00061 };
00062
00066
00067 #else // HAVE_LIBEBT
00068
00073
00074
00075 struct DLLDIR Context {
00076 Context(const char*) {}
00077 };
00078
00079 class DLLDIR Exception : public std::exception {
00080 protected:
00081 const std::string _message;
00082 const int _error_number;
00083
00084 public:
00085 Exception(const std::string & message, const int error_number) throw () :
00086 std::exception(),
00087 _message(message), _error_number(error_number) {
00088 }
00089
00090 virtual ~Exception() throw () {
00091 }
00092
00093 std::string message() const throw() {
00094 return _message;
00095 }
00096 const char* what() const throw() {
00097 return _message.c_str();
00098 }
00099
00100 int error_number() const throw() {
00101 return _error_number;
00102 }
00103 };
00104
00108
00109
00110 #endif
00111
00112 #endif