LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/system_wrappers/include - atomic32.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 4 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  *  Copyright (c) 2012 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             : // Atomic, system independent 32-bit integer.  Unless you know what you're
      12             : // doing, use locks instead! :-)
      13             : //
      14             : // Note: assumes 32-bit (or higher) system
      15             : #ifndef WEBRTC_SYSTEM_WRAPPERS_INCLUDE_ATOMIC32_H_
      16             : #define WEBRTC_SYSTEM_WRAPPERS_INCLUDE_ATOMIC32_H_
      17             : 
      18             : #include <stddef.h>
      19             : 
      20             : #include "webrtc/base/constructormagic.h"
      21             : #include "webrtc/common_types.h"
      22             : 
      23             : namespace webrtc {
      24             : 
      25             : // 32 bit atomic variable.  Note that this class relies on the compiler to
      26             : // align the 32 bit value correctly (on a 32 bit boundary), so as long as you're
      27             : // not doing things like reinterpret_cast over some custom allocated memory
      28             : // without being careful with alignment, you should be fine.
      29             : class Atomic32 {
      30             :  public:
      31             :   Atomic32(int32_t initial_value = 0);
      32             :   ~Atomic32();
      33             : 
      34             :   // Prefix operator!
      35             :   int32_t operator++();
      36             :   int32_t operator--();
      37             : 
      38             :   int32_t operator+=(int32_t value);
      39             :   int32_t operator-=(int32_t value);
      40             : 
      41             :   // Sets the value atomically to new_value if the value equals compare value.
      42             :   // The function returns true if the exchange happened.
      43             :   bool CompareExchange(int32_t new_value, int32_t compare_value);
      44           0 :   int32_t Value() {
      45           0 :     return *this += 0;
      46             :   }
      47             : 
      48             :  private:
      49             :   // Disable the + and - operator since it's unclear what these operations
      50             :   // should do.
      51             :   Atomic32 operator+(const Atomic32& other);
      52             :   Atomic32 operator-(const Atomic32& other);
      53             : 
      54             :   // Checks if |_value| is 32bit aligned.
      55           0 :   inline bool Is32bitAligned() const {
      56           0 :     return (reinterpret_cast<ptrdiff_t>(&value_) & 3) == 0;
      57             :   }
      58             : 
      59             :   RTC_DISALLOW_COPY_AND_ASSIGN(Atomic32);
      60             : 
      61             :   int32_t value_;
      62             : };
      63             : 
      64             : }  // namespace webrtc
      65             : 
      66             : #endif  // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_ATOMIC32_H_

Generated by: LCOV version 1.13