16 #ifndef epicsAtomicMS_h 17 #define epicsAtomicMS_h 25 #ifndef EPICS_ATOMIC_INCR_INTT 26 #define EPICS_ATOMIC_INCR_INTT 35 #ifndef EPICS_ATOMIC_DECR_INTT 36 #define EPICS_ATOMIC_DECR_INTT 45 #ifndef EPICS_ATOMIC_ADD_INTT 46 #define EPICS_ATOMIC_ADD_INTT 57 #ifndef EPICS_ATOMIC_CAS_INTT 58 #define EPICS_ATOMIC_CAS_INTT 60 int oldVal,
int newVal )
69 #if ! defined ( MS_ATOMIC_64 ) 79 #ifndef EPICS_ATOMIC_INCR_SIZET 80 #define EPICS_ATOMIC_INCR_SIZET 88 #ifndef EPICS_ATOMIC_DECR_SIZET 89 #define EPICS_ATOMIC_DECR_SIZET 97 #ifndef EPICS_ATOMIC_ADD_SIZET 98 #define EPICS_ATOMIC_ADD_SIZET 109 #ifndef EPICS_ATOMIC_SUB_SIZET 110 #define EPICS_ATOMIC_SUB_SIZET 120 #ifndef EPICS_ATOMIC_CAS_SIZET 121 #define EPICS_ATOMIC_CAS_SIZET 124 size_t oldVal,
size_t newVal )
132 #ifndef EPICS_ATOMIC_CAS_PTRT 133 #define EPICS_ATOMIC_CAS_PTRT 149 STATIC_ASSERT (
sizeof ( MS_LONGLONG ) ==
sizeof (
size_t ) );
151 #ifndef EPICS_ATOMIC_INCR_SIZET 152 #define EPICS_ATOMIC_INCR_SIZET 155 MS_LONGLONG *
const pTarg = ( MS_LONGLONG * ) pTarget;
156 return (
size_t ) MS_InterlockedIncrement64 ( pTarg );
160 #ifndef EPICS_ATOMIC_DECR_SIZET 161 #define EPICS_ATOMIC_DECR_SIZET 164 MS_LONGLONG *
const pTarg = ( MS_LONGLONG * ) ( pTarget );
165 return (
size_t ) MS_InterlockedDecrement64 ( pTarg );
169 #ifndef EPICS_ATOMIC_ADD_SIZET 170 #define EPICS_ATOMIC_ADD_SIZET 173 MS_LONGLONG *
const pTarg = ( MS_LONGLONG * ) ( pTarget );
175 return delta + ( size_t ) MS_InterlockedExchangeAdd64 ( pTarg,
176 ( MS_LONGLONG ) delta );
180 #ifndef EPICS_ATOMIC_SUB_SIZET 181 #define EPICS_ATOMIC_SUB_SIZET 184 MS_LONGLONG *
const pTarg = ( MS_LONGLONG * ) ( pTarget );
185 MS_LONGLONG ldelta = (MS_LONGLONG) delta;
187 return ((
size_t ) MS_InterlockedExchangeAdd64 ( pTarg, -ldelta )) - delta;
191 #ifndef EPICS_ATOMIC_CAS_SIZET 192 #define EPICS_ATOMIC_CAS_SIZET 194 size_t oldVal,
size_t newVal )
196 MS_LONGLONG *
const pTarg = ( MS_LONGLONG * ) ( pTarget );
197 return (
size_t) MS_InterlockedCompareExchange64 ( pTarg,
198 (MS_LONGLONG) newVal,
199 (MS_LONGLONG) oldVal );
203 #ifndef EPICS_ATOMIC_CAS_PTRT 204 #define EPICS_ATOMIC_CAS_PTRT 209 MS_LONGLONG *
const pTarg = ( MS_LONGLONG * ) ( pTarget );
211 (MS_LONGLONG) newVal, (MS_LONGLONG) oldVal );
EPICS_ATOMIC_INLINE size_t epicsAtomicAddSizeT(size_t *pTarget, size_t delta)
#define MS_InterlockedIncrement
EPICS_ATOMIC_INLINE int epicsAtomicDecrIntT(int *pTarget)
An EPICS-specific replacement for ANSI C's assert.
EPICS_ATOMIC_INLINE size_t epicsAtomicSubSizeT(size_t *pTarget, size_t delta)
EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicCmpAndSwapPtrT(EpicsAtomicPtrT *pTarget, EpicsAtomicPtrT oldVal, EpicsAtomicPtrT newVal)
STATIC_ASSERT(sizeof(MS_LONG)==sizeof(size_t))
#define MS_InterlockedCompareExchange
#define EPICS_ATOMIC_INLINE
EPICS_ATOMIC_INLINE size_t epicsAtomicDecrSizeT(size_t *pTarget)
#define MS_InterlockedDecrement
EPICS_ATOMIC_INLINE int epicsAtomicIncrIntT(int *pTarget)
#define MS_InterlockedExchangeAdd
EPICS_ATOMIC_INLINE size_t epicsAtomicCmpAndSwapSizeT(size_t *pTarget, size_t oldVal, size_t newVal)
EPICS_ATOMIC_INLINE int epicsAtomicCmpAndSwapIntT(int *pTarget, int oldVal, int newVal)
EPICS_ATOMIC_INLINE size_t epicsAtomicIncrSizeT(size_t *pTarget)
EPICS_ATOMIC_INLINE int epicsAtomicAddIntT(int *pTarget, int delta)