Changes to attempt to silence bcc64x
[ACE_TAO.git] / ACE / ace / Atomic_Op_GCC_T.inl
blobed0f5eb232ac0a5a866568b7dc8c1de9b46c6276
1 // -*- C++ -*-
2 #if defined (ACE_HAS_GCC_ATOMIC_BUILTINS) && (ACE_HAS_GCC_ATOMIC_BUILTINS == 1)
4 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
6 template <typename T>
7 ACE_INLINE
8 ACE_Atomic_Op_GCC<T>::ACE_Atomic_Op_GCC ()
9   : value_ (0)
13 template <typename T>
14 ACE_INLINE
15 ACE_Atomic_Op_GCC<T>::ACE_Atomic_Op_GCC (T c)
16   : value_ (c)
20 template <typename T>
21 ACE_INLINE
22 ACE_Atomic_Op_GCC<T>::ACE_Atomic_Op_GCC (
23   const ACE_Atomic_Op_GCC<T> &rhs)
24   : value_ (rhs.value_)
28 template <typename T>
29 ACE_INLINE T
30 ACE_Atomic_Op_GCC<T>::operator++ ()
32   return __atomic_add_fetch (&value_, 1, __ATOMIC_ACQ_REL);
35 template <typename T>
36 ACE_INLINE T
37 ACE_Atomic_Op_GCC<T>::operator++ (int)
39   return __atomic_fetch_add (&value_, 1, __ATOMIC_ACQ_REL);
42 template <typename T>
43 ACE_INLINE T
44 ACE_Atomic_Op_GCC<T>::operator-- ()
46   return __atomic_sub_fetch (&value_, 1, __ATOMIC_ACQ_REL);
49 template <typename T>
50 ACE_INLINE T
51 ACE_Atomic_Op_GCC<T>::operator-- (int)
53   return __atomic_fetch_sub (&value_, 1, __ATOMIC_ACQ_REL);
56 template <typename T>
57 ACE_INLINE T
58 ACE_Atomic_Op_GCC<T>::operator+= (T rhs)
60   return __atomic_add_fetch (&value_, rhs, __ATOMIC_ACQ_REL);
63 template <typename T>
64 ACE_INLINE T
65 ACE_Atomic_Op_GCC<T>::operator-= (T rhs)
67   return __atomic_sub_fetch (&value_, rhs, __ATOMIC_ACQ_REL);
70 template <typename T>
71 ACE_INLINE bool
72 ACE_Atomic_Op_GCC<T>::operator== (T rhs) const
74   return __atomic_load_n (&value_, __ATOMIC_CONSUME) == rhs;
77 template <typename T>
78 ACE_INLINE bool
79 ACE_Atomic_Op_GCC<T>::operator!= (T rhs) const
81   return __atomic_load_n (&value_, __ATOMIC_CONSUME) != rhs;
84 template <typename T>
85 ACE_INLINE bool
86 ACE_Atomic_Op_GCC<T>::operator>= (T rhs) const
88   return __atomic_load_n (&value_, __ATOMIC_CONSUME) >= rhs;
91 template <typename T>
92 ACE_INLINE bool
93 ACE_Atomic_Op_GCC<T>::operator> (T rhs) const
95   return __atomic_load_n (&value_, __ATOMIC_CONSUME) > rhs;
98 template <typename T>
99 ACE_INLINE bool
100 ACE_Atomic_Op_GCC<T>::operator<= (T rhs) const
102   return __atomic_load_n (&value_, __ATOMIC_CONSUME) <= rhs;
105 template <typename T>
106 ACE_INLINE bool
107 ACE_Atomic_Op_GCC<T>::operator< (T rhs) const
109   return __atomic_load_n (&value_, __ATOMIC_CONSUME) < rhs;
112 template <typename T>
113 ACE_INLINE ACE_Atomic_Op_GCC<T> &
114 ACE_Atomic_Op_GCC<T>::operator= (T rhs)
116   __atomic_store_n (&value_, rhs, __ATOMIC_RELEASE);
117   return *this;
120 template <typename T>
121 ACE_INLINE ACE_Atomic_Op_GCC<T> &
122 ACE_Atomic_Op_GCC<T>::operator= (
123    const ACE_Atomic_Op_GCC<T> &rhs)
125   __atomic_store_n (&value_, __atomic_load_n (&rhs.value_, __ATOMIC_CONSUME), __ATOMIC_RELEASE);
126   return *this;
129 template <typename T>
130 ACE_INLINE T
131 ACE_Atomic_Op_GCC<T>::exchange (T newval)
133   return __atomic_exchange_n (&value_, newval, __ATOMIC_ACQ_REL);
136 template <typename T>
137 ACE_INLINE T
138 ACE_Atomic_Op_GCC<T>::value () const
140   return __atomic_load_n (&value_, __ATOMIC_CONSUME);
143 template <typename T>
144 ACE_INLINE volatile T &
145 ACE_Atomic_Op_GCC<T>::value_i ()
147   return value_;
150 ACE_END_VERSIONED_NAMESPACE_DECL
152 #endif /* ACE_HAS_GCC_ATOMIC_BUILTINS */