This is Unofficial EPICS BASE Doxygen Site
epicsAtomicMS.h File Reference
#include "epicsAssert.h"
+ Include dependency graph for epicsAtomicMS.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define EPICS_ATOMIC_INCR_INTT
 
#define EPICS_ATOMIC_DECR_INTT
 
#define EPICS_ATOMIC_ADD_INTT
 
#define EPICS_ATOMIC_CAS_INTT
 
#define EPICS_ATOMIC_INCR_SIZET
 
#define EPICS_ATOMIC_DECR_SIZET
 
#define EPICS_ATOMIC_ADD_SIZET
 
#define EPICS_ATOMIC_SUB_SIZET
 
#define EPICS_ATOMIC_CAS_SIZET
 
#define EPICS_ATOMIC_CAS_PTRT
 

Functions

EPICS_ATOMIC_INLINE int epicsAtomicIncrIntT (int *pTarget)
 
EPICS_ATOMIC_INLINE int epicsAtomicDecrIntT (int *pTarget)
 
EPICS_ATOMIC_INLINE int epicsAtomicAddIntT (int *pTarget, int delta)
 
EPICS_ATOMIC_INLINE int epicsAtomicCmpAndSwapIntT (int *pTarget, int oldVal, int newVal)
 
 STATIC_ASSERT (sizeof(MS_LONG)==sizeof(size_t))
 
EPICS_ATOMIC_INLINE size_t epicsAtomicIncrSizeT (size_t *pTarget)
 
EPICS_ATOMIC_INLINE size_t epicsAtomicDecrSizeT (size_t *pTarget)
 
EPICS_ATOMIC_INLINE size_t epicsAtomicAddSizeT (size_t *pTarget, size_t delta)
 
EPICS_ATOMIC_INLINE size_t epicsAtomicSubSizeT (size_t *pTarget, size_t delta)
 
EPICS_ATOMIC_INLINE size_t epicsAtomicCmpAndSwapSizeT (size_t *pTarget, size_t oldVal, size_t newVal)
 
EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicCmpAndSwapPtrT (EpicsAtomicPtrT *pTarget, EpicsAtomicPtrT oldVal, EpicsAtomicPtrT newVal)
 

Macro Definition Documentation

#define EPICS_ATOMIC_ADD_INTT

Definition at line 46 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_ADD_SIZET

Definition at line 98 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_CAS_INTT

Definition at line 58 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_CAS_PTRT

Definition at line 133 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_CAS_SIZET

Definition at line 121 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_DECR_INTT

Definition at line 36 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_DECR_SIZET

Definition at line 89 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_INCR_INTT

Definition at line 26 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_INCR_SIZET

Definition at line 80 of file epicsAtomicMS.h.

#define EPICS_ATOMIC_SUB_SIZET

Definition at line 110 of file epicsAtomicMS.h.

Function Documentation

EPICS_ATOMIC_INLINE int epicsAtomicAddIntT ( int *  pTarget,
int  delta 
)

Definition at line 47 of file epicsAtomicMS.h.

48 {
49  STATIC_ASSERT ( sizeof ( MS_LONG ) == sizeof ( int ) );
50  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
51  /* we dont use InterlockedAdd because only latest windows is supported */
52  return delta + ( int ) MS_InterlockedExchangeAdd ( pTarg,
53  ( MS_LONG ) delta );
54 }
STATIC_ASSERT(sizeof(MS_LONG)==sizeof(size_t))
#define MS_LONG
#define MS_InterlockedExchangeAdd
EPICS_ATOMIC_INLINE size_t epicsAtomicAddSizeT ( size_t *  pTarget,
size_t  delta 
)

Definition at line 99 of file epicsAtomicMS.h.

101 {
102  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
103  /* we dont use InterlockedAdd because only latest windows is supported */
104  return delta + ( size_t ) MS_InterlockedExchangeAdd ( pTarg,
105  ( MS_LONG ) delta );
106 }
#define MS_LONG
#define MS_InterlockedExchangeAdd
EPICS_ATOMIC_INLINE int epicsAtomicCmpAndSwapIntT ( int *  pTarget,
int  oldVal,
int  newVal 
)

Definition at line 59 of file epicsAtomicMS.h.

61 {
62  STATIC_ASSERT ( sizeof ( MS_LONG ) == sizeof ( int ) );
63  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
64  return (int) MS_InterlockedCompareExchange ( pTarg,
65  (MS_LONG) newVal, (MS_LONG) oldVal );
66 }
STATIC_ASSERT(sizeof(MS_LONG)==sizeof(size_t))
#define MS_LONG
#define MS_InterlockedCompareExchange
EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicCmpAndSwapPtrT ( EpicsAtomicPtrT pTarget,
EpicsAtomicPtrT  oldVal,
EpicsAtomicPtrT  newVal 
)

Definition at line 134 of file epicsAtomicMS.h.

137 {
138  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
140  (MS_LONG) newVal, (MS_LONG) oldVal );
141 }
void * EpicsAtomicPtrT
Definition: epicsAtomic.h:28
#define MS_LONG
#define MS_InterlockedCompareExchange
EPICS_ATOMIC_INLINE size_t epicsAtomicCmpAndSwapSizeT ( size_t *  pTarget,
size_t  oldVal,
size_t  newVal 
)

Definition at line 122 of file epicsAtomicMS.h.

125 {
126  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
127  return (size_t) MS_InterlockedCompareExchange ( pTarg,
128  (MS_LONG) newVal, (MS_LONG) oldVal );
129 }
#define MS_LONG
#define MS_InterlockedCompareExchange
EPICS_ATOMIC_INLINE int epicsAtomicDecrIntT ( int *  pTarget)

Definition at line 37 of file epicsAtomicMS.h.

38 {
39  STATIC_ASSERT ( sizeof ( MS_LONG ) == sizeof ( int ) );
40  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
41  return MS_InterlockedDecrement ( pTarg );
42 }
STATIC_ASSERT(sizeof(MS_LONG)==sizeof(size_t))
#define MS_LONG
#define MS_InterlockedDecrement
EPICS_ATOMIC_INLINE size_t epicsAtomicDecrSizeT ( size_t *  pTarget)

Definition at line 90 of file epicsAtomicMS.h.

91 {
92  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
93  return MS_InterlockedDecrement ( pTarg );
94 }
#define MS_LONG
#define MS_InterlockedDecrement
EPICS_ATOMIC_INLINE int epicsAtomicIncrIntT ( int *  pTarget)

Definition at line 27 of file epicsAtomicMS.h.

28 {
29  STATIC_ASSERT ( sizeof ( MS_LONG ) == sizeof ( int ) );
30  MS_LONG * const pTarg = ( MS_LONG * ) pTarget;
31  return MS_InterlockedIncrement ( pTarg );
32 }
#define MS_InterlockedIncrement
STATIC_ASSERT(sizeof(MS_LONG)==sizeof(size_t))
#define MS_LONG
EPICS_ATOMIC_INLINE size_t epicsAtomicIncrSizeT ( size_t *  pTarget)

Definition at line 81 of file epicsAtomicMS.h.

82 {
83  MS_LONG * const pTarg = ( MS_LONG * ) pTarget;
84  return MS_InterlockedIncrement ( pTarg );
85 }
#define MS_InterlockedIncrement
#define MS_LONG
EPICS_ATOMIC_INLINE size_t epicsAtomicSubSizeT ( size_t *  pTarget,
size_t  delta 
)

Definition at line 111 of file epicsAtomicMS.h.

112 {
113  MS_LONG * const pTarg = ( MS_LONG * ) ( pTarget );
114  MS_LONG ldelta = (MS_LONG) delta;
115  /* we dont use InterlockedAdd because only latest windows is supported */
116  return ( ( size_t ) MS_InterlockedExchangeAdd ( pTarg, -ldelta ) ) - delta;
117 }
#define MS_LONG
#define MS_InterlockedExchangeAdd
STATIC_ASSERT ( sizeof(MS_LONG = =sizeof(size_t))