Exception.hpp
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 #ifndef _EXCEPTION_HPP_
00031 #define _EXCEPTION_HPP_
00032
00033 #include <string>
00034
00035 #include <cfloat>
00036 #include <climits>
00037 #include <cstdlib>
00038
00039 const unsigned UNSIGNED_UNSET=UINT_MAX;
00040 const int INT_UNSET=INT_MAX;
00041 const double DOUBLE_UNSET=DBL_MAX;
00042
00049 class Exception
00050 {
00051 private:
00052 std::string mMessage;
00053 std::string mShortMessage;
00055 public:
00063 Exception(const std::string& rMessage, const std::string& rFilename, unsigned lineNumber);
00064
00070 std::string GetMessage() const;
00071
00077 std::string GetShortMessage() const;
00078
00088 std::string CheckShortMessage(std::string expected) const;
00089
00099 std::string CheckShortMessageContains(std::string expected) const;
00100 };
00101
00102 #define EXCEPTION(message) throw Exception(message, __FILE__, __LINE__)
00103
00104 #define NEVER_REACHED EXCEPTION("Should have been impossible to reach this line of code")
00105
00106
00107
00108 #ifdef NDEBUG
00109 #define UNUSED_OPT(var) var=var
00110 #else
00111 #define UNUSED_OPT(var)
00112 #endif
00113
00114
00115 #define EXPECT0(cmd, arg) { \
00116 std::string _arg = (arg); \
00117 int ret = cmd(_arg.c_str()); \
00118 if (ret != 0) { \
00119 EXCEPTION("Error executing command: " #cmd "(" + _arg + ")"); \
00120 } }
00121
00122 #define MPIABORTIFNON0(cmd, arg) { \
00123 std::string _arg = (arg); \
00124 int ret = cmd(_arg.c_str()); \
00125 if (ret != 0) { \
00126 std::cout << "Error executing command: " #cmd "(" + _arg + ")"; \
00127 MPI_Abort(PETSC_COMM_WORLD, -1); \
00128 } }
00129
00130
00131 #define EXPECTNON0(cmd, arg) { \
00132 std::string _arg = (arg); \
00133 int ret = cmd(_arg.c_str()); \
00134 if (ret == 0) { \
00135 EXCEPTION("Command: " #cmd "(" + _arg + ") succeeded and it shouldn't have"); \
00136 } }
00137
00138
00139
00140 #define IGNORE_RET(cmd, arg) { \
00141 std::string _arg = (arg); \
00142 int ret = cmd(_arg.c_str()); \
00143 ret = ret; \
00144 }
00145
00146 #endif // _EXCEPTION_HPP_