13 #ifndef ML_ERROR_MACROS_H
14 #define ML_ERROR_MACROS_H
19 #include <type_traits>
30 #pragma warning(disable: 4701)
31 #pragma warning(disable: 4702)
32 #pragma warning(disable: 4710)
33 #pragma warning(disable: 4097)
34 #pragma warning(disable: 4512)
35 #pragma warning(disable: 4127)
36 #pragma warning(disable: 4711)
38 #pragma warning(disable: 4127)
47 #if ML_DEPRECATED_SINCE(3,5,0)
48 #define ML_TRACE_IN(__classAndMethod___)
49 #define ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___)
52 #if ML_DEPRECATED_SINCE(3,5,0)
57 #define ML_TRACE_IN_TC(__classAndMethod___) ML_TRACE_IN_TIME_CRITICAL(__classAndMethod___)
59 #if defined(WIN32) && !defined(ML_NO_DEPRECATED_WARNINGS)
60 #pragma deprecated("ML_TRACE_IN_TC")
65 #if ML_DEPRECATED_SINCE(3,5,0)
66 #define ML_INTERNAL_ERROR_TRACE_IN(__classAndMethod___)
80 #define ML_CATCH_RETURN
81 #define ML_CATCH_RETURN_FALSE
82 #define ML_CATCH_RETURN_NULL
83 #define ML_CATCH_RETHROW
84 #define ML_CATCH_BLOCK(__paramType) if (MLAlwaysFalse)
87 #define ML_CATCH catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); }
88 #define ML_CATCH_RETURN catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); return; }
89 #define ML_CATCH_RETURN_FALSE catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); return false; }
90 #define ML_CATCH_RETURN_NULL catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); return 0; }
91 #define ML_CATCH_RETHROW catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_UNKNOWN_EXCEPTION); throw; }
92 #define ML_CATCH_BLOCK(__paramType) catch(__paramType)
95 #if ML_DEPRECATED_SINCE(3,5,0)
100 #define ML_CATCH_R ML_CATCH_RETURN
103 #define ML_CATCH_RF ML_CATCH_RETURN_FALSE
106 #define ML_CATCH_RN ML_CATCH_RETURN_NULL
108 #if defined(WIN32) && !defined(ML_NO_DEPRECATED_WARNINGS)
109 #pragma deprecated("ML_CATCH_R", "ML_CATCH_RF", "ML_CATCH_RN")
121 #define ML_CHECK(x) if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); }
123 #define ML_CHECK_ONLY_IN_DEBUG(x) ML_CHECK(x)
125 #define ML_CHECK_ONLY_IN_DEBUG(x)
127 #define ML_CHECK_RETURN(x) if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return; }
128 #define ML_CHECK_RETURN_FALSE(x) if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return false; }
129 #define ML_CHECK_RETURN_NULL(x) if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return 0; }
130 #define ML_CHECK_THROW(x) if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); throw ML_BAD_POINTER_OR_0; }
131 #define ML_CHECK_RUNTIME_TYPE(x) if (!(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_TYPE_NOT_REGISTERED); throw ML_TYPE_NOT_REGISTERED; }
134 #define ML_HARAKIRI MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0);
136 #if ML_DEPRECATED_SINCE(3,5,0)
141 #define ML_CHECK_R(x) ML_CHECK_RETURN(x)
144 #define ML_CHECK_RF(x) ML_CHECK_RETURN_FALSE(x)
147 #define ML_CHECK_RN(x) ML_CHECK_RETURN_NULL(x)
150 #define ML_CHECK_TH(x) ML_CHECK_THROW(x)
152 #if defined(WIN32) && !defined(ML_NO_DEPRECATED_WARNINGS)
153 #pragma deprecated("ML_CHECK_R", "ML_CHECK_RF", "ML_CHECK_RN", "ML_CHECK_TH")
164 #define ML_CHECK_FLOAT(x) if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); }
165 #define ML_CHECK_FLOAT_RETURN(x) if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return; }
166 #define ML_CHECK_FLOAT_RETURN_FALSE(x) if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return false; }
167 #define ML_CHECK_FLOAT_RETURN_NULL(x) if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); return 0; }
168 #define ML_CHECK_FLOAT_THROW(x) if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_BAD_POINTER_OR_0); throw ML_BAD_POINTER_OR_0; }
169 #define ML_CHECK_FLOAT_RUNTIME_TYPE(x) if (MLValueIs0WOM(x)){ MLPrintAndNotifyFatal(__FILE__, __LINE__, ML_TYPE_NOT_REGISTERED); throw ML_TYPE_NOT_REGISTERED; }
171 #if ML_DEPRECATED_SINCE(3,5,0)
176 #define ML_CHECK_FLT_R(x) ML_CHECK_FLOAT_RETURN(x)
179 #define ML_CHECK_FLT_RF(x) ML_CHECK_FLOAT_RETURN_FALSE(x)
182 #define ML_CHECK_FLT_RN(x) ML_CHECK_FLOAT_RETURN_NULL(x)
185 #define ML_CHECK_FLT_TH(x) ML_CHECK_FLOAT_THROW(x)
187 #if defined(WIN32) && !defined(ML_NO_DEPRECATED_WARNINGS)
188 #pragma deprecated("ML_CHECK_FLT_R", "ML_CHECK_FLT_RF", "ML_CHECK_FLT_RN", "ML_CHECK_FLT_TH")
200 #if ML_DEPRECATED_SINCE(3,5,0)
202 #ifndef ML_NO_DEPRECATED_WARNINGS
203 [[deprecated(
"ML_CHECK_NEW and ML_CHECK_NEW_TH from mlErrorMacros.h are deprecated since MeVisLab 3.5.0. Please use 'new' instead")]]
205 constexpr
auto ml_deprecated_since_350_assign_check_new(
T val) {
return val; }
207 #define ML_CHECK_NEW(var, exp) try{ (var) = ml_deprecated_since_350_assign_check_new(new exp); if (nullptr == (var)){ throw(ML_NO_MEMORY); } } catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, (nullptr == (var)) ? ML_NO_MEMORY : ML_CONSTRUCTOR_EXCEPTION); }
208 #define ML_CHECK_NEW_TH(var, exp) try{ (var) = ml_deprecated_since_350_assign_check_new(new exp); if (nullptr == (var)){ throw(ML_NO_MEMORY); } } catch(...){ MLPrintAndNotifyFatal(__FILE__, __LINE__, (nullptr == (var)) ? ML_NO_MEMORY : ML_CONSTRUCTOR_EXCEPTION); throw; }
211 #if ML_DEPRECATED_SINCE(3,5,0)
213 #ifndef ML_NO_DEPRECATED_WARNINGS
214 [[deprecated(
"ML_DELETE from mlErrorMacros.h is deprecated since MeVisLab 3.5.0. Please use 'delete' instead")]]
216 constexpr
auto ml_deprecated_since_350_delete(
T& val) {
delete val; val =
nullptr; }
218 #define ML_DELETE(var) ml_deprecated_since_350_delete((var));
221 #if ML_DEPRECATED_SINCE(3,5,0)
223 #ifndef ML_NO_DEPRECATED_WARNINGS
224 [[deprecated(
"ML_DELETE_ARRAY from mlErrorMacros.h is deprecated since MeVisLab 3.5.0. Please use 'delete[]' instead")]]
226 constexpr
auto ml_deprecated_since_350_delete_array(
T& val) {
delete[] val; val =
nullptr; }
227 #define ML_DELETE_ARRAY(var) ml_deprecated_since_350_delete_array((var));
231 #if ML_DEPRECATED_SINCE(3,5,0)
236 #define ML_DELETE_ARR(var) ML_DELETE_ARRAY(var)
238 #if defined(WIN32) && !defined(ML_NO_DEPRECATED_WARNINGS)
239 #pragma deprecated("ML_DELETE_ARR")
254 #define _ML_INFORMATION_ADD_ON(FUNC_NAME, REASON, HANDLING)
260 #define _ML_WARNING_ADD_ON(FUNC_NAME, REASON, HANDLING)
266 #define _ML_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING)
272 #define _ML_FATAL_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING)
279 #define _ML_ERROR_SHOW_ASSERT_BOX(PARAM)
307 #define _ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE) \
310 const ML_UTILS_NAMESPACE::RuntimeType *rtt7645 = nullptr; \
311 try{ rtt7645 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rtt7645 = nullptr; }\
312 _ML_FATAL_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING) \
313 ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_FATAL, \
314 ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
315 __FILE__, __LINE__, RT_OBJ, rtt7645); \
316 _ML_ERROR_SHOW_ASSERT_BOX(0); \
333 #define _ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE) \
336 const ML_UTILS_NAMESPACE::RuntimeType *rtt1987 = nullptr; \
337 try{ rtt1987 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rtt1987 = nullptr; }\
338 _ML_ERROR_ADD_ON(FUNC_NAME, REASON, HANDLING) \
339 ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_ERROR, \
340 ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
341 __FILE__, __LINE__, RT_OBJ, rtt1987); \
342 _ML_ERROR_SHOW_ASSERT_BOX(0); \
360 #define _ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE) \
363 const ML_UTILS_NAMESPACE::RuntimeType *rt9477 = nullptr; \
364 try{ rt9477 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rt9477 = nullptr; } \
365 _ML_WARNING_ADD_ON(FUNC_NAME, REASON, HANDLING) \
366 ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_WARNING, \
367 ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
368 __FILE__, __LINE__, RT_OBJ, rt9477); \
387 #define _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, RTYPE) \
390 const ML_UTILS_NAMESPACE::RuntimeType *rtAx598 = nullptr; \
391 try{ rtAx598 = RTYPE; if (MLAlwaysFalse){ throw ML_UNKNOWN_EXCEPTION;} } catch(...){ rtAx598 = nullptr; }\
392 _ML_INFORMATION_ADD_ON(FUNC_NAME, REASON, HANDLING) \
393 ML_UTILS_NAMESPACE::MLErrorOutput.printAndNotify(ML_INFORMATION, \
394 ML_PREFIX, "Function=", FUNC_NAME, REASON, HANDLING, \
395 __FILE__, __LINE__, RT_OBJ, rtAx598); \
412 #define ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
414 _ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : nullptr))
420 #define ML_PRINT_FATAL_ERROR_DUMP_NON_NULL(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
421 _ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (RT_OBJ)->getTypeId())
427 #define ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
429 _ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : nullptr))
435 #define ML_PRINT_ERROR_DUMP_NON_NULL(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
436 _ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (RT_OBJ)->getTypeId())
442 #define ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
444 _ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : nullptr))
450 #define ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) \
452 _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ, (((RT_OBJ) || MLAlwaysFalse) ? (RT_OBJ)->getTypeId() : nullptr))
471 #define ML_PRINT_FATAL_ERROR(FUNC_NAME, REASON, HANDLING) \
472 _ML_PRINT_FATAL_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, nullptr, nullptr)
480 #define ML_PRINT_ERROR(FUNC_NAME, REASON, HANDLING) \
481 _ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, nullptr, nullptr)
489 #define ML_PRINT_WARNING(FUNC_NAME, REASON, HANDLING) \
490 _ML_PRINT_WARNING_DUMP(FUNC_NAME, REASON, HANDLING, nullptr, nullptr)
498 #define ML_PRINT_INFORMATION(FUNC_NAME, REASON, HANDLING) \
499 _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, REASON, HANDLING, nullptr, nullptr)
506 #define ML_PRINT_INFO(FUNC_NAME, HANDLING) \
507 _ML_PRINT_INFORMATION_DUMP(FUNC_NAME, ML_RESULT_OK, HANDLING, nullptr, nullptr)