Removed ACE_HAS_BSTRING, not used
[ACE_TAO.git] / ACE / ace / Atomic_Op_GCC_T.inl
blob90f7c4839c25a205d8411befc60d082798bc6816
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 (void)
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++ (void)
32   return __sync_add_and_fetch (&this->value_, 1);
35 template <typename T>
36 ACE_INLINE T
37 ACE_Atomic_Op_GCC<T>::operator++ (int)
39   return __sync_fetch_and_add (&this->value_, 1);
42 template <typename T>
43 ACE_INLINE T
44 ACE_Atomic_Op_GCC<T>::operator-- (void)
46   return __sync_sub_and_fetch (&this->value_, 1);
49 template <typename T>
50 ACE_INLINE T
51 ACE_Atomic_Op_GCC<T>::operator-- (int)
53   return __sync_fetch_and_sub (&this->value_, 1);
56 template <typename T>
57 ACE_INLINE T
58 ACE_Atomic_Op_GCC<T>::operator+= (T rhs)
60   return __sync_add_and_fetch (&this->value_, rhs);
63 template <typename T>
64 ACE_INLINE T
65 ACE_Atomic_Op_GCC<T>::operator-= (T rhs)
67   return __sync_sub_and_fetch (&this->value_, rhs);
70 template <typename T>
71 ACE_INLINE bool
72 ACE_Atomic_Op_GCC<T>::operator== (T rhs) const
74   return (this->value_ == rhs);
77 template <typename T>
78 ACE_INLINE bool
79 ACE_Atomic_Op_GCC<T>::operator!= (T rhs) const
81   return (this->value_ != rhs);
84 template <typename T>
85 ACE_INLINE bool
86 ACE_Atomic_Op_GCC<T>::operator>= (T rhs) const
88   return (this->value_ >= rhs);
91 template <typename T>
92 ACE_INLINE bool
93 ACE_Atomic_Op_GCC<T>::operator> (T rhs) const
95   return (this->value_ > rhs);
98 template <typename T>
99 ACE_INLINE bool
100 ACE_Atomic_Op_GCC<T>::operator<= (T rhs) const
102   return (this->value_ <= rhs);
105 template <typename T>
106 ACE_INLINE bool
107 ACE_Atomic_Op_GCC<T>::operator< (T rhs) const
109   return (this->value_ < rhs);
112 template <typename T>
113 ACE_INLINE ACE_Atomic_Op_GCC<T> &
114 ACE_Atomic_Op_GCC<T>::operator= (T rhs)
116   (void) __sync_lock_test_and_set (&this->value_, rhs);
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   (void) __sync_lock_test_and_set (&this->value_, rhs.value_);
126   return *this;
129 template <typename T>
130 ACE_INLINE T
131 ACE_Atomic_Op_GCC<T>::exchange (T newval)
133   return __sync_val_compare_and_swap (&this->value_, this->value_, newval);
136 template <typename T>
137 ACE_INLINE T
138 ACE_Atomic_Op_GCC<T>::value (void) const
140   return this->value_;
143 template <typename T>
144 ACE_INLINE volatile T &
145 ACE_Atomic_Op_GCC<T>::value_i (void)
147   return this->value_;
150 ACE_END_VERSIONED_NAMESPACE_DECL
152 #endif /* ACE_HAS_GCC_ATOMIC_BUILTINS */