diff options
Diffstat (limited to 'src/system_wrappers/source/atomic32.cc')
-rw-r--r-- | src/system_wrappers/source/atomic32.cc | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/system_wrappers/source/atomic32.cc b/src/system_wrappers/source/atomic32.cc new file mode 100644 index 0000000000..3d6849ef25 --- /dev/null +++ b/src/system_wrappers/source/atomic32.cc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "atomic32_wrapper.h" + +#if defined(_WIN32) + #include "atomic32_windows.h" +#elif defined(WEBRTC_LINUX) + #include "atomic32_linux.h" +#elif defined(WEBRTC_MAC) + #include "atomic32_mac.h" +#else + #error unsupported os! +#endif + +namespace webrtc { +Atomic32Wrapper::Atomic32Wrapper(WebRtc_Word32 initialValue) + : _impl(*new Atomic32Impl(initialValue)) +{ +} + +Atomic32Wrapper::~Atomic32Wrapper() +{ + delete &_impl; +} + +WebRtc_Word32 Atomic32Wrapper::operator++() +{ + return ++_impl; +} + +WebRtc_Word32 Atomic32Wrapper::operator--() +{ + return --_impl; +} + +// Read and write to properly aligned variables are atomic operations. +// Ex reference (for Windows): http://msdn.microsoft.com/en-us/library/ms684122(v=VS.85).aspx +// TODO (hellner) operator= and Atomic32Wrapper::Value() can be fully +// implemented here. +Atomic32Wrapper& Atomic32Wrapper::operator=(const Atomic32Wrapper& rhs) +{ + if(this == &rhs) + { + return *this; + } + _impl = rhs._impl; + return *this; +} + +Atomic32Wrapper& Atomic32Wrapper::operator=(WebRtc_Word32 rhs) +{ + _impl = rhs; + return *this; +} + +WebRtc_Word32 Atomic32Wrapper::operator+=(WebRtc_Word32 rhs) +{ + return _impl += rhs; +} + +WebRtc_Word32 Atomic32Wrapper::operator-=(WebRtc_Word32 rhs) +{ + return _impl -= rhs; +} + +bool Atomic32Wrapper::CompareExchange(WebRtc_Word32 newValue, + WebRtc_Word32 compareValue) +{ + return _impl.CompareExchange(newValue,compareValue); +} + +WebRtc_Word32 Atomic32Wrapper::Value() const +{ + return _impl.Value(); +} +} // namespace webrtc |