Arbutils/src/Ensure.hpp

37 lines
1.9 KiB
C++
Raw Normal View History

2020-09-24 18:40:21 +00:00
/** @file */
#include "Exception.hpp"
2020-03-22 10:14:47 +00:00
/// \defgroup Ensure Ensure
/// \brief A set of ensure macros.
2020-03-22 10:14:47 +00:00
#ifndef NO_ENSURE
/// @brief Ensures an expression is true. Throws an exception if the assertion fails.
/// @ingroup Ensure
#define Ensure(expr) \
2020-03-22 11:20:39 +00:00
if (!(expr)) { \
std::stringstream ss; \
ss << "[" << file_name(__FILE__) << ":" << __LINE__ << "] ENSURE FAILED: \""; \
2020-03-22 11:20:39 +00:00
ss << #expr << "\""; \
throw ArbUt::Exception(ss.str()); \
2020-03-22 11:02:02 +00:00
}
2020-09-24 18:40:21 +00:00
/// @brief Ensures an expression is true for a range. The value in the range can be retrieved using ``item``.
/// @ingroup Ensure
#define EnsureForEach(iterator, assertion) \
2020-04-28 14:55:00 +00:00
{ \
2020-09-24 18:40:21 +00:00
for (auto item : (iterator)) \
Ensure(assertion) \
2020-04-28 14:55:00 +00:00
}
2020-03-22 10:14:47 +00:00
#else
// Ensure is empty if NO_ENSURE is defined.
#define Ensure(expr) ;
#define EnsureForEach(iterator, assertion) ;
2020-03-22 10:14:47 +00:00
#endif
/// @brief Ensures a pointer is not null.
/// @ingroup Ensure
#define EnsureNotNull(value) Ensure((value) != nullptr)
/// @brief Ensures a range is not null.
/// @ingroup Ensure
#define EnsureAllNotNull(iterator) EnsureForEach(iterator, item != nullptr)