00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef OM_HGUARD_OMERROR_H
00026 #define OM_HGUARD_OMERROR_H
00027
00028 #include <string>
00029
00030 #include "om/omtypes.h"
00031
00032 class OmErrorHandler;
00033
00035 class OmError {
00036 friend class OmErrorHandler;
00037 private:
00039 std::string msg;
00040
00042 std::string context;
00043
00045 std::string type;
00046
00048 int errno_value;
00049
00051 bool has_been_handled;
00052
00054 void operator=(const OmError ©me);
00055 protected:
00059 OmError(const std::string &msg_,
00060 const std::string &context_,
00061 const std::string &type_,
00062 int errno_value_);
00063
00064 OmError(const OmError ©me)
00065 : msg(copyme.msg),
00066 context(copyme.context),
00067 type(copyme.type),
00068 errno_value(copyme.errno_value),
00069 has_been_handled(copyme.has_been_handled) {}
00070 public:
00074 std::string get_msg() const
00075 {
00076 return msg;
00077 }
00078
00080 std::string get_type() const
00081 {
00082 return type;
00083 }
00084
00086 std::string get_context() const
00087 {
00088 return context;
00089 }
00090
00092 int get_errno() const
00093 {
00094 return errno_value;
00095 }
00096
00098
00099
00100 virtual ~OmError();
00101 };
00102
00103 inline OmError::~OmError() {}
00104
00105 #define DEFINE_ERROR_BASECLASS(a, b) \
00106 class a : public b { \
00107 protected: \
00108 \
00109 a(const std::string &msg_, \
00110 const std::string &context_, \
00111 const std::string &type_, \
00112 int errno_value_) : b(msg_, context_, type_, errno_value_) {}; \
00113 }
00114
00115 #define DEFINE_ERROR_CLASS(a, b) \
00116 class a : public b { \
00117 public: \
00118 \
00119 a(const std::string &msg_, \
00120 const std::string &context_ = "", \
00121 int errno_value_ = 0) : b(msg_, context_, #a, errno_value_) {}; \
00122 \
00123 a(const std::string &msg_, \
00124 int errno_value_) : b(msg_, "", #a, errno_value_) {}; \
00125 protected: \
00126 \
00127 a(const std::string &msg_, \
00128 const std::string &context_, \
00129 const std::string &type_, \
00130 int errno_value_) : b(msg_, context_, type_, errno_value_) {}; \
00131 }
00132
00133 #include "om/omerrortypes.h"
00134
00135 #undef DEFINE_ERROR_BASECLASS
00136 #undef DEFINE_ERROR_CLASS
00137
00138 #endif