CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes
edm::atomic_value_ptr< T > Class Template Reference

#include <atomic_value_ptr.h>

Public Member Functions

 atomic_value_ptr ()
 
 atomic_value_ptr (T *p)
 
 atomic_value_ptr (atomic_value_ptr const &orig)
 
 atomic_value_ptr (atomic_value_ptr &&orig)
 
template<typename U >
 atomic_value_ptr (atomic_value_ptr< U > const &orig)
 
 atomic_value_ptr (std::auto_ptr< T > orig)
 
 atomic_value_ptr (std::unique_ptr< T > orig)
 
bool compare_exchange_strong (T *&oldValue, T *newValue)
 
Tload () const
 
 operator bool_type () const
 
Toperator* () const
 
Toperator-> () const
 
atomic_value_ptroperator= (atomic_value_ptr const &orig)
 
atomic_value_ptroperator= (atomic_value_ptr &&orig)
 
template<typename U >
atomic_value_ptroperator= (atomic_value_ptr< U > const &orig)
 
atomic_value_ptroperator= (std::auto_ptr< T > orig)
 
atomic_value_ptroperator= (std::unique_ptr< T > orig)
 
 ~atomic_value_ptr ()
 

Private Types

typedef void(atomic_value_ptr::* bool_type )() const
 

Private Member Functions

void exchangeWithLocal (atomic_value_ptr &local)
 
void this_type_does_not_support_comparisons () const
 

Static Private Member Functions

template<typename U >
static TcreateFrom (U const *p)
 

Private Attributes

std::atomic< T * > myP
 

Detailed Description

template<typename T>
class edm::atomic_value_ptr< T >

Definition at line 53 of file atomic_value_ptr.h.

Member Typedef Documentation

template<typename T>
typedef void(atomic_value_ptr::* edm::atomic_value_ptr< T >::bool_type)() const
private

Definition at line 159 of file atomic_value_ptr.h.

Constructor & Destructor Documentation

template<typename T>
edm::atomic_value_ptr< T >::atomic_value_ptr ( )
inline

Definition at line 61 of file atomic_value_ptr.h.

61 : myP(nullptr) { }
std::atomic< T * > myP
template<typename T>
edm::atomic_value_ptr< T >::atomic_value_ptr ( T p)
inlineexplicit

Definition at line 62 of file atomic_value_ptr.h.

template<typename T>
edm::atomic_value_ptr< T >::~atomic_value_ptr ( )
inline

Definition at line 63 of file atomic_value_ptr.h.

63 { delete myP.load(); }
std::atomic< T * > myP
template<typename T>
edm::atomic_value_ptr< T >::atomic_value_ptr ( atomic_value_ptr< T > const &  orig)
inline

Definition at line 69 of file atomic_value_ptr.h.

69  :
70  myP(createFrom(orig.myP.load())) {
71  }
static T * createFrom(U const *p)
std::atomic< T * > myP
template<typename T>
edm::atomic_value_ptr< T >::atomic_value_ptr ( atomic_value_ptr< T > &&  orig)
inline

Definition at line 80 of file atomic_value_ptr.h.

80  :
81  myP(orig.myP) { orig.myP.store(nullptr); }
std::atomic< T * > myP
template<typename T>
template<typename U >
edm::atomic_value_ptr< T >::atomic_value_ptr ( atomic_value_ptr< U > const &  orig)
inline

Definition at line 102 of file atomic_value_ptr.h.

102  :
103  myP(createFrom(orig.operator->())) {
104  }
static T * createFrom(U const *p)
std::atomic< T * > myP
template<typename T>
edm::atomic_value_ptr< T >::atomic_value_ptr ( std::auto_ptr< T orig)
inline

Definition at line 117 of file atomic_value_ptr.h.

117  :
118  myP(orig.release()) {
119  }
std::atomic< T * > myP
template<typename T>
edm::atomic_value_ptr< T >::atomic_value_ptr ( std::unique_ptr< T orig)
inline

Definition at line 132 of file atomic_value_ptr.h.

132  :
133  myP(orig.release()) {
134  orig = nullptr;
135  }
std::atomic< T * > myP

Member Function Documentation

template<typename T>
bool edm::atomic_value_ptr< T >::compare_exchange_strong ( T *&  oldValue,
T newValue 
)
inline

Definition at line 148 of file atomic_value_ptr.h.

148  {
149  return myP.compare_exchange_strong(oldValue, newValue);
150  }
std::atomic< T * > myP
template<typename T>
template<typename U >
static T* edm::atomic_value_ptr< T >::createFrom ( U const *  p)
inlinestaticprivate

Definition at line 187 of file atomic_value_ptr.h.

187  {
188  return p
190  : nullptr;
191  }
#define nullptr
static T * clone(T const *p)
template<typename T>
void edm::atomic_value_ptr< T >::exchangeWithLocal ( atomic_value_ptr< T > &  local)
inlineprivate

Definition at line 176 of file atomic_value_ptr.h.

Referenced by edm::atomic_value_ptr< edm::ParameterSet >::operator=().

176  {
177  T* old = myP.exchange(local.myP.load());
178  local.myP = old;
179  }
std::atomic< T * > myP
long double T
template<typename T>
T* edm::atomic_value_ptr< T >::load ( ) const
inline

Definition at line 144 of file atomic_value_ptr.h.

144  {
145  return myP.load();
146  }
std::atomic< T * > myP
template<typename T>
edm::atomic_value_ptr< T >::operator bool_type ( ) const
inline

Definition at line 163 of file atomic_value_ptr.h.

163  {
164  return myP != nullptr ?
165  &atomic_value_ptr<T>::this_type_does_not_support_comparisons : nullptr;
166  }
std::atomic< T * > myP
template<typename T>
T& edm::atomic_value_ptr< T >::operator* ( void  ) const
inline

Definition at line 94 of file atomic_value_ptr.h.

94 { return *myP; }
std::atomic< T * > myP
template<typename T>
T* edm::atomic_value_ptr< T >::operator-> ( ) const
inline

Definition at line 95 of file atomic_value_ptr.h.

95 { return myP.load(); }
std::atomic< T * > myP
template<typename T>
atomic_value_ptr& edm::atomic_value_ptr< T >::operator= ( atomic_value_ptr< T > const &  orig)
inline

Definition at line 73 of file atomic_value_ptr.h.

73  {
74  atomic_value_ptr<T> local(orig);
75  exchangeWithLocal(local);
76  return *this;
77  }
void exchangeWithLocal(atomic_value_ptr &local)
template<typename T>
atomic_value_ptr& edm::atomic_value_ptr< T >::operator= ( atomic_value_ptr< T > &&  orig)
inline

Definition at line 83 of file atomic_value_ptr.h.

83  {
84  atomic_value_ptr<T> local(orig);
85  exchangeWithLocal(local);
86  return *this;
87  }
void exchangeWithLocal(atomic_value_ptr &local)
template<typename T>
template<typename U >
atomic_value_ptr& edm::atomic_value_ptr< T >::operator= ( atomic_value_ptr< U > const &  orig)
inline

Definition at line 107 of file atomic_value_ptr.h.

107  {
108  atomic_value_ptr<T> local(orig);
109  exchangeWithLocal(local);
110  return *this;
111  }
void exchangeWithLocal(atomic_value_ptr &local)
template<typename T>
atomic_value_ptr& edm::atomic_value_ptr< T >::operator= ( std::auto_ptr< T orig)
inline

Definition at line 121 of file atomic_value_ptr.h.

121  {
122  atomic_value_ptr<T> local(orig);
123  exchangeWithLocal(local);
124  return *this;
125  }
void exchangeWithLocal(atomic_value_ptr &local)
template<typename T>
atomic_value_ptr& edm::atomic_value_ptr< T >::operator= ( std::unique_ptr< T orig)
inline

Definition at line 137 of file atomic_value_ptr.h.

137  {
138  atomic_value_ptr<T> local(orig);
139  exchangeWithLocal(local);
140  return *this;
141  }
void exchangeWithLocal(atomic_value_ptr &local)
template<typename T>
void edm::atomic_value_ptr< T >::this_type_does_not_support_comparisons ( ) const
inlineprivate

Definition at line 160 of file atomic_value_ptr.h.

Referenced by edm::operator!=(), and edm::operator==().

160 {}

Member Data Documentation

template<typename T>
std::atomic<T*> edm::atomic_value_ptr< T >::myP
mutableprivate