CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper > Class Template Reference

#include <AssociationVector.h>

Inheritance diagram for edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >:
reco::CaloTauDiscriminator reco::CaloTauDiscriminatorAgainstElectron reco::JetFlavourInfoMatchingCollection reco::PFTauDiscriminatorByIsolation

Public Types

typedef KeyRefProd::product_type CKey
 
typedef
transient_vector_type::const_iterator 
const_iterator
 
typedef value_type const & const_reference
 
typedef KeyRef::value_type key_type
 
typedef KeyRefProd refprod_type
 
typedef SizeType size_type
 
typedef std::vector< value_typetransient_vector_type
 
typedef std::pair< KeyRef,
typename CVal::value_type > 
value_type
 

Public Member Functions

 AssociationVector ()
 
 AssociationVector (KeyRefProd const &ref, CKey const *=0)
 
 AssociationVector (AssociationVector const &)
 
const_iterator begin () const
 
void clear ()
 
bool empty () const
 
const_iterator end () const
 
void fillView (ProductID const &id, std::vector< void const * > &pointers, FillViewHelperVector &helpers) const
 
KeyRef key (size_type i) const
 
KeyRefProd const & keyProduct () const
 
selfoperator= (self const &)
 
const_reference operator[] (size_type n) const
 
CVal::const_reference operator[] (KeyRef const &k) const
 
CVal::reference operator[] (KeyRef const &k)
 
template<typename K >
CVal::const_reference operator[] (edm::Ptr< K > const &k) const
 
template<typename K >
CVal::const_reference operator[] (edm::RefToBase< K > const &k) const
 
void setValue (size_type i, typename CVal::value_type const &val)
 
size_type size () const
 
void swap (self &other)
 
CVal::value_type const value (size_type i) const
 
 ~AssociationVector ()
 

Static Public Member Functions

static short Class_Version ()
 

Private Types

enum  CacheState { kUnset, kFilling, kSet }
 
typedef AssociationVector
< KeyRefProd, CVal, KeyRef,
SizeType, KeyReferenceHelper > 
self
 

Private Member Functions

 BOOST_STATIC_ASSERT ((boost::is_convertible< SizeType, typename CVal::size_type >::value))
 
void fixup () const
 
transient_vector_type const & transientVector () const
 

Private Attributes

CVal data_
 
KeyRefProd ref_
 
std::atomic
< transient_vector_type * > 
transientVector_
 

Detailed Description

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
class edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >

Definition at line 62 of file AssociationVector.h.

Member Typedef Documentation

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef KeyRefProd::product_type edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::CKey

Definition at line 68 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef transient_vector_type::const_iterator edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::const_iterator

Definition at line 102 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef value_type const& edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::const_reference

Definition at line 73 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef KeyRef::value_type edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::key_type

Definition at line 70 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef KeyRefProd edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::refprod_type

Definition at line 67 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef AssociationVector<KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper> edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::self
private

Definition at line 64 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef SizeType edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::size_type

Definition at line 69 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef std::vector<value_type> edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::transient_vector_type

Definition at line 72 of file AssociationVector.h.

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
typedef std::pair<KeyRef, typename CVal::value_type> edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::value_type

Definition at line 71 of file AssociationVector.h.

Member Enumeration Documentation

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
enum edm::AssociationVector::CacheState
private

Constructor & Destructor Documentation

template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::AssociationVector ( )
inline

Definition at line 127 of file AssociationVector.h.

127  :
128  data_(), ref_(), transientVector_(nullptr) { }
std::atomic< transient_vector_type * > transientVector_
template<typename KeyRefProd, typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::AssociationVector ( KeyRefProd const &  ref,
CKey const *  coll = 0 
)
inline

Definition at line 131 of file AssociationVector.h.

132  :
133  data_(coll == 0 ? ref->size() : coll->size()), ref_(ref),
134  transientVector_( new transient_vector_type(coll == 0 ? ref->size() : coll->size())) { }
std::vector< value_type > transient_vector_type
JetCorrectorParametersCollection coll
Definition: classes.h:10
std::atomic< transient_vector_type * > transientVector_
template<typename KeyRefProd, typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::AssociationVector ( AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper > const &  o)
inline

Definition at line 138 of file AssociationVector.h.

References lumiQTWidget::t, and edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::transientVector_.

138  :
139  data_(o.data_), ref_(o.ref_), transientVector_() {
140  auto t = o.transientVector_.load(std::memory_order_acquire);
141  if(t) {
142  transientVector_.store( new transient_vector_type(*t), std::memory_order_release);
143  }
144  }
std::vector< value_type > transient_vector_type
std::atomic< transient_vector_type * > transientVector_
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::~AssociationVector ( )
inline

Definition at line 147 of file AssociationVector.h.

147  {
148  delete transientVector_.load(std::memory_order_acquire);
149  }
std::atomic< transient_vector_type * > transientVector_

Member Function Documentation

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
const_iterator edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::begin ( void  ) const
inline
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::BOOST_STATIC_ASSERT ( (boost::is_convertible< SizeType, typename CVal::size_type >::value )
private
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
static short edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::Class_Version ( )
inlinestatic
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
void edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::clear ( void  )
inline
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
bool edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::empty ( ) const
inline
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
const_iterator edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::end ( void  ) const
inline
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
void edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::fillView ( ProductID const &  id,
std::vector< void const * > &  pointers,
FillViewHelperVector helpers 
) const

Definition at line 256 of file AssociationVector.h.

References edm::detail::reallyFillView().

Referenced by edm::fillView().

259  {
260  detail::reallyFillView(*this, id, pointers, helpers);
261 // pointers.reserve(this->size());
262 // for(typename CVal::const_iterator i=data_.begin(), e=data_.end(); i!=e; ++i)
263 // pointers.push_back(&(*i));
264 // // helpers is not yet filled in.
265 // //Exception::throwThis(errors::UnimplementedFeature, "AssociationVector<T>::fillView(...)");
266  }
void reallyFillView(COLLECTION const &coll, ProductID const &id, std::vector< void const * > &ptrs, FillViewHelperVector &helpers)
Definition: FillView.h:27
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
void edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::fixup ( ) const
inlineprivate

Definition at line 242 of file AssociationVector.h.

References i, and findQualityFiles::size.

242  {
243  if (nullptr == transientVector_.load(std::memory_order_acquire)) {
244  std::unique_ptr<transient_vector_type> newT {new transient_vector_type(size()) };
245  for(size_type i = 0; i != size(); ++i) {
246  (*newT)[ i ] = std::make_pair(KeyRef(ref_, i), data_[ i ]);
247  }
248  transient_vector_type* expected = nullptr;
249  if(transientVector_.compare_exchange_strong(expected, newT.get()) ) {
250  newT.release();
251  }
252  }
253  }
int i
Definition: DBlmapReader.cc:9
std::vector< value_type > transient_vector_type
std::atomic< transient_vector_type * > transientVector_
size_type size() const
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
KeyRef edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::key ( size_type  i) const
inline

Definition at line 95 of file AssociationVector.h.

95 { return KeyRef(ref_, i); }
int i
Definition: DBlmapReader.cc:9
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
KeyRefProd const& edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::keyProduct ( ) const
inline

Definition at line 94 of file AssociationVector.h.

Referenced by reco::tau::RecoTauDiscriminantFromDiscriminator::operator()().

94 { return ref_; }
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper > & edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::operator= ( self const &  o)
inline

Definition at line 195 of file AssociationVector.h.

References connectstrParser::o, and lumiQTWidget::t.

195  {
196  if(this == &o) {
197  return *this;
198  }
199  data_ = o.data_;
200  ref_ = o.ref_;
201  auto t =transientVector_.exchange(nullptr, std::memory_order_acq_rel);
202  delete t;
203  return *this;
204  }
std::atomic< transient_vector_type * > transientVector_
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::const_reference edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::operator[] ( size_type  n) const
inline

Definition at line 153 of file AssociationVector.h.

References gen::n.

153  {
154  return transientVector()[ n ];
155  }
transient_vector_type const & transientVector() const
template<typename KeyRefProd , typename CVal , typename KeyRef, typename SizeType , typename KeyReferenceHelper >
CVal::const_reference edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::operator[] ( KeyRef const &  k) const
inline

Definition at line 159 of file AssociationVector.h.

References edm::checkForWrongProduct(), and reco::get().

159  {
160  KeyRef keyRef = KeyReferenceHelper::get(k, ref_.id());
161  checkForWrongProduct(keyRef.id(), ref_.id());
162  return data_[ keyRef.key() ];
163  }
void checkForWrongProduct(ProductID const &keyID, ProductID const &refID)
T get(const Candidate &c)
Definition: component.h:55
template<typename KeyRefProd , typename CVal , typename KeyRef, typename SizeType , typename KeyReferenceHelper >
CVal::reference edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::operator[] ( KeyRef const &  k)
inline

Definition at line 185 of file AssociationVector.h.

References edm::checkForWrongProduct(), reco::get(), and lumiQTWidget::t.

185  {
186  KeyRef keyRef = KeyReferenceHelper::get(k, ref_.id());
187  auto t = transientVector_.exchange(nullptr,std::memory_order_acq_rel);
188  delete t;
189  checkForWrongProduct(keyRef.id(), ref_.id());
190  return data_[ keyRef.key() ];
191  }
void checkForWrongProduct(ProductID const &keyID, ProductID const &refID)
std::atomic< transient_vector_type * > transientVector_
T get(const Candidate &c)
Definition: component.h:55
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
template<typename K >
CVal::const_reference edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::operator[] ( edm::Ptr< K > const &  k) const
inline

Definition at line 168 of file AssociationVector.h.

References edm::checkForWrongProduct(), edm::ProductID::id(), edm::Ptr< T >::id(), edm::Ptr< T >::key(), and relativeConstraints::value.

168  {
169  static_assert(std::is_base_of<K,key_type>::value, "edm::Ptr's key type is not a base class of AssociationVector's item type");
170  checkForWrongProduct(k.id(), ref_.id());
171  return data_[ k.key() ];
172  }
void checkForWrongProduct(ProductID const &keyID, ProductID const &refID)
key_type key() const
Definition: Ptr.h:186
ProductID id() const
Accessor for product ID.
Definition: Ptr.h:181
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
template<typename K >
CVal::const_reference edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::operator[] ( edm::RefToBase< K > const &  k) const

Definition at line 177 of file AssociationVector.h.

References edm::checkForWrongProduct(), edm::ProductID::id(), edm::RefToBase< T >::id(), edm::RefToBase< T >::key(), and relativeConstraints::value.

177  {
178  static_assert(std::is_base_of<K,key_type>::value,"edm::RefToBase's key type is not a base class of AssociationVector's item type");
179  checkForWrongProduct(k.id(), ref_.id());
180  return data_[ k.key() ];
181  }
void checkForWrongProduct(ProductID const &keyID, ProductID const &refID)
ProductID id() const
Definition: RefToBase.h:242
size_t key() const
Definition: RefToBase.h:250
template<typename KeyRefProd , typename CVal, typename KeyRef , typename SizeType , typename KeyReferenceHelper >
void edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::setValue ( size_type  i,
typename CVal::value_type const &  val 
)
inline
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::size_type edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::size ( void  ) const
inline
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
void edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::swap ( self other)
inline

Definition at line 235 of file AssociationVector.h.

Referenced by edm::swap().

235  {
236  data_.swap(other.data_);
237  other.transientVector_.store(transientVector_.exchange(other.transientVector_.load(std::memory_order_acquire),std::memory_order_acq_rel),std::memory_order_release);
238  ref_.swap(other.ref_);
239  }
std::atomic< transient_vector_type * > transientVector_
template<typename KeyRefProd , typename CVal , typename KeyRef , typename SizeType , typename KeyReferenceHelper >
AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::transient_vector_type const & edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::transientVector ( ) const
inlineprivate

Definition at line 122 of file AssociationVector.h.

Referenced by edm::AssociationVector< PFTauRefProd, std::vector< int > >::begin(), and edm::AssociationVector< PFTauRefProd, std::vector< int > >::end().

122  {
123  fixup();
124  return *(transientVector_.load(std::memory_order_acquire)); }
std::atomic< transient_vector_type * > transientVector_
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
CVal::value_type const edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::value ( size_type  i) const
inline

Member Data Documentation

template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
CVal edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::data_
private
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
KeyRefProd edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::ref_
private
template<typename KeyRefProd, typename CVal, typename KeyRef = typename helper::RefFromRefProdTrait<KeyRefProd>::ref_type, typename SizeType = unsigned int, typename KeyReferenceHelper = typename helper::AssociationKeyReferenceTrait<KeyRef>::type>
std::atomic<transient_vector_type*> edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::transientVector_
mutableprivate