File: Atomic_Op_GCC_T.h

package info (click to toggle)
ace 6.4.5%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 48,640 kB
  • ctags: 41,204
  • sloc: cpp: 336,448; perl: 33,068; ansic: 20,676; sh: 3,735; exp: 787; python: 635; yacc: 511; xml: 330; lex: 158; lisp: 116; makefile: 80; csh: 20; tcl: 5
file content (137 lines) | stat: -rw-r--r-- 3,391 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// -*- C++ -*-

//=============================================================================
/**
 *  @file    Atomic_Op_GCC_T.h
 *
 *  @author Johnny Willemsen  <jwillemsen@remedy.nl
 */
//=============================================================================

#ifndef ACE_ATOMIC_OP_GCC_T_H
#define ACE_ATOMIC_OP_GCC_T_H
#include /**/ "ace/pre.h"

#include /**/ "ace/config-all.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "ace/Thread_Mutex.h"
#include "ace/ACE_export.h"

#if defined (ACE_HAS_GCC_ATOMIC_BUILTINS) && (ACE_HAS_GCC_ATOMIC_BUILTINS == 1)

ACE_BEGIN_VERSIONED_NAMESPACE_DECL

/**
 * @brief Specialization of ACE_Atomic_Op for platforms that
 *        support atomic integer operations.
 *
 * Specialization of ACE_Atomic_Op for platforms that support atomic
 * integer operations.
 */
template<typename T>
class ACE_Export ACE_Atomic_Op_GCC
{
public:
  /// Atomically pre-increment @c value_.
  T operator++ (void);

  /// Atomically post-increment @c value_.
  T operator++ (int);

  /// Atomically increment @c value_ by rhs.
  T operator+= (T rhs);

  /// Atomically pre-decrement @c value_.
  T operator-- (void);

  /// Atomically post-decrement @c value_.
  T operator-- (int);

  /// Atomically decrement @c value_ by rhs.
  T operator-= (T rhs);

  /// Atomically compare @c value_ with rhs.
  bool operator== (T rhs) const;

  /// Atomically compare @c value_ with rhs.
  bool operator!= (T rhs) const;

  /// Atomically check if @c value_ greater than or equal to rhs.
  bool operator>= (T rhs) const;

  /// Atomically check if @c value_ greater than rhs.
  bool operator> (T rhs) const;

  /// Atomically check if @c value_ less than or equal to rhs.
  bool operator<= (T rhs) const;

  /// Atomically check if @c value_ less than rhs.
  bool operator< (T rhs) const;

  /// Exchange value with @a newval.
  T exchange (T newval);

  /// Explicitly return @c value_.
  T value (void) const;

  /// Dump the state of an object.
  void dump (void) const;

  /// Explicitly return @c value_ (by reference).
  volatile T &value_i (void);

  // ACE_ALLOC_HOOK_DECLARE;
  // Declare the dynamic allocation hooks.

protected:
  /// Atomically assign rhs to @c value_.
  ACE_Atomic_Op_GCC<T> &operator= (T rhs);

  /// Atomically assign <rhs> to @c value_.
  ACE_Atomic_Op_GCC<T> &operator= (const ACE_Atomic_Op_GCC<T> &rhs);

  /// Initialize @c value_ to 0.
  ACE_Atomic_Op_GCC (void);

  /// Initialize @c value_ to c.
  ACE_Atomic_Op_GCC (T c);

  /// Manage copying...
  ACE_Atomic_Op_GCC (const ACE_Atomic_Op_GCC<T> &c);

private:

  // This function cannot be supported by this template specialization.
  // If you need access to an underlying lock, use the ACE_Atomic_Op_Ex
  // template instead.
  ACE_Thread_Mutex &mutex (void);

private:

  /// Current object decorated by the atomic op.
  volatile T value_;
};

ACE_END_VERSIONED_NAMESPACE_DECL

#if defined (__ACE_INLINE__)
#include "ace/Atomic_Op_GCC_T.inl"
#endif /* __ACE_INLINE__ */

#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
#include "ace/Atomic_Op_GCC_T.cpp"
#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */

#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
#pragma implementation ("Atomic_Op_GCC_T.cpp")
#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */


#endif /* ACE_HAS_GCC_ATOMIC_BUILTINS */

#include /**/ "ace/post.h"
#endif /*ACE_ATOMIC_OP_GCC_T_H*/