| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #pragma once
- #include <iostream>
- #include <sstream>
- #if defined(__clang__) || defined(__GNUC__)
- #define JVALIDATE_LIKELY(x) __builtin_expect(!!(x), 1)
- #define JVALIDATE_UNLIKELY(x) __builtin_expect(!!(x), 0)
- #else
- #define JVALIDATE_LIKELY(x) (x)
- #define JVALIDATE_UNLIKELY(x) (x)
- #endif
- #if defined(JVALIDATE_USE_EXCEPTIONS)
- #define JVALIDATE_THROW(extype, message) \
- do { \
- std::stringstream ss; \
- ss << message; \
- throw extype(ss.str()); \
- } while (false)
- #else
- #define JVALIDATE_THROW(extype, message) \
- do { \
- std::cerr << message << std::endl; \
- std::terminate(); \
- } while (false)
- #endif
- #define EXPECT_T(condition, extype, message) \
- if (JVALIDATE_UNLIKELY(!(condition))) { \
- JVALIDATE_THROW(extype, message); \
- }
- #define EXPECT_M(condition, message) EXPECT_T(condition, std::runtime_error, message)
- #define EXPECT(condition) EXPECT_M(condition, #condition)
- #define RETURN_UNLESS(condition, ...) \
- if (JVALIDATE_UNLIKELY(!(condition))) { \
- return __VA_ARGS__; \
- }
|