21 INLINE
void AtomicAdjustWin32Impl::
22 inc(TVOLATILE AtomicAdjustWin32Impl::Integer &var) {
23 assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
25 InterlockedIncrement64(&var);
27 InterlockedIncrement(&var);
38 INLINE
bool AtomicAdjustWin32Impl::
39 dec(TVOLATILE AtomicAdjustWin32Impl::Integer &var) {
40 assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
42 return (InterlockedDecrement64(&var) != 0);
44 return (InterlockedDecrement(&var) != 0);
54 INLINE
void AtomicAdjustWin32Impl::
55 add(TVOLATILE AtomicAdjustWin32Impl::Integer &var, AtomicAdjustWin32Impl::Integer delta) {
56 assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
58 InterlockedAdd64(&var, delta);
60 AtomicAdjustWin32Impl::Integer orig_value = var;
61 while (compare_and_exchange(var, orig_value, orig_value + delta) != orig_value) {
73 INLINE AtomicAdjustWin32Impl::Integer AtomicAdjustWin32Impl::
74 set(TVOLATILE AtomicAdjustWin32Impl::Integer &var,
75 AtomicAdjustWin32Impl::Integer new_value) {
76 assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
78 return InterlockedExchange64(&var, new_value);
80 return InterlockedExchange(&var, new_value);
93 INLINE AtomicAdjustWin32Impl::Integer AtomicAdjustWin32Impl::
94 get(
const TVOLATILE AtomicAdjustWin32Impl::Integer &var) {
100 assert((((
size_t)&var) & (
sizeof(Integer) - 1)) == 0);
110 INLINE AtomicAdjustWin32Impl::Pointer AtomicAdjustWin32Impl::
111 set_ptr(TVOLATILE AtomicAdjustWin32Impl::Pointer &var,
112 AtomicAdjustWin32Impl::Pointer new_value) {
113 assert((((
size_t)&var) & (
sizeof(Pointer) - 1)) == 0);
114 return InterlockedExchangePointer(&var, new_value);
126 INLINE AtomicAdjustWin32Impl::Pointer AtomicAdjustWin32Impl::
127 get_ptr(
const TVOLATILE AtomicAdjustWin32Impl::Pointer &var) {
129 assert((((
size_t)&var) & (
sizeof(Pointer) - 1)) == 0);
152 INLINE AtomicAdjustWin32Impl::Integer AtomicAdjustWin32Impl::
153 compare_and_exchange(TVOLATILE AtomicAdjustWin32Impl::Integer &mem,
154 AtomicAdjustWin32Impl::Integer old_value,
155 AtomicAdjustWin32Impl::Integer new_value) {
156 assert((((
size_t)&mem) & (
sizeof(Integer) - 1)) == 0);
160 return InterlockedCompareExchange64((TVOLATILE LONGLONG *)&mem, new_value, old_value);
162 return InterlockedCompareExchange((TVOLATILE LONG *)&mem, new_value, old_value);
173 INLINE AtomicAdjustWin32Impl::Pointer AtomicAdjustWin32Impl::
174 compare_and_exchange_ptr(TVOLATILE AtomicAdjustWin32Impl::Pointer &mem,
175 AtomicAdjustWin32Impl::Pointer old_value,
176 AtomicAdjustWin32Impl::Pointer new_value) {
177 assert((((
size_t)&mem) & (
sizeof(Pointer) - 1)) == 0);
180 return InterlockedCompareExchangePointer(&mem, new_value, old_value);