1a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* 2a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 4a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Use of this source code is governed by a BSD-style license 5a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * that can be found in the LICENSE file in the root of the source 6a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * tree. An additional intellectual property rights grant can be found 7a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * in the file PATENTS. All contributing project authors may 8a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * be found in the AUTHORS file in the root of the source tree. 9a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 10a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 11a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "atomic32.h" 12a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include <assert.h> 14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include <libkern/OSAtomic.h> 15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include <stdlib.h> 16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "common_types.h" 18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinnamespace webrtc { 20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 21a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinAtomic32::Atomic32(WebRtc_Word32 initialValue) : _value(initialValue) 22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin assert(Is32bitAligned()); 24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 25a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 26a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinAtomic32::~Atomic32() 27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 30a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word32 Atomic32::operator++() 31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 32a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return OSAtomicIncrement32Barrier(&_value); 33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 35a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word32 Atomic32::operator--() 36a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return OSAtomicDecrement32Barrier(&_value); 38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 40a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word32 Atomic32::operator+=(WebRtc_Word32 value) 41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return OSAtomicAdd32Barrier(value, &_value); 43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 45a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word32 Atomic32::operator-=(WebRtc_Word32 value) 46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return OSAtomicAdd32Barrier(-value, &_value); 48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinbool Atomic32::CompareExchange(WebRtc_Word32 newValue, 51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 compareValue) 52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return OSAtomicCompareAndSwap32Barrier(compareValue, newValue, &_value); 54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 56a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word32 Atomic32::Value() const 57a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 58a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return _value; 59a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 60a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} // namespace webrtc 61