Go to the documentation of this file.00001
00002
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 #ifndef OPENMS_CONCEPT_GLOBALEXCEPTIONHANDLER_H
00036 #define OPENMS_CONCEPT_GLOBALEXCEPTIONHANDLER_H
00037
00038 #include <OpenMS/CONCEPT/Types.h>
00039 #include <OpenMS/CONCEPT/Exception.h>
00040
00041 #include <string>
00042
00043 namespace OpenMS
00044 {
00045
00046 namespace Exception
00047 {
00048
00054 class OPENMS_DLLAPI GlobalExceptionHandler
00055 {
00056 private:
00060
00077 GlobalExceptionHandler()
00078 throw();
00079
00081
00083 GlobalExceptionHandler(const GlobalExceptionHandler &) {}
00084
00085 ~GlobalExceptionHandler() {}
00086 public:
00087
00089 static GlobalExceptionHandler & getInstance()
00090 {
00091 static GlobalExceptionHandler * globalExceptionHandler_;
00092
00093 if (globalExceptionHandler_ == 0)
00094 {
00095 globalExceptionHandler_ = new GlobalExceptionHandler;
00096 }
00097 return *globalExceptionHandler_;
00098 }
00099
00103
00106 static void setName(const std::string & name)
00107 throw();
00108
00111 static void setMessage(const std::string & message)
00112 throw();
00113
00116 static void setLine(int line)
00117 throw();
00118
00121 static void setFile(const std::string & file)
00122 throw();
00123
00126 static void setFunction(const std::string & function)
00127 throw();
00128
00131 static void set(const std::string & file, int line, const std::string & function,
00132 const std::string & name, const std::string & message)
00133 throw();
00135 protected:
00136
00138 static void terminate()
00139 throw();
00140
00142 #ifdef OPENMS_COMPILER_MSVC
00143 static void newHandler();
00144 #else
00145 static void newHandler() throw(OutOfMemory);
00146 #endif
00147
00156
00158 static std::string & file_()
00159 {
00160 static std::string * file_ = 0;
00161 if (file_ == 0)
00162 {
00163 file_ = new std::string;
00164 *file_ = "unknown";
00165 }
00166 return *file_;
00167 }
00168
00170 static int & line_()
00171 {
00172 static int * line_ = 0;
00173 if (line_ == 0)
00174 {
00175 line_ = new int;
00176 *line_ = -1;
00177 }
00178 return *line_;
00179 }
00180
00182 static std::string & function_()
00183 {
00184 static std::string * function_ = 0;
00185 if (function_ == 0)
00186 {
00187 function_ = new std::string;
00188 *function_ = "unknown";
00189 }
00190 return *function_;
00191 }
00192
00194 static std::string & name_()
00195 {
00196 static std::string * name_ = 0;
00197 if (name_ == 0)
00198 {
00199 name_ = new std::string;
00200 *name_ = "unknown exception";
00201 }
00202 return *name_;
00203 }
00204
00206 static std::string & what_()
00207 {
00208 static std::string * what_ = 0;
00209 if (what_ == 0)
00210 {
00211 what_ = new std::string;
00212 *what_ = " - ";
00213 }
00214 return *what_;
00215 }
00216
00218 };
00219
00220 }
00221
00222 }
00223
00224 #endif // OPENMS_CONCEPT_GLOBALEXCEPTIONHANDLER_H