Diagnostics.h
Go to the documentation of this file.00001
00002
00003 #ifndef Diagnostics_INCLUDED
00004 #define Diagnostics_INCLUDED
00005
00006 #include "Exception.h"
00007
00008 namespace fortTkSupport {
00009
00015 class Diagnostics {
00016 public:
00017 static void setDiagnosticFilterLevel(int lvl);
00018 static int getDiagnosticFilterLevel();
00019 static const char* Unimplemented;
00020 static const char* UnexpectedInput;
00021 static const char* UnexpectedOpr;
00022
00023
00024
00025 static void theMostVisitedBreakpointInHistory(const char* filenm = NULL,
00026 unsigned int lineno = 0);
00027 private:
00032 static int ourUserDebugLevel;
00033 };
00034
00035 }
00036
00037
00038 #define FORTTK_DBG_LVL 0
00039
00040
00041 #define FORTTK_DIAGIF(level) if (level <= fortTkSupport::Diagnostics::getDiagnosticFilterLevel())
00042
00043
00044 #define FORTTK_DIAGIF_DEV(level) if (level <= FORTTK_DBG_LVL)
00045
00046
00047
00048
00049
00050
00051
00052 #define FORTTK_MSG(level, streamArgs) \
00053 if (level <= fortTkSupport::Diagnostics::getDiagnosticFilterLevel()) { \
00054 std::cerr << "FortTk: " << streamArgs << std::endl; }
00055
00056
00057
00058 #define FORTTK_DEVMSG(level, streamArgs) \
00059 if (level <= FORTTK_DBG_LVL) { \
00060 std::cerr << "FortTk[debugLevel=" << level << "]: " << streamArgs << std::endl; }
00061
00062
00063 #define FORTTK_EMSG(streamArgs) \
00064 { std::cerr << "FortTk: ERROR:"; \
00065 if (fortTkSupport::Diagnostics::getDiagnosticFilterLevel()) { \
00066 std::cerr << "[" << __FILE__ << ":" << __LINE__ << "]"; } \
00067 std::cerr << ": " << streamArgs << std::endl; }
00068
00069
00070 #define FORTTK_WMSG(streamArgs) \
00071 { std::cerr << "FortTk: WARNING:"; \
00072 if (fortTkSupport::Diagnostics::getDiagnosticFilterLevel()) { \
00073 std::cerr << "[" << __FILE__ << ":" << __LINE__ << "]"; } \
00074 std::cerr << ": " << streamArgs << std::endl; }
00075
00076
00077
00078 #define FORTTK_ASSERT(expr, streamArgs) \
00079 if (!(expr)) FORTTK_THROW(streamArgs)
00080
00081
00082
00083 #define FORTTK_ASSERT_WARN(expr, streamArgs) \
00084 if (!(expr)) FORTTK_WMSG(streamArgs)
00085
00086
00087
00088
00089 #define FORTTK_DIE(streamArgs) \
00090 FORTTK_THROW(streamArgs)
00091
00092
00093
00094
00095 #define FORTTK_THROW(streamArgs) \
00096 { std::ostringstream WeIrDnAmE; \
00097 WeIrDnAmE << streamArgs << std::ends; \
00098 throw fortTkSupport::FatalException(WeIrDnAmE.str(), __FILE__, __LINE__); }
00099
00100 #endif
00101