23 #if ! defined (octave_oct_refcount_h)
24 #define octave_oct_refcount_h 1
26 #include "octave-config.h"
28 #include "octave-config.h"
30 #if (defined (OCTAVE_ENABLE_ATOMIC_REFCOUNT) \
31 && (defined (__GNUC__) || defined (_MSC_VER)))
33 # if defined (__GNUC__)
35 # define OCTAVE_ATOMIC_INCREMENT(x) __sync_add_and_fetch (x, 1)
36 # define OCTAVE_ATOMIC_DECREMENT(x) __sync_add_and_fetch (x, -1)
37 # define OCTAVE_ATOMIC_POST_INCREMENT(x) __sync_fetch_and_add (x, 1)
38 # define OCTAVE_ATOMIC_POST_DECREMENT(x) __sync_fetch_and_add (x, -1)
40 # elif defined (_MSC_VER)
44 # define OCTAVE_ATOMIC_INCREMENT(x) \
45 _InterlockedIncrement (static_cast<long *> (x))
47 # define OCTAVE_ATOMIC_DECREMENT(x) \
48 _InterlockedDecrement (static_cast<long *> (x))
50 # define OCTAVE_ATOMIC_POST_INCREMENT(x) \
51 _InterlockedExchangeAdd (static_cast<long *> (x))
53 # define OCTAVE_ATOMIC_POST_DECREMENT(x) \
54 _InterlockedExchangeAdd (static_cast<long *> (x))
62 # define OCTAVE_ATOMIC_INCREMENT(x) ++(*(x))
63 # define OCTAVE_ATOMIC_DECREMENT(x) --(*(x))
64 # define OCTAVE_ATOMIC_POST_INCREMENT(x) (*(x))++
65 # define OCTAVE_ATOMIC_POST_DECREMENT(x) (*(x))--
78 :
count (initial_count)
104 return static_cast<count_type
const volatile&
> (
count);
107 count_type *
get (void)
#define OCTAVE_ATOMIC_DECREMENT(x)
#define OCTAVE_ATOMIC_INCREMENT(x)
octave_refcount(count_type initial_count)
#define OCTAVE_ATOMIC_POST_INCREMENT(x)
count_type operator++(void)
#define OCTAVE_ATOMIC_POST_DECREMENT(x)
count_type operator--(void)