ML Reference
MeVis/Foundation/Sources/MLUtilities/mlErrorMacros.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //----------------------------------------------------------------------------------
00005 
00010 //----------------------------------------------------------------------------------
00011 
00012 #ifndef __mlErrorMacros_H
00013 #define __mlErrorMacros_H
00014 
00015 #include "mlMacros.h"
00016 
00017 // ------------------------------------------------------
00018 // Disabling some bogus warnings in MeVis release mode
00019 // ------------------------------------------------------
00020 #if defined(_MSC_VER)
00021   #pragma warning(push)
00022   #if !defined(_DEBUG)
00023     #pragma warning(disable: 4701)  // local variable *may* be used without init
00024     #pragma warning(disable: 4702)  // unreachable code
00025     #pragma warning(disable: 4710)  // private constructors are disallowed 
00026     #pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
00027     #pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
00028     #pragma warning(disable: 4127)  // conditional expression is constant
00029     #pragma warning(disable: 4711)  // selected for automatic inline expansion
00030   #endif
00031   #pragma warning(disable: 4127)    // conditional expression is constant
00032 #endif
00033 
00034 #include "mlLogging.h"
00035 
00036 #if defined(_MSC_VER)
00037   #pragma warning(pop)
00038 #endif
00039 //----------------------------------------------------------------------------------
00040 //
00041 // MeVis implementation of error and tracing macros. 
00042 //
00043 //----------------------------------------------------------------------------------
00044 
00047 #ifdef _DEBUG
00048   #ifdef ML_COMPILE_DEBUG_EXCEPTION_HANDLING
00049     #undef ML_SUPPRESS_DIAGNOSIS
00050   #endif
00051 #endif
00052 
00053 
00054 #ifndef ML_SUPPRESS_DIAGNOSIS
00055 
00056   #ifdef _DEBUG
00057     #ifndef ML_COMPILE_DEBUG_EXCEPTION_HANDLING
00058 
00059 
00060       #define ML_SUPPRESS_DIAGNOSIS
00061     #endif
00062 
00063   #else  // _DEBUG
00064 
00065     // In release mode the try/catch mechanisms are compiled such that 
00066     // maximum stability of the application and logging is reached.
00067     // #define ML_SUPPRESS_DIAGNOSIS
00068 
00069   #endif // _DEBUG
00070 
00071 #endif // ifndef ML_SUPPRESS_DIAGNOSIS
00072 
00073 
00074 
00075 //---------------------------------------------------------------------------
00076 // Compile diagnosis and error checking macros if ML_SUPPRESS_DIAGNOSIS is 
00077 // not defined. Then tracing and try/catching of errors is activated.
00078 // However exact debugging of error positions not possible any more.
00079 //---------------------------------------------------------------------------
00080 #ifndef ML_SUPPRESS_DIAGNOSIS
00081 
00082   //-----------------------------------------------------------------
00083   /* This area is used for the mode comparable to the release mode */
00084   //-----------------------------------------------------------------
00085 
00086   //---------------------------------------------------------------------------
00088 
00089   //---------------------------------------------------------------------------
00090   #define ML_TRACE_IN(__classAndMethod___)      static const char * const __ML_TRACE_IN_STRING_BUF = __FILE__ ":" __classAndMethod___; \
00091                                                 ml::Trace<MLuint16> __MLTraceObject(__ML_TRACE_IN_STRING_BUF, ml::MLGlobalTraceBuffer);
00092 
00093   // Specialized tracing macro for time critical code. Usually only compiled for diagnostics versions.
00094   #ifdef ML_COMPILE_ML_TRACE_IN_TIME_CRITICAL
00095     // Compile even ML_TRACE_IN_TIME_CRITICAL if explicitly enabled.
00096     #define ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___) ML_TRACE_IN(__classAndMethod___)
00097   #else
00098     // Normally do not compile ML_TRACE_IN_TIME_CRITICAL since it's time critical.
00099     #define ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___)
00100   #endif
00101 
00102 #ifdef ML_DEPRECATED
00103 
00104 
00105 
00106 
00107   #define ML_TRACE_IN_TC(__classAndMethod___) ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___)
00108  
00109   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00110   #pragma deprecated("ML_TRACE_IN_TC")
00111   #endif
00112 
00113 #endif // ML_DEPRECATED
00114 
00115   // Specialized tracing macro for diagnostic function inside of the ML. These function 
00116   // are considered reliable and are only traced if explicitly enabled with definition 
00117   // ML_COMPILE_ML_INTERNAL_ERROR_TRACE_IN. In normal case they are not traced to avoid 
00118   // that normal error handling functions inside the ML are also traced.
00119   // Enabled usually only in diagnostic versions.
00120   #ifdef ML_COMPILE_ML_INTERNAL_ERROR_TRACE_IN
00121 
00122     #define ML_INTERNAL_ERROR_TRACE_IN(__classAndMethod___)   ML_TRACE_IN(__classAndMethod___)
00123   #else
00124     // Normally do not compile ML_TRACE_IN_TIME_CRITICAL since it's time critical.
00125     #define ML_INTERNAL_ERROR_TRACE_IN(__classAndMethod___)
00126   #endif
00127 
00128 
00129 
00130   //----------------------------------------
00132 
00133   //----------------------------------------
00134   #define ML_TRY                       try
00135 
00136   #define ML_CATCH                     catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); }
00137   #define ML_CATCH_RETURN              catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); return; }
00138   #define ML_CATCH_RETURN_FALSE        catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); return false; }
00139   #define ML_CATCH_RETURN_NULL         catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); return 0; }
00140   #define ML_CATCH_RETHROW             catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); throw; }
00141   #define ML_CATCH_BLOCK(__paramType)  catch(__paramType)
00142 
00143 #ifdef ML_DEPRECATED
00144 
00145 
00146 
00147 
00148   #define ML_CATCH_R   ML_CATCH_RETURN
00149 
00150 
00151   #define ML_CATCH_RF  ML_CATCH_RETURN_FALSE
00152 
00153 
00154   #define ML_CATCH_RN  ML_CATCH_RETURN_NULL
00155 
00156   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00157   #pragma deprecated("ML_CATCH_R", "ML_CATCH_RF", "ML_CATCH_RN")
00158   #endif
00159 
00160 
00161 #endif // ML_DEPRECATED
00162 
00163 
00164 
00165   //----------------------------------------
00167 
00168   //----------------------------------------
00169   #define ML_CHECK(x)                if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); }
00170   #define ML_CHECK_ONLY_IN_DEBUG(x)  /* Behaves like assert, not compiled in release mode */
00171   #define ML_CHECK_RETURN(x)         if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return; }
00172   #define ML_CHECK_RETURN_FALSE(x)   if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return false; }
00173   #define ML_CHECK_RETURN_NULL(x)    if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return 0; }
00174   #define ML_CHECK_THROW(x)          if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); throw ML_BAD_POINTER_OR_0; }
00175   #define ML_CHECK_RUNTIME_TYPE(x)   if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_TYPE_NOT_REGISTERED); throw ML_TYPE_NOT_REGISTERED; }
00176 
00177 #ifdef ML_DEPRECATED
00178 
00179 
00180 
00181 
00182   #define ML_CHECK_R(x)   ML_CHECK_RETURN(x)
00183 
00184 
00185   #define ML_CHECK_RF(x)  ML_CHECK_RETURN_FALSE(x)
00186 
00187 
00188   #define ML_CHECK_RN(x)  ML_CHECK_RETURN_NULL(x)
00189 
00190 
00191   #define ML_CHECK_TH(x)  ML_CHECK_THROW(x)
00192 
00193   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00194   #pragma deprecated("ML_CHECK_R", "ML_CHECK_RF", "ML_CHECK_RN", "ML_CHECK_TH")
00195   #endif
00196 
00197 #endif // ML_DEPRECATED
00198 
00199 
00200 
00201   //----------------------------------------
00203 
00204   //----------------------------------------
00205   #define ML_CHECK_FLOAT(x)               if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); }
00206   #define ML_CHECK_FLOAT_RETURN(x)        if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return; }
00207   #define ML_CHECK_FLOAT_RETURN_FALSE(x)  if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return false; }
00208   #define ML_CHECK_FLOAT_RETURN_NULL(x)   if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return 0; }
00209   #define ML_CHECK_FLOAT_THROW(x)         if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); throw ML_BAD_POINTER_OR_0; }
00210   #define ML_CHECK_FLOAT_RUNTIME_TYPE(x)  if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_TYPE_NOT_REGISTERED); throw ML_TYPE_NOT_REGISTERED; }
00211 
00212 #ifdef ML_DEPRECATED
00213 
00214 
00215 
00216 
00217   #define ML_CHECK_FLT_R(x)   ML_CHECK_FLOAT_RETURN(x)
00218 
00219 
00220   #define ML_CHECK_FLT_RF(x)  ML_CHECK_FLOAT_RETURN_FALSE(x)
00221 
00222 
00223   #define ML_CHECK_FLT_RN(x)  ML_CHECK_FLOAT_RETURN_NULL(x)
00224 
00225 
00226   #define ML_CHECK_FLT_TH(x)  ML_CHECK_FLOAT_THROW(x)
00227 
00228   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00229   #pragma deprecated("ML_CHECK_FLT_R", "ML_CHECK_FLT_RF", "ML_CHECK_FLT_RN", "ML_CHECK_FLT_TH")
00230   #endif
00231 
00232 #endif // ML_DEPRECATED
00233 
00234 
00235 
00236   //----------------------------------------
00238 
00239   //----------------------------------------
00240   #define ML_CHECK_NEW(var, exp)     try{ (var) = new exp; if (NULL == (var)){ throw(ML_NO_MEMORY); } } catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, (NULL == (var)) ? ML_NO_MEMORY : ML_CONSTRUCTOR_EXCEPTION); }
00241   #define ML_CHECK_NEW_TH(var, exp)  try{ (var) = new exp; if (NULL == (var)){ throw(ML_NO_MEMORY); } } catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, (NULL == (var)) ? ML_NO_MEMORY : ML_CONSTRUCTOR_EXCEPTION); throw; }
00242   #define ML_DELETE(var)             if (0 !=(var)){ delete  (var); (var) = 0; }
00243   #define ML_DELETE_ARRAY(var)       if (0 !=(var)){ delete[](var); (var) = 0; }
00244 
00245 #ifdef ML_DEPRECATED
00246 
00247 
00248 
00249 
00250   #define ML_DELETE_ARR(var) ML_DELETE_ARRAY(var)
00251 
00252   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00253   #pragma deprecated("ML_DELETE_ARR")
00254   #endif
00255 
00256 #endif // ML_DEPRECATED
00257 
00258 
00259 #else // of "ifndef ML_SUPPRESS_DIAGNOSIS"
00260 
00261   //---------------------------------------------------------------
00262   /* This area is used for the mode comparable to the debug mode */
00263   //---------------------------------------------------------------
00264 
00265   //----------------------------------------
00267 
00268   //----------------------------------------
00269   #if 1
00270     // Here we are in the normal "debug" mode. We do not compile any exception handlers nor tracing 
00271     // here. Thus we disable also the tracing macro, because tracing is used typically only in release 
00272     // mode where the application continues, crashes are suppressed as far as possible and diagnosis is 
00273     // only possible with tracing information in log files.
00274     // In debug mode we let everything crash and tracing is not needed, because we have all information
00275     // available in debugger call stacks etc. For internal developer purposes it also could be enabled 
00276     // here.
00277     #define ML_TRACE_IN(__classAndMethod___)      
00278   #else
00279     #define ML_TRACE_IN(__classAndMethod___)    static const char * const __ML_TRACE_IN_STRING_BUF =  __FILE__ ":" __classAndMethod___; \
00280                                                 ml::Trace<MLuint16> __MLTraceObject(__ML_TRACE_IN_STRING_BUF, ml::MLGlobalTraceBuffer);
00281   #endif
00282 
00283 
00284   #ifdef ML_COMPILE_ML_TRACE_IN_TIME_CRITICAL
00285     // Compile even ML_TRACE_IN_TIME_CRITICAL if explicitly enabled.
00286     #define ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___)  ML_TRACE_IN(__classAndMethod___)
00287   #else
00288     // Normally do not compile ML_TRACE_IN_TIME_CRITICAL since it's time critical.
00289     #define ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___)
00290   #endif
00291 
00292 #ifdef ML_DEPRECATED
00293 
00294 
00295 
00296 
00297   #define ML_TRACE_IN_TC(__classAndMethod___)  ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___)
00298 
00299   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00300   #pragma deprecated("ML_TRACE_IN_TC")
00301   #endif
00302 
00303 #endif // ML_DEPRECATED
00304 
00305   // Specialized tracing macro for diagnostic function inside of the ML. These function 
00306   // are considered reliable and are only traced if explicitly enabled with definition 
00307   // ML_COMPILE_ML_INTERNAL_ERROR_TRACE_IN. In normal case they are not traced to avoid that normal
00308   // error handling functions inside the ML are also traced.
00309   // Enabled usually only in diagnostic versions.
00310   #ifdef ML_COMPILE_ML_INTERNAL_ERROR_TRACE_IN
00311     // Compile ML_INTERNAL_ERROR_TRACE_IN only if explicitly enabled.
00312     #define ML_INTERNAL_ERROR_TRACE_IN(__classAndMethod___)   ML_TRACE_IN(__classAndMethod___)
00313   #else
00314     // Normally do not compile ML_INTERNAL_ERROR_TRACE_IN since it's disturbs normal tracing outputs.
00315     #define ML_INTERNAL_ERROR_TRACE_IN(__classAndMethod___)
00316   #endif
00317 
00318 
00319 
00320   //----------------------------------------
00322 
00323   //----------------------------------------
00324   #define ML_TRY                                
00325 
00326   #define ML_CATCH                              
00327   #define ML_CATCH_RETURN                            
00328   #define ML_CATCH_RETURN_FALSE                           
00329   #define ML_CATCH_RETURN_NULL                           
00330   #define ML_CATCH_RETHROW                      
00331   #define ML_CATCH_BLOCK(__paramType)           if (MLAlwaysFalse)
00332 
00333 #ifdef ML_DEPRECATED
00334 
00335 
00336 
00337 
00338   #define ML_CATCH_R   ML_CATCH_RETURN
00339 
00340 
00341   #define ML_CATCH_RF  ML_CATCH_RETURN_FALSE
00342 
00343 
00344   #define ML_CATCH_RN  ML_CATCH_RETURN_NULL
00345 
00346   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00347   #pragma deprecated("ML_CATCH_R", "ML_CATCH_RF", "ML_CATCH_RN")
00348   #endif
00349 
00350 #endif // ML_DEPRECATED
00351 
00352 
00353   //----------------------------------------------------------------------------------------
00355 
00356   //----------------------------------------------------------------------------------------
00357   #define ML_CHECK(x)                if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0);};
00358   #define ML_CHECK_ONLY_IN_DEBUG(x)  ML_CHECK(x)
00359   #define ML_CHECK_RETURN(x)         if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return;}
00360   #define ML_CHECK_RETURN_FALSE(x)   if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return false;}
00361   #define ML_CHECK_RETURN_NULL(x)    if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return 0;}
00362   #define ML_CHECK_THROW(x)          if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); throw ML_BAD_POINTER_OR_0;}
00363   #define ML_CHECK_RUNTIME_TYPE(x)   if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_TYPE_NOT_REGISTERED); throw ML_TYPE_NOT_REGISTERED;}
00364 
00365 #ifdef ML_DEPRECATED
00366 
00367 
00368 
00369 
00370   #define ML_CHECK_R(x)   ML_CHECK_RETURN(x)
00371 
00372 
00373   #define ML_CHECK_RF(x)  ML_CHECK_RETURN_FALSE(x)
00374 
00375 
00376   #define ML_CHECK_RN(x)  ML_CHECK_RETURN_NULL(x)
00377 
00378 
00379   #define ML_CHECK_TH(x)  ML_CHECK_THROW(x)
00380 
00381   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00382   #pragma deprecated("ML_CHECK_R", "ML_CHECK_RF", "ML_CHECK_RN", "ML_CHECK_TH")
00383   #endif
00384 
00385 #endif // ML_DEPRECATED
00386 
00388 
00389   //----------------------------------------
00391 
00392   //----------------------------------------
00393   #define ML_CHECK_FLOAT(x)               if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); }
00394   #define ML_CHECK_FLOAT_RETURN(x)        if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return; }
00395   #define ML_CHECK_FLOAT_RETURN_FALSE(x)  if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return false; }
00396   #define ML_CHECK_FLOAT_RETURN_NULL(x)   if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return 0; }
00397   #define ML_CHECK_FLOAT_THROW(x)         if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); throw ML_BAD_POINTER_OR_0; }
00398   #define ML_CHECK_FLOAT_RUNTIME_TYPE(x)  if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_TYPE_NOT_REGISTERED); throw ML_TYPE_NOT_REGISTERED; }
00399 
00400 #ifdef ML_DEPRECATED
00401 
00402 
00403 
00404 
00405   #define ML_CHECK_FLT_R(x)   ML_CHECK_FLT_RETURN(x)
00406 
00407 
00408   #define ML_CHECK_FLT_RF(x)  ML_CHECK_FLT_RETURN_FALSE(x)
00409 
00410 
00411   #define ML_CHECK_FLT_RN(x)  ML_CHECK_FLT_RETURN_NULL(x)
00412 
00413 
00414   #define ML_CHECK_FLT_TH(x)  ML_CHECK_FLT_THROW(x)
00415 
00416   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00417   #pragma deprecated("ML_CHECK_FLT_R", "ML_CHECK_FLT_RF", "ML_CHECK_FLT_RN", "ML_CHECK_FLT_TH")
00418   #endif
00419 
00420 #endif // ML_DEPRECATED
00421 
00422 
00423 
00424   //----------------------------------------
00426 
00427   //----------------------------------------
00428   #define ML_CHECK_NEW(var, exp)     (var) = new exp; 
00429   #define ML_CHECK_NEW_TH(var, exp)  (var) = new exp; 
00430   #define ML_DELETE(var)             if (0 !=(var)){ delete  (var); (var) = 0; }
00431   #define ML_DELETE_ARRAY(var)       if (0 !=(var)){ delete[](var); (var) = 0; }
00432 
00433 #ifdef ML_DEPRECATED
00434 
00435 
00436 
00437 
00438   #define ML_DELETE_ARR(var) ML_DELETE_ARRAY(var)
00439   
00440   #if defined(WIN32) && defined(ML_WARN_DEPRECATED)
00441   #pragma deprecated("ML_DELETE_ARR")
00442   #endif
00443 
00444 #endif // ML_DEPRECATED
00445 
00446 
00447 
00448 #endif // ifdef ML_SUPPRESS_DIAGNOSIS
00449 
00450 
00451 //-----------------------------------------------------------------------------------------------
00453 
00454 //-----------------------------------------------------------------------------------------------
00459 #define _ML_INFORMATION_ADD_ON(FUNC_NAME, REASON, HANDLING)
00460 
00465 #define _ML_WARNING_ADD_ON(FUNC_NAME, REASON, HANDLING)
00466 
00471 #define _ML_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING)
00472 
00477 #define _ML_FATAL_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING)
00478 
00484 #define _ML_ERROR_SHOW_ASSERT_BOX(PARAM)
00485 
00486 
00487 
00488 
00489 
00490 
00491 //--------------------------------------------------------------------------------------------
00492 //
00494 
00495 //
00496 //--------------------------------------------------------------------------------------------
00497 
00498 //--------------------------------------------------------------------------------------------
00511 //--------------------------------------------------------------------------------------------
00512 #define _ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE)                              \
00513     {                                                                                                       \
00514       /* Get runtime information from RTYPE which could be a crashing expression.*/                         \
00515       const ML_UTILS_NAMESPACE::RuntimeType *rtt7645 = NULL;                                                \
00516       try{ rtt7645 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rtt7645 = NULL; }\
00517       _ML_FATAL_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING)                                                   \
00518       ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_FATAL,                                            \
00519                                                        ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
00520                                                        __FILE__, __LINE__, RT_OBJ, rtt7645);                \
00521       _ML_ERROR_SHOW_ASSERT_BOX(0);                                                                         \
00522     }
00523 
00524 //--------------------------------------------------------------------------------------------
00537 //--------------------------------------------------------------------------------------------
00538 #define _ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE)                                    \
00539     {                                                                                                       \
00540       /* Get runtime information from RTYPE which could be a crashing expression.*/                         \
00541       const ML_UTILS_NAMESPACE::RuntimeType *rtt1987 = NULL;                                                \
00542       try{ rtt1987 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rtt1987 = NULL; }\
00543       _ML_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING)                                                         \
00544       ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_ERROR,                                            \
00545                                                        ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
00546                                                        __FILE__, __LINE__, RT_OBJ, rtt1987);                \
00547       _ML_ERROR_SHOW_ASSERT_BOX(0);                                                                         \
00548     }
00549 
00550 //--------------------------------------------------------------------------------------------
00564 //--------------------------------------------------------------------------------------------
00565 #define _ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE)                                  \
00566     {                                                                                                       \
00567       /* Get runtime information from RTYPE which could be a crashing expression.*/                         \
00568       const ML_UTILS_NAMESPACE::RuntimeType *rt9477 = NULL;                                                 \
00569       try{ rt9477 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rt9477 = NULL; }  \
00570       _ML_WARNING_ADD_ON(FUNC_NAME, REASON, HANDLING)                                                       \
00571       ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_WARNING,                                          \
00572                                                        ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
00573                                                        __FILE__, __LINE__, RT_OBJ, rt9477);                 \
00574       /* No showing of assert box here. That would be to drastic. */                                        \
00575     }
00576 
00577 //--------------------------------------------------------------------------------------------
00591 //--------------------------------------------------------------------------------------------
00592 #define _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE)                              \
00593     {                                                                                                       \
00594       /* Get runtime information from RTYPE which could be a crashing expression.*/                         \
00595       const ML_UTILS_NAMESPACE::RuntimeType *rtAx598 = NULL;                                                \
00596       try{ rtAx598 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rtAx598 = NULL; }\
00597       _ML_INFORMATION_ADD_ON(FUNC_NAME, REASON, HANDLING)                                                   \
00598       ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_INFORMATION,                                      \
00599                                                        ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
00600                                                        __FILE__, __LINE__, RT_OBJ, rtAx598);                \
00601       /* No showing of assert box here. That would be to drastic. */                                        \
00602     }
00603 
00604 
00605 
00606 
00607 //--------------------------------------------------------------------------------------------
00608 //
00610 
00611 //
00612 //--------------------------------------------------------------------------------------------
00613 //--------------------------------------------------------------------------------------------
00616 //--------------------------------------------------------------------------------------------
00617 #define ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
00618   /* Use OR with MLAlwaysFalse to avoid compiler warnings about unreachable code when constant RT_OBJ is passed from other macro. */ \
00619   _ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : NULL))
00620 
00621 //--------------------------------------------------------------------------------------------
00624 //--------------------------------------------------------------------------------------------
00625 #define ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
00626   /* Use OR with MLAlwaysFalse to avoid compiler warnings about unreachable code when constant RT_OBJ is passed from other macro. */ \
00627   _ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : NULL))
00628 
00629 //--------------------------------------------------------------------------------------------
00632 //--------------------------------------------------------------------------------------------
00633 #define ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
00634   /* Use OR with MLAlwaysFalse to avoid compiler warnings about unreachable code when constant RT_OBJ is passed from other macro. */ \
00635   _ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : NULL))
00636 
00637 //--------------------------------------------------------------------------------------------
00640 //--------------------------------------------------------------------------------------------
00641 #define ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
00642   /* Use OR with MLAlwaysFalse to avoid compiler warnings about unreachable code when constant RT_OBJ is passed from other macro. */ \
00643   _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : NULL))
00644 
00646 
00647 
00648 
00649 //--------------------------------------------------------------------------------------------
00650 //
00652 
00653 //
00654 //--------------------------------------------------------------------------------------------
00655 
00656 //--------------------------------------------------------------------------------------------
00661 //--------------------------------------------------------------------------------------------
00662 #define ML_PRINT_FATAL_ERROR(FUNC_NAME, REASON, HANDLING) \
00663   _ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, NULL, NULL)
00664 
00665 //--------------------------------------------------------------------------------------------
00670 //--------------------------------------------------------------------------------------------
00671 #define ML_PRINT_ERROR(FUNC_NAME, REASON, HANDLING) \
00672   _ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, NULL, NULL)
00673 
00674 //--------------------------------------------------------------------------------------------
00679 //--------------------------------------------------------------------------------------------
00680 #define ML_PRINT_WARNING(FUNC_NAME, REASON, HANDLING) \
00681   _ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, NULL, NULL)
00682 
00683 //--------------------------------------------------------------------------------------------
00688 //--------------------------------------------------------------------------------------------
00689 #define ML_PRINT_INFORMATION(FUNC_NAME, REASON, HANDLING) \
00690   _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, NULL, NULL)
00691 
00692 //--------------------------------------------------------------------------------------------
00696 //--------------------------------------------------------------------------------------------
00697 #define ML_PRINT_INFO(FUNC_NAME, HANDLING) \
00698   _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, ML_RESULT_OK, HANDLING, NULL, NULL)
00699 
00701 
00702 
00703 
00704 
00705 #endif // __mlErrorMacros_H
00706 
00707