include/SDL_atomic.h
changeset 5006 8e8876e4aec6
parent 5005 7f0265279b68
child 5012 2e282002bac3
equal deleted inserted replaced
5005:7f0265279b68 5006:8e8876e4aec6
   105  */
   105  */
   106 extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock);
   106 extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock);
   107 
   107 
   108 /*@}*//*SDL AtomicLock*/
   108 /*@}*//*SDL AtomicLock*/
   109 
   109 
   110 /* Platform specific optimized versions of the atomic functions */
   110 /* Platform specific optimized versions of the atomic functions,
   111 #if defined(__WIN32__) && defined(_INC_WINDOWS)
   111  * you can disable these by defining SDL_DISABLE_ATOMIC_INLINE
       
   112  */
       
   113 #ifndef SDL_DISABLE_ATOMIC_INLINE
       
   114 
       
   115 #if defined(__WIN32__)
   112 /* Don't include windows.h, since it may hose code that isn't expecting it,
   116 /* Don't include windows.h, since it may hose code that isn't expecting it,
   113    but if someone has already included it, this is fair game... */
   117    but if someone has already included it, this is fair game... */
   114 #if 0
       
   115 #define WIN32_LEAN_AND_MEAN
   118 #define WIN32_LEAN_AND_MEAN
   116 #include <windows.h>
   119 #include <windows.h>
   117 #endif
       
   118 
   120 
   119 #define SDL_AtomicSet(a, v)     InterlockedExchange(&(a)->value, v)
   121 #define SDL_AtomicSet(a, v)     InterlockedExchange(&(a)->value, v)
   120 #define SDL_AtomicGet(a)        ((a)->value)
   122 #define SDL_AtomicGet(a)        ((a)->value)
   121 #define SDL_AtomicAdd(a, v)     InterlockedAdd(&(a)->value, v)
   123 #define SDL_AtomicAdd(a, v)     InterlockedAdd(&(a)->value, v)
   122 #define SDL_AtomicCAS(a, oldval, newval) (InterlockedCompareExchange(&(a)->value, newval, oldval) == (oldval))
   124 #define SDL_AtomicCAS(a, oldval, newval) (InterlockedCompareExchange(&(a)->value, newval, oldval) == (oldval))
   167 #define SDL_AtomicGetPtr(a)     (*(a))
   169 #define SDL_AtomicGetPtr(a)     (*(a))
   168 #define SDL_AtomicCASPtr(a, oldval, newval) __sync_bool_compare_and_swap(a, oldval, newval)
   170 #define SDL_AtomicCASPtr(a, oldval, newval) __sync_bool_compare_and_swap(a, oldval, newval)
   169 
   171 
   170 #endif
   172 #endif
   171 
   173 
       
   174 #endif /* !SDL_DISABLE_ATOMIC_INLINE */
       
   175 
       
   176 
   172 /**
   177 /**
   173  * \brief A type representing an atomic integer value.  It is a struct
   178  * \brief A type representing an atomic integer value.  It is a struct
   174  *        so people don't accidentally use numeric operations on it.
   179  *        so people don't accidentally use numeric operations on it.
   175  */
   180  */
   176 #ifndef SDL_atomic_t_defined
   181 #ifndef SDL_atomic_t_defined