blob: 3d6849ef252593fab01fed4ee72770d738fd4a80 [file] [log] [blame]
niklase@google.comf0779a22011-05-30 11:39:38 +00001/*
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_windows.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