CMS 3D CMS Logo

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::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::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 45 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 119 of file atomic_value_ptr.h.

Constructor & Destructor Documentation

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

Definition at line 51 of file atomic_value_ptr.h.

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

Definition at line 52 of file atomic_value_ptr.h.

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

Definition at line 53 of file atomic_value_ptr.h.

53 { 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 59 of file atomic_value_ptr.h.

59 : myP(createFrom(orig.myP.load())) {}
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 67 of file atomic_value_ptr.h.

67 : myP(orig.myP.load()) { 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 87 of file atomic_value_ptr.h.

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

Definition at line 100 of file atomic_value_ptr.h.

100 : myP(orig.release()) { orig = nullptr; }
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 110 of file atomic_value_ptr.h.

110 { return myP.compare_exchange_strong(oldValue, newValue); }
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 144 of file atomic_value_ptr.h.

template<typename T>
void edm::atomic_value_ptr< T >::exchangeWithLocal ( atomic_value_ptr< T > &  local)
inlineprivate

Definition at line 134 of file atomic_value_ptr.h.

134  {
135  T* old = myP.exchange(local.myP.load());
136  local.myP = old;
137  }
std::atomic< T * > myP
long double T
template<typename T>
T* edm::atomic_value_ptr< T >::load ( ) const
inline

Definition at line 108 of file atomic_value_ptr.h.

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

Definition at line 123 of file atomic_value_ptr.h.

123  {
125  }
void this_type_does_not_support_comparisons() const
std::atomic< T * > myP
template<typename T>
T& edm::atomic_value_ptr< T >::operator* ( void  ) const
inline

Definition at line 79 of file atomic_value_ptr.h.

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

Definition at line 80 of file atomic_value_ptr.h.

80 { 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 61 of file atomic_value_ptr.h.

61  {
62  atomic_value_ptr<T> local(orig);
64  return *this;
65  }
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 69 of file atomic_value_ptr.h.

69  {
70  atomic_value_ptr<T> local(orig);
72  return *this;
73  }
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 90 of file atomic_value_ptr.h.

90  {
91  atomic_value_ptr<T> local(orig);
93  return *this;
94  }
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 102 of file atomic_value_ptr.h.

102  {
103  atomic_value_ptr<T> local(std::move(orig));
105  return *this;
106  }
void exchangeWithLocal(atomic_value_ptr &local)
def move(src, dest)
Definition: eostools.py:511
template<typename T>
void edm::atomic_value_ptr< T >::this_type_does_not_support_comparisons ( ) const
inlineprivate

Definition at line 120 of file atomic_value_ptr.h.

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

120 {}

Member Data Documentation

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