00001
00002
00003
00004
00005
00006
00007
00008
00009 #//! RoadError -- All exceptions thrown by Qhull are RoadErrors
00010 #//! Do not throw RoadError's from destructors. Use e.logError() instead.
00011
00012 #include "RoadError.h"
00013
00014 #include <string>
00015 #include <sstream>
00016 #include <iostream>
00017
00018 using std::cerr;
00019 using std::cout;
00020 using std::string;
00021
00022 #ifdef _MSC_VER // Microsoft Visual C++ -- warning level 4
00023 #endif
00024
00025 namespace orgQhull {
00026
00027 #//Class fields
00028
00031 const char * RoadError::
00032 ROADtag= "QH";
00033
00034 std::ostringstream RoadError::
00035 global_log;
00036
00037 #//Constructor
00038
00039 RoadError::
00040 RoadError()
00041 : error_code(0)
00042 , log_event()
00043 , error_message()
00044 { }
00045
00046 RoadError::
00047 RoadError(const RoadError &other)
00048 : error_code(other.error_code)
00049 , log_event(other.log_event)
00050 , error_message(other.error_message)
00051 {
00052 }
00053
00054 RoadError::
00055 RoadError(int code, const std::string &message)
00056 : error_code(code)
00057 , log_event(message.c_str())
00058 , error_message(log_event.toString(ROADtag, error_code))
00059 {
00060 log_event.cstr_1= error_message.c_str();
00061 }
00062
00063 RoadError::
00064 RoadError(int code, const char *fmt)
00065 : error_code(code)
00066 , log_event(fmt)
00067 , error_message()
00068 { }
00069
00070 RoadError::
00071 RoadError(int code, const char *fmt, int d)
00072 : error_code(code)
00073 , log_event(fmt, d)
00074 , error_message()
00075 { }
00076
00077 RoadError::
00078 RoadError(int code, const char *fmt, int d, int d2)
00079 : error_code(code)
00080 , log_event(fmt, d, d2)
00081 , error_message()
00082 { }
00083
00084 RoadError::
00085 RoadError(int code, const char *fmt, int d, int d2, float f)
00086 : error_code(code)
00087 , log_event(fmt, d, d2, f)
00088 , error_message()
00089 { }
00090
00091 RoadError::
00092 RoadError(int code, const char *fmt, int d, int d2, float f, const char *s)
00093 : error_code(code)
00094 , log_event(fmt, d, d2, f, s)
00095 , error_message(log_event.toString(ROADtag, code))
00096 { }
00097
00098 RoadError::
00099 RoadError(int code, const char *fmt, int d, int d2, float f, const void *x)
00100 : error_code(code)
00101 , log_event(fmt, d, d2, f, x)
00102 , error_message()
00103 { }
00104
00105 RoadError::
00106 RoadError(int code, const char *fmt, int d, int d2, float f, int i)
00107 : error_code(code)
00108 , log_event(fmt, d, d2, f, i)
00109 , error_message()
00110 { }
00111
00112 RoadError::
00113 RoadError(int code, const char *fmt, int d, int d2, float f, long long i)
00114 : error_code(code)
00115 , log_event(fmt, d, d2, f, i)
00116 , error_message()
00117 { }
00118
00119 RoadError::
00120 RoadError(int code, const char *fmt, int d, int d2, float f, double e)
00121 : error_code(code)
00122 , log_event(fmt, d, d2, f, e)
00123 , error_message()
00124 { }
00125
00126 RoadError & RoadError::
00127 operator=(const RoadError &other)
00128 {
00129 error_code= other.error_code;
00130 error_message= other.error_message;
00131 log_event= other.log_event;
00132 return *this;
00133 }
00134
00135 #//Virtual
00136 const char * RoadError::
00137 what() const throw()
00138 {
00139 if(error_message.empty()){
00140 error_message= log_event.toString(ROADtag, error_code);
00141 }
00142 return error_message.c_str();
00143 }
00144
00145 #//Updates
00146
00148 void RoadError::
00149 logError() const
00150 {
00151 global_log << what() << endl;
00152 }
00153
00154
00155 }
00156