00001 #ifndef GSGL_DATA_EXCEPTION_H
00002 #define GSGL_DATA_EXCEPTION_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifdef WIN32
00039 #ifdef GSGL_DATA_EXPORTS
00040 #define DATA_API __declspec(dllexport)
00041 #else
00042 #define DATA_API __declspec(dllimport)
00043 #endif
00044 #else
00045 #define DATA_API
00046 #endif
00047
00048
00049 namespace gsgl
00050 {
00051
00052 class DATA_API exception
00053 {
00054 protected:
00055 wchar_t *message;
00056 exception();
00057 public:
00058 exception(const wchar_t *format, ...);
00059 virtual ~exception();
00060
00061 const wchar_t *get_message() const;
00062 };
00063
00064
00065
00066
00067 class DATA_API internal_exception
00068 : public exception
00069 {
00070 protected:
00071 char *fname;
00072 int line;
00073 internal_exception(const char *fname, const int line);
00074 public:
00075 internal_exception(const char *fname, const int line, const wchar_t *format, ...);
00076 virtual ~internal_exception();
00077 };
00078
00079
00080 class DATA_API memory_exception
00081 : public internal_exception
00082 {
00083 public:
00084 memory_exception(const char *fname, const int line, const wchar_t *format, ...);
00085 };
00086
00087
00088
00089
00090 class DATA_API opengl_exception
00091 : public internal_exception
00092 {
00093 public:
00094 opengl_exception(const char *fname, const int line, const wchar_t *format, ...);
00095 };
00096
00097
00098
00099
00100 class DATA_API assert_exception
00101 : public internal_exception
00102 {
00103 public:
00104 assert_exception(const char *fname, const int line, const char *message);
00105 };
00106
00107
00108
00109
00110 class DATA_API runtime_exception
00111 : public exception
00112 {
00113 protected:
00114 runtime_exception();
00115 public:
00116 runtime_exception(const wchar_t *format, ...);
00117 };
00118
00119
00120 class DATA_API io_exception
00121 : public runtime_exception
00122 {
00123 public:
00124 io_exception(const wchar_t *format, ...);
00125 };
00126
00127
00128
00129
00130 #ifdef assert
00131 #undef assert
00132 #endif
00133
00134 #ifdef DEBUG
00135 #define assert(test) { if (!(test)) throw gsgl::assert_exception(__FILE__, __LINE__, #test); }
00136 #else
00137 #define assert(test)
00138 #endif
00139
00140 }
00141
00142 #endif