AtomicImpl-c-api.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #pragma once
  2. #include <stdint.h>
  3. #ifndef NOMINMAX
  4. #define NOMINMAX
  5. #endif
  6. #define WIN32_LEAN_AND_MEAN 1
  7. #define INC_OLE2 1
  8. #include <Windows.h>
  9. #if defined(__cplusplus)
  10. extern "C" {
  11. #endif
  12. static inline int32_t UnityPalCompareExchange(volatile int32_t* dest, int32_t exchange, int32_t comparand)
  13. {
  14. return InterlockedCompareExchange((long volatile*)dest, exchange, comparand);
  15. }
  16. static inline int64_t UnityPalCompareExchange64(volatile int64_t* dest, int64_t exchange, int64_t comparand)
  17. {
  18. return InterlockedCompareExchange64((long long volatile*)dest, exchange, comparand);
  19. }
  20. static inline void* UnityPalCompareExchangePointer(void* volatile* dest, void* exchange, void* comparand)
  21. {
  22. return InterlockedCompareExchangePointer(dest, exchange, comparand);
  23. }
  24. static inline int32_t UnityPalAdd(volatile int32_t* location1, int32_t value)
  25. {
  26. return (InterlockedExchangeAdd((long volatile*)location1, value) + value);
  27. }
  28. static inline int64_t UnityPalAdd64(volatile int64_t* location1, int64_t value)
  29. {
  30. return (InterlockedExchangeAdd64((long long volatile*)location1, value) + value);
  31. }
  32. static inline int32_t UnityPalIncrement(volatile int32_t* value)
  33. {
  34. return InterlockedIncrement((long volatile*)value);
  35. }
  36. static inline int64_t UnityPalIncrement64(volatile int64_t* value)
  37. {
  38. return InterlockedIncrement64(value);
  39. }
  40. static inline int32_t UnityPalDecrement(volatile int32_t* value)
  41. {
  42. return InterlockedDecrement((long volatile*)value);
  43. }
  44. static inline int64_t UnityPalDecrement64(volatile int64_t* value)
  45. {
  46. return InterlockedDecrement64((long long volatile*)value);
  47. }
  48. static inline int64_t UnityPalExchange64(volatile int64_t* dest, int64_t exchange)
  49. {
  50. return InterlockedExchange64(dest, exchange);
  51. }
  52. static inline int32_t UnityPalExchange(volatile int32_t* dest, int32_t exchange)
  53. {
  54. return InterlockedExchange((long volatile*)dest, exchange);
  55. }
  56. static inline void* UnityPalExchangePointer(void* volatile* dest, void* exchange)
  57. {
  58. return InterlockedExchangePointer(dest, exchange);
  59. }
  60. static inline int64_t UnityPalRead64(volatile int64_t* addr)
  61. {
  62. return InterlockedCompareExchange64((long long volatile*)addr, 0, 0);
  63. }
  64. #if defined(__cplusplus)
  65. }
  66. #endif