1/* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include "atomic32_wrapper.h" 12 13#if defined(_WIN32) 14 #include "atomic32_win.h" 15#elif defined(WEBRTC_LINUX) 16 #include "atomic32_linux.h" 17#elif defined(WEBRTC_MAC) 18 #include "atomic32_mac.h" 19#else 20 #error unsupported os! 21#endif 22 23namespace webrtc { 24Atomic32Wrapper::Atomic32Wrapper(WebRtc_Word32 initialValue) 25 : _impl(*new Atomic32Impl(initialValue)) 26{ 27} 28 29Atomic32Wrapper::~Atomic32Wrapper() 30{ 31 delete &_impl; 32} 33 34WebRtc_Word32 Atomic32Wrapper::operator++() 35{ 36 return ++_impl; 37} 38 39WebRtc_Word32 Atomic32Wrapper::operator--() 40{ 41 return --_impl; 42} 43 44// Read and write to properly aligned variables are atomic operations. 45// Ex reference (for Windows): http://msdn.microsoft.com/en-us/library/ms684122(v=VS.85).aspx 46// TODO (hellner) operator= and Atomic32Wrapper::Value() can be fully 47// implemented here. 48Atomic32Wrapper& Atomic32Wrapper::operator=(const Atomic32Wrapper& rhs) 49{ 50 if(this == &rhs) 51 { 52 return *this; 53 } 54 _impl = rhs._impl; 55 return *this; 56} 57 58Atomic32Wrapper& Atomic32Wrapper::operator=(WebRtc_Word32 rhs) 59{ 60 _impl = rhs; 61 return *this; 62} 63 64WebRtc_Word32 Atomic32Wrapper::operator+=(WebRtc_Word32 rhs) 65{ 66 return _impl += rhs; 67} 68 69WebRtc_Word32 Atomic32Wrapper::operator-=(WebRtc_Word32 rhs) 70{ 71 return _impl -= rhs; 72} 73 74bool Atomic32Wrapper::CompareExchange(WebRtc_Word32 newValue, 75 WebRtc_Word32 compareValue) 76{ 77 return _impl.CompareExchange(newValue,compareValue); 78} 79 80WebRtc_Word32 Atomic32Wrapper::Value() const 81{ 82 return _impl.Value(); 83} 84} // namespace webrtc 85