CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends
edm::RefToBase< T > Class Template Reference

#include <AssociativeIterator.h>

Public Types

typedef T value_type
 

Public Member Functions

template<class REF >
REF castTo () const
 
value_type const * get () const
 
std::unique_ptr< reftobase::RefHolderBaseholder () const
 
ProductID id () const
 
bool isAvailable () const
 
bool isNonnull () const
 Checks for non-null. More...
 
bool isNull () const
 Checks for null. More...
 
bool isTransient () const
 
size_t key () const
 
bool operator! () const
 Checks for null. More...
 
bool operator!= (RefToBase const &rhs) const
 
value_type const & operator* () const
 
value_type const * operator-> () const
 
RefToBaseoperator= (RefToBase &&other) noexcept
 
RefToBaseoperator= (RefToBase const &rhs)
 
bool operator== (RefToBase const &rhs) const
 
EDProductGetter const * productGetter () const
 
 RefToBase ()
 
 RefToBase (RefToBase const &other)
 
 RefToBase (RefToBase &&other) noexcept
 
template<typename C1 , typename T1 , typename F1 >
 RefToBase (Ref< C1, T1, F1 > const &r)
 
template<typename C >
 RefToBase (RefProd< C > const &r)
 
 RefToBase (RefToBaseProd< T > const &r, size_t i)
 
 RefToBase (Handle< View< T >> const &handle, size_t i)
 
template<typename T1 >
 RefToBase (RefToBase< T1 > const &r)
 
 RefToBase (std::unique_ptr< reftobase::BaseHolder< value_type >>)
 
 RefToBase (std::shared_ptr< reftobase::RefHolderBase > p)
 
template<class T>
 RefToBase (std::unique_ptr< reftobase::BaseHolder< value_type >> p)
 
void swap (RefToBase &other)
 
 ~RefToBase () noexcept
 

Static Public Member Functions

static short Class_Version ()
 

Private Member Functions

value_type const * getPtrImpl () const
 

Private Attributes

reftobase::BaseHolder< value_type > * holder_
 

Friends

template<typename B >
class RefToBase
 
class RefToBaseProd< T >
 
class RefToBaseVector< T >
 

Detailed Description

template<class T>
class edm::RefToBase< T >

Definition at line 54 of file AssociativeIterator.h.

Member Typedef Documentation

◆ value_type

template<class T>
typedef T edm::RefToBase< T >::value_type

Definition at line 72 of file RefToBase.h.

Constructor & Destructor Documentation

◆ RefToBase() [1/11]

template<class T >
RefToBase::RefToBase ( )
inline

Definition at line 139 of file RefToBase.h.

139 : holder_(nullptr) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ RefToBase() [2/11]

template<class T >
RefToBase::RefToBase ( RefToBase< T > const &  other)
inline

Definition at line 142 of file RefToBase.h.

142 : holder_(other.holder_ ? other.holder_->clone() : nullptr) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ RefToBase() [3/11]

template<class T >
RefToBase::RefToBase ( RefToBase< T > &&  other)
inlinenoexcept

Definition at line 145 of file RefToBase.h.

145  : holder_(other.holder_) {
146  other.holder_ = nullptr;
147  }
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ RefToBase() [4/11]

template<class T >
template<typename C1 , typename T1 , typename F1 >
RefToBase::RefToBase ( Ref< C1, T1, F1 > const &  r)
inlineexplicit

Definition at line 159 of file RefToBase.h.

160  : holder_(new reftobase::Holder<T, Ref<C1, T1, F1>>(iRef)) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127
long double T

◆ RefToBase() [5/11]

template<class T >
template<typename C >
RefToBase::RefToBase ( RefProd< C > const &  r)
inlineexplicit

Definition at line 164 of file RefToBase.h.

164 : holder_(new reftobase::Holder<T, RefProd<C>>(iRef)) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127
long double T

◆ RefToBase() [6/11]

template<class T>
RefToBase::RefToBase ( RefToBaseProd< T > const &  r,
size_t  i 
)
inline

Definition at line 354 of file RefToBase.h.

355  : holder_(r.operator->()->refAt(i).holder_->clone()) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ RefToBase() [7/11]

template<typename T>
RefToBase::RefToBase ( Handle< View< T >> const &  handle,
size_t  i 
)
inline

Definition at line 358 of file RefToBase.h.

359  : holder_(handle.operator->()->refAt(i).holder_->clone()) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ RefToBase() [8/11]

template<class T >
template<typename T1 >
RefToBase::RefToBase ( RefToBase< T1 > const &  r)
inlineexplicit

Definition at line 168 of file RefToBase.h.

169  : holder_(
170  new reftobase::IndirectHolder<T>(std::shared_ptr<edm::reftobase::RefHolderBase>(iRef.holder().release()))) {
171  // OUT: holder_( new reftobase::Holder<T,RefToBase<T1> >(iRef ) ) {
172  // Forcing the conversion through IndirectHolder,
173  // as Holder<T,RefToBase<T1>> would need dictionaries we will never have.
174  // In this way we only need the IndirectHolder<T> and the RefHolder of the real type of the item
175  // This might cause a small performance penalty.
176  static_assert(std::is_base_of<T, T1>::value, "RefToBase::RefToBase T not base of T1");
177  }
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ RefToBase() [9/11]

template<class T>
edm::RefToBase< T >::RefToBase ( )

◆ RefToBase() [10/11]

template<class T>
RefToBase::RefToBase ( std::shared_ptr< reftobase::RefHolderBase p)
inline

Definition at line 183 of file RefToBase.h.

184  : holder_(new reftobase::IndirectHolder<T>(p)) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ ~RefToBase()

template<class T >
RefToBase::~RefToBase ( )
inlinenoexcept

Definition at line 187 of file RefToBase.h.

187  {
188  delete holder_;
189  }
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ RefToBase() [11/11]

template<class T>
template<class T>
edm::RefToBase< T >::RefToBase ( std::unique_ptr< reftobase::BaseHolder< value_type >>  p)
inline

Definition at line 180 of file RefToBase.h.

180 : holder_(p.release()) {}
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

Member Function Documentation

◆ castTo()

template<class T >
template<class REF >
REF RefToBase::castTo ( ) const

Definition at line 257 of file RefToBase.h.

Referenced by ElectronMcSignalValidator::analyze(), ConversionProducer::buildCollection(), MuonTrajectoryCleaner::clean(), HLTElectronPixelMatchFilter::getNrOfMatches(), pat::PATJetUpdater::produce(), ConversionTrackProducer::produce(), MuMuForEmbeddingSelector::produce(), NuclearTrackCorrector::produce(), EgammaHLTPixelMatchVarProducer::produce(), EgammaHLTExtraProducer::setSeeds(), reco::PFTau::sourceCandidatePtr(), edmtest::ViewAnalyzer::testProductWithBaseClass(), and edmtest::ViewAnalyzer::testRefVector().

257  {
258  if (!holder_) {
260  "attempting to cast a null RefToBase;\n"
261  "You should check for nullity before casting.");
262  }
263 
264  checkTypeCompatibility<T, typename REF::value_type>();
265 
266  // If REF is type edm::Ref<C,T,F>, then it is impossible to
267  // check the container type C here. We just have to assume
268  // that the caller provided the correct type.
269 
270  EDProductGetter const* getter = productGetter();
271  if (getter) {
272  return REF(id(), key(), getter);
273  }
274 
275  T const* value = get();
276  if (value == nullptr) {
277  return REF(id());
278  }
279  typename REF::value_type const* newValue = convertTo<T, typename REF::value_type>(value);
280  if (newValue) {
281  return REF(id(), newValue, key(), isTransient());
282  }
283 
285  "RefToBase<T>::castTo Error attempting to cast mismatched types\n"
286  "casting from RefToBase with T: ",
287  typeid(T).name(),
288  "\ncasting to: ",
289  typeid(REF).name());
290  return REF();
291  }
bool isTransient() const
Definition: RefToBase.h:121
static void throwThis(Code category, char const *message0="", char const *message1="", char const *message2="", char const *message3="", char const *message4="")
Definition: EDMException.cc:85
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127
EDProductGetter const * productGetter() const
Definition: RefToBase.h:327
Definition: value.py:1
size_t key() const
Definition: RefToBase.h:219
long double T

◆ Class_Version()

template<class T>
static short edm::RefToBase< T >::Class_Version ( )
inlinestatic

Definition at line 124 of file RefToBase.h.

125 :
126  value_type const* getPtrImpl() const;
value_type const * getPtrImpl() const
Definition: RefToBase.h:332

◆ get()

template<class T >
T const * RefToBase::get ( ) const
inline

Definition at line 209 of file RefToBase.h.

Referenced by Options.Options::__getitem__(), betterConfigParser.BetterConfigParser::__updateDict(), submitPVValidationJobs.BetterConfigParser::__updateDict(), TkConvValidator::analyze(), TestOutliers::analyze(), PhotonValidator::analyze(), IsolatedTracksNxN::analyze(), PFElecTkProducer::applySelection(), ConversionProducer::buildCollection(), FWPFTauProxyBuilder::buildViewType(), util.rrapi.RRApi::columns(), rrapi.RRApi::columns(), PFMEtSignInterfaceBase::compResolution(), edm::helper::RefConverter< RefToBase< T >, Ptr< T > >::convert(), util.rrapi.RRApi::count(), rrapi.RRApi::count(), rrapi.RRApi::data(), util.rrapi.RRApi::data(), PFElecTkProducer::findPfRef(), reco::GenJet::genParticle(), reco::Candidate::get(), reco::LeafCandidate::get(), L6SLBCorrectorImpl::getBTagInfoIndex(), betterConfigParser.BetterConfigParser::getCompares(), betterConfigParser.BetterConfigParser::getGeneral(), betterConfigParser.BetterConfigParser::getResultingSection(), submitPVValidationJobs.BetterConfigParser::getResultingSection(), PFElecTkProducer::isSameEgSC(), PFElecTkProducer::isSharingEcalEnergyWithEgSC(), reco::makeSpecific(), TemplatedSecondaryVertexProducer< IPTI, VTX >::matchSubjets(), pat::MET::MET(), pat::TriggerObject::origObjCand(), ConversionTrackProducer::produce(), pat::PATJetProducer::produce(), rrapi.RRApi::report(), util.rrapi.RRApi::report(), rrapi.RRApi::reports(), util.rrapi.RRApi::reports(), rrapi.RRApi::tables(), util.rrapi.RRApi::tables(), rrapi.RRApi::tags(), util.rrapi.RRApi::tags(), rrapi.RRApi::templates(), util.rrapi.RRApi::templates(), reco::ConversionTrack::track(), pat::VertexAssociation::track(), rrapi.RRApi::workspaces(), and util.rrapi.RRApi::workspaces().

209  {
210  return getPtrImpl();
211  }
value_type const * getPtrImpl() const
Definition: RefToBase.h:332

◆ getPtrImpl()

template<class T >
T const * RefToBase::getPtrImpl ( ) const
inlineprivate

Definition at line 332 of file RefToBase.h.

332  {
333  return holder_ ? holder_->getPtr() : nullptr;
334  }
virtual T const * getPtr() const =0
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ holder()

template<class T >
std::unique_ptr< reftobase::RefHolderBase > RefToBase::holder ( ) const

Definition at line 337 of file RefToBase.h.

Referenced by edm::RefToBase< TrajectorySeed >::holder().

337  {
338  return holder_ ? holder_->holder() : std::unique_ptr<reftobase::RefHolderBase>();
339  }
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127
virtual std::unique_ptr< RefHolderBase > holder() const =0

◆ id()

template<class T >
ProductID RefToBase::id ( ) const
inline

◆ isAvailable()

template<class T>
bool edm::RefToBase< T >::isAvailable ( ) const
inline

Checks if collection is in memory or available in the Event. No type checking is done.

Definition at line 119 of file RefToBase.h.

Referenced by edm::helper::RefConverter< RefToBase< T >, Ptr< T > >::convert(), and LowPtConversion::match().

119 { return holder_ ? holder_->isAvailable() : false; }
virtual bool isAvailable() const =0
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ isNonnull()

template<class T >
bool RefToBase::isNonnull ( ) const
inline

◆ isNull()

template<class T >
bool RefToBase::isNull ( ) const
inline

◆ isTransient()

template<class T>
bool edm::RefToBase< T >::isTransient ( ) const
inline

Definition at line 121 of file RefToBase.h.

121 { return holder_ ? holder_->isTransient() : false; }
virtual bool isTransient() const =0
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ key()

template<class T >
size_t RefToBase::key ( ) const
inline

Definition at line 219 of file RefToBase.h.

Referenced by MuonTrackValidator::analyze(), MuonToTrackingParticleAssociatorByHitsImpl::associateMuons(), VertexAssociatorByTracks::associateSimToReco(), PFDisplacedVertexFinder::commonTracks(), edm::helper::RefConverter< RefToBase< T >, Ptr< T > >::convert(), equals(), edm::RefToBaseVector< reco::Track >::fillView(), BTagPerformanceAnalyzerOnData::jetRefCompare(), PFDisplacedVertexCandidateFinder::link(), LowPtConversion::match(), ConversionTools::matchesConversion(), TemplatedSecondaryVertexProducer< IPTI, VTX >::matchSubjets(), TagAndProbeBtagTriggerMonitor::JetRefCompare::operator()(), BTagPerformanceAnalyzerMC::JetRefCompare::operator()(), TopMonitor::JetRefCompare::operator()(), HLTBTagPerformanceAnalyzer::JetRefCompare::operator()(), BTagAndProbe::JetRefCompare::operator()(), ParticleNetJetTagMonitor::JetRefCompare::operator()(), PFDisplacedTrackerVertexProducer::produce(), Onia2MuMuPAT::produce(), IPProducerHelpers::FromJetAndCands::tracks(), and pat::helper::TriggerMatchHelper::triggerMatchObject().

219  {
220  if (holder_ == nullptr) {
222  "attempting get key from null RefToBase;\n"
223  "You should check for nullity before calling key().");
224  return 0;
225  }
226  return holder_->key();
227  }
static void throwThis(Code category, char const *message0="", char const *message1="", char const *message2="", char const *message3="", char const *message4="")
Definition: EDMException.cc:85
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127
virtual size_t key() const =0

◆ operator!()

template<class T >
bool RefToBase::operator! ( ) const
inline

Checks for null.

Definition at line 307 of file RefToBase.h.

307  {
308  return isNull();
309  }
bool isNull() const
Checks for null.
Definition: RefToBase.h:295

◆ operator!=()

template<class T>
bool RefToBase::operator!= ( RefToBase< T > const &  rhs) const
inline

Definition at line 317 of file RefToBase.h.

317  {
318  return !(*this == rhs);
319  }

◆ operator*()

template<class T >
T const & RefToBase::operator* ( ) const
inline

Definition at line 199 of file RefToBase.h.

199  {
200  return *getPtrImpl();
201  }
value_type const * getPtrImpl() const
Definition: RefToBase.h:332

◆ operator->()

template<class T >
T const * RefToBase::operator-> ( ) const
inline

Definition at line 204 of file RefToBase.h.

204  {
205  return getPtrImpl();
206  }
value_type const * getPtrImpl() const
Definition: RefToBase.h:332

◆ operator=() [1/2]

template<class T >
RefToBase< T > & RefToBase::operator= ( RefToBase< T > &&  other)
inlinenoexcept

Definition at line 150 of file RefToBase.h.

150  {
151  delete holder_;
152  holder_ = other.holder_;
153  other.holder_ = nullptr;
154  return *this;
155  }
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ operator=() [2/2]

template<class T>
RefToBase& edm::RefToBase< T >::operator= ( RefToBase< T > const &  rhs)

◆ operator==()

template<class T>
bool RefToBase::operator== ( RefToBase< T > const &  rhs) const
inline

Definition at line 312 of file RefToBase.h.

312  {
313  return holder_ ? holder_->isEqualTo(*rhs.holder_) : holder_ == rhs.holder_;
314  }
virtual bool isEqualTo(BaseHolder< T > const &rhs) const =0
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127

◆ productGetter()

template<class T >
EDProductGetter const * RefToBase::productGetter ( ) const
inline

Definition at line 327 of file RefToBase.h.

327  {
328  return holder_ ? holder_->productGetter() : nullptr;
329  }
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127
virtual EDProductGetter const * productGetter() const =0

◆ swap()

template<class T>
void RefToBase::swap ( RefToBase< T > &  other)
inline

Definition at line 322 of file RefToBase.h.

322  {
323  std::swap(holder_, other.holder_);
324  }
reftobase::BaseHolder< value_type > * holder_
Definition: RefToBase.h:127
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)

Friends And Related Function Documentation

◆ RefToBase

template<class T>
template<typename B >
friend class RefToBase
friend

Definition at line 131 of file RefToBase.h.

◆ RefToBaseProd< T >

template<class T>
friend class RefToBaseProd< T >
friend

Definition at line 129 of file RefToBase.h.

◆ RefToBaseVector< T >

template<class T>
friend class RefToBaseVector< T >
friend

Definition at line 128 of file RefToBase.h.

Member Data Documentation

◆ holder_

template<class T>
reftobase::BaseHolder<value_type>* edm::RefToBase< T >::holder_
private