lzham_assert.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // File: lzham_assert.h
  2. // See Copyright Notice and license at the end of include/lzham.h
  3. #pragma once
  4. const unsigned int LZHAM_FAIL_EXCEPTION_CODE = 256U;
  5. void lzham_enable_fail_exceptions(bool enabled);
  6. void lzham_assert(const char* pExp, const char* pFile, unsigned line);
  7. void lzham_fail(const char* pExp, const char* pFile, unsigned line);
  8. #ifdef NDEBUG
  9. #define LZHAM_ASSERT(x) ((void)0)
  10. #else
  11. #define LZHAM_ASSERT(_exp) (void)( (!!(_exp)) || (lzham_assert(#_exp, __FILE__, __LINE__), 0) )
  12. #define LZHAM_ASSERTS_ENABLED 1
  13. #endif
  14. #define LZHAM_VERIFY(_exp) (void)( (!!(_exp)) || (lzham_assert(#_exp, __FILE__, __LINE__), 0) )
  15. #define LZHAM_FAIL(msg) do { lzham_fail(#msg, __FILE__, __LINE__); } while(0)
  16. #define LZHAM_ASSERT_OPEN_RANGE(x, l, h) LZHAM_ASSERT((x >= l) && (x < h))
  17. #define LZHAM_ASSERT_CLOSED_RANGE(x, l, h) LZHAM_ASSERT((x >= l) && (x <= h))
  18. void lzham_trace(const char* pFmt, va_list args);
  19. void lzham_trace(const char* pFmt, ...);
  20. // Borrowed from boost libraries.
  21. template <bool x> struct assume_failure;
  22. template <> struct assume_failure<true> { enum { blah = 1 }; };
  23. template<int x> struct assume_try { };
  24. #define LZHAM_JOINER_FINAL(a, b) a##b
  25. #define LZHAM_JOINER(a, b) LZHAM_JOINER_FINAL(a, b)
  26. #define LZHAM_JOIN(a, b) LZHAM_JOINER(a, b)
  27. #if defined(__GNUC__)
  28. #define LZHAM_ASSUME(p) typedef assume_try < sizeof(assume_failure< (bool)(p) > ) > LZHAM_JOIN(assume_typedef, __COUNTER__) __attribute__((unused))
  29. #else
  30. #define LZHAM_ASSUME(p) typedef assume_try < sizeof(assume_failure< (bool)(p) > ) > LZHAM_JOIN(assume_typedef, __COUNTER__)
  31. #endif