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 47 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 135 of file atomic_value_ptr.h.

Constructor & Destructor Documentation

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

Definition at line 55 of file atomic_value_ptr.h.

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

Definition at line 56 of file atomic_value_ptr.h.

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

Definition at line 57 of file atomic_value_ptr.h.

57 { 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 63 of file atomic_value_ptr.h.

63  :
64  myP(createFrom(orig.myP.load())) {
65  }
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 73 of file atomic_value_ptr.h.

73  :
74  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 94 of file atomic_value_ptr.h.

94  :
95  myP(createFrom(orig.operator->())) {
96  }
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 109 of file atomic_value_ptr.h.

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

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

163  {
164  return p
166  : nullptr;
167  }
#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 152 of file atomic_value_ptr.h.

152  {
153  T* old = myP.exchange(local.myP.load());
154  local.myP = old;
155  }
std::atomic< T * > myP
long double T
template<typename T>
T* edm::atomic_value_ptr< T >::load ( ) const
inline

Definition at line 120 of file atomic_value_ptr.h.

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

Definition at line 139 of file atomic_value_ptr.h.

139  {
140  return myP != nullptr ?
142  }
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 86 of file atomic_value_ptr.h.

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

Definition at line 87 of file atomic_value_ptr.h.

87 { 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 67 of file atomic_value_ptr.h.

67  {
68  atomic_value_ptr<T> local(orig);
70  return *this;
71  }
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 76 of file atomic_value_ptr.h.

76  {
77  atomic_value_ptr<T> local(orig);
79  return *this;
80  }
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 99 of file atomic_value_ptr.h.

99  {
100  atomic_value_ptr<T> local(orig);
102  return *this;
103  }
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 114 of file atomic_value_ptr.h.

114  {
115  atomic_value_ptr<T> local(std::move(orig));
117  return *this;
118  }
void exchangeWithLocal(atomic_value_ptr &local)
def move(src, dest)
Definition: eostools.py:510
template<typename T>
void edm::atomic_value_ptr< T >::this_type_does_not_support_comparisons ( ) const
inlineprivate

Definition at line 136 of file atomic_value_ptr.h.

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

136 {}

Member Data Documentation

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