67 lines
2.6 KiB

  1. #ifndef STORM_UTILITY_MACROS_H_
  2. #define STORM_UTILITY_MACROS_H_
  3. #include "src/utility/logging.h"
  4. #include <iostream>
  5. #include <cassert>
  6. // Define STORM_LOG_ASSERT which is only checked when NDEBUG is not set.
  7. #ifndef NDEBUG
  8. #define STORM_LOG_ASSERT(cond, message) \
  9. do { \
  10. if (!(cond)) { \
  11. STORM_LOG_ERROR(message); \
  12. assert(cond); \
  13. } \
  14. } while (false)
  15. #else
  16. #define STORM_LOG_ASSERT(cond, message)
  17. #endif
  18. // Define STORM_LOG_THROW to always throw the exception with the given message if the condition fails to hold.
  19. #define STORM_LOG_THROW(cond, exception, message) \
  20. do { \
  21. if (!(cond)) { \
  22. STORM_LOG_ERROR(message); \
  23. throw exception() << message; \
  24. } \
  25. } while (false)
  26. #define STORM_LOG_WARN_COND(cond, message) \
  27. do { \
  28. if (!(cond)) { \
  29. STORM_LOG_WARN(message); \
  30. } \
  31. } while (false)
  32. #define STORM_LOG_INFO_COND(cond, message) \
  33. do { \
  34. if (!(cond)) { \
  35. STORM_LOG_INFO(message); \
  36. } \
  37. } while (false)
  38. #define STORM_LOG_ERROR_COND(cond, message) \
  39. do { \
  40. if (!(cond)) { \
  41. STORM_LOG_ERROR(message); \
  42. } \
  43. } while (false) \
  44. /*!
  45. * Define the macros that print information and optionally also log it.
  46. */
  47. #define STORM_PRINT(message) \
  48. { \
  49. std::cout << message; \
  50. }
  51. #define STORM_PRINT_AND_LOG(message) \
  52. { \
  53. STORM_LOG_INFO(message); \
  54. STORM_PRINT(message); \
  55. }
  56. #endif /* STORM_UTILITY_MACROS_H_ */