/** @file */ #include "Exception.hpp" /// \defgroup Ensure Ensure /// \brief A set of ensure macros. #ifndef NO_ENSURE /// @brief Ensures an expression is true. Throws an exception if the assertion fails. /// @ingroup Ensure #define Ensure(expr) \ if (!(expr)) { \ std::stringstream ss; \ ss << "[" << file_name(__FILE__) << ":" << __LINE__ << "] ENSURE FAILED: \""; \ ss << #expr << "\""; \ throw ArbUt::Exception(ss.str()); \ } /// @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) \ { \ for (auto item : (iterator)) \ Ensure(assertion) \ } #else // Ensure is empty if NO_ENSURE is defined. #define Ensure(expr) ; #define EnsureForEach(iterator, assertion) ; #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)