bx.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
  4. */
  5. #ifndef BX_H_HEADER_GUARD
  6. #define BX_H_HEADER_GUARD
  7. #include <alloca.h> // alloca
  8. #include <stdarg.h> // va_list
  9. #include <stdint.h> // uint32_t
  10. #include <stdlib.h> // size_t
  11. #include <stddef.h> // ptrdiff_t
  12. #include "platform.h"
  13. #include "config.h"
  14. #include "macros.h"
  15. ///
  16. #define BX_COUNTOF(_x) sizeof(bx::COUNTOF_REQUIRES_ARRAY_ARGUMENT(_x) )
  17. ///
  18. #define BX_IGNORE_C4127(_x) bx::ignoreC4127(!!(_x) )
  19. ///
  20. #define BX_ENABLED(_x) bx::isEnabled<!!(_x)>()
  21. namespace bx
  22. {
  23. /// Template for avoiding MSVC: C4127: conditional expression is constant
  24. template<bool>
  25. bool isEnabled();
  26. ///
  27. bool ignoreC4127(bool _x);
  28. ///
  29. template<typename Ty>
  30. void xchg(Ty& _a, Ty& _b);
  31. ///
  32. void xchg(void* _a, void* _b, size_t _numBytes);
  33. // http://cnicholson.net/2011/01/stupid-c-tricks-a-better-sizeof_array/
  34. template<typename T, size_t N>
  35. char (&COUNTOF_REQUIRES_ARRAY_ARGUMENT(const T(&)[N]) )[N];
  36. ///
  37. void memCopy(void* _dst, const void* _src, size_t _numBytes);
  38. ///
  39. void memCopy(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch, uint32_t _dstPitch);
  40. ///
  41. void gather(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _srcPitch);
  42. ///
  43. void scatter(void* _dst, const void* _src, uint32_t _size, uint32_t _num, uint32_t _dstPitch);
  44. ///
  45. void memMove(void* _dst, const void* _src, size_t _numBytes);
  46. ///
  47. void memSet(void* _dst, uint8_t _ch, size_t _numBytes);
  48. ///
  49. int32_t memCmp(const void* _lhs, const void* _rhs, size_t _numBytes);
  50. } // namespace bx
  51. #include "inline/bx.inl"
  52. #endif // BX_H_HEADER_GUARD