CMS 3D CMS Logo

Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes

edm::PtrVectorBase Class Reference

#include <PtrVectorBase.h>

Inheritance diagram for edm::PtrVectorBase:
edm::PtrVector< T >

List of all members.

Public Types

typedef unsigned long key_type
typedef key_type size_type

Public Member Functions

size_type capacity () const
 Capacity of the RefVector.
void clear ()
 Clear the PtrVector.
bool empty () const
 Is the RefVector empty.
bool hasCache () const
bool hasProductCache () const
ProductID id () const
 Accessor for product ID.
bool isAvailable () const
bool isNonnull () const
 Checks for non-null.
bool isNull () const
 Checks for null.
bool isTransient () const
bool operator! () const
 Checks for null.
bool operator== (PtrVectorBase const &iRHS) const
void const * product () const
EDProductGetter const * productGetter () const
 Accessor for product getter.
 PtrVectorBase (ProductID const &productID, void const *prodPtr=0, EDProductGetter const *prodGetter=0)
void reserve (size_type n)
 Reserve space for RefVector.
void setProductGetter (EDProductGetter *iGetter) const
size_type size () const
 Size of the RefVector.
virtual ~PtrVectorBase ()

Protected Member Functions

template<typename TPtr >
TPtr makePtr (unsigned long iIndex) const
template<typename TPtr >
TPtr makePtr (std::vector< void const * >::const_iterator const iIt) const
 PtrVectorBase ()
void push_back_base (RefCore const &core, key_type iKey, void const *iData)
void swap (PtrVectorBase &other)
 swap
std::vector< void const * >
::const_iterator 
void_begin () const
std::vector< void const * >
::const_iterator 
void_end () const

Private Member Functions

void getProduct_ () const
virtual std::type_info const & typeInfo () const =0

Private Attributes

std::vector< void const * > cachedItems_
RefCore core_
std::vector< key_typeindicies_

Detailed Description

Definition at line 31 of file PtrVectorBase.h.


Member Typedef Documentation

typedef unsigned long edm::PtrVectorBase::key_type

Definition at line 34 of file PtrVectorBase.h.

Definition at line 35 of file PtrVectorBase.h.


Constructor & Destructor Documentation

edm::PtrVectorBase::PtrVectorBase ( ProductID const &  productID,
void const *  prodPtr = 0,
EDProductGetter const *  prodGetter = 0 
) [inline, explicit]

Definition at line 37 of file PtrVectorBase.h.

                                                                  :
      core_(productID, prodPtr, prodGetter, false), indicies_() {}
PtrVectorBase::~PtrVectorBase ( ) [virtual]

Definition at line 39 of file PtrVectorBase.cc.

  {
  }
PtrVectorBase::PtrVectorBase ( ) [protected]

Definition at line 35 of file PtrVectorBase.cc.

  {
  }

Member Function Documentation

size_type edm::PtrVectorBase::capacity ( ) const [inline]

Capacity of the RefVector.

Definition at line 75 of file PtrVectorBase.h.

References indicies_.

{return indicies_.capacity();}
void edm::PtrVectorBase::clear ( void  ) [inline]
bool edm::PtrVectorBase::empty ( ) const [inline]

Is the RefVector empty.

Definition at line 69 of file PtrVectorBase.h.

References indicies_.

Referenced by pat::PATObject< ObjectType >::setOverlaps().

{return indicies_.empty();}
void PtrVectorBase::getProduct_ ( ) const [private]

Definition at line 79 of file PtrVectorBase.cc.

References cachedItems_, Exception, edm::EDProduct::fillPtrVector(), edm::EDProductGetter::getIt(), hasCache(), id(), indicies_, edm::errors::InvalidReference, edm::errors::LogicError, product(), productGetter(), and typeInfo().

Referenced by void_begin(), and void_end().

                                   {
    if(hasCache()) {
      return;
    }
    if(indicies_.size() == 0) {
      return;
    }
    if(0 == productGetter()) {
      throw edm::Exception(edm::errors::LogicError) << "Tried to get data for a PtrVector which has no EDProductGetter\n";
    }
    EDProduct const* product = productGetter()->getIt(id());

    if(0==product) {
      throw edm::Exception(edm::errors::InvalidReference) << "Asked for data from a PtrVector which refers to a non-existent product which id " << id() << "\n";
    }
    product->fillPtrVector(typeInfo(),
                              indicies_,
                              cachedItems_);
  }
bool edm::PtrVectorBase::hasCache ( ) const [inline]

Definition at line 60 of file PtrVectorBase.h.

References cachedItems_.

Referenced by getProduct_(), and makePtr().

{ return !cachedItems_.empty(); }
bool edm::PtrVectorBase::hasProductCache ( ) const [inline]

Definition at line 62 of file PtrVectorBase.h.

References core_, and edm::RefCore::productPtr().

{ return 0 == core_.productPtr(); }
ProductID edm::PtrVectorBase::id ( void  ) const [inline]
bool edm::PtrVectorBase::isAvailable ( ) const [inline]

True if the data is in memory or is available in the Event No type checking is done.

Definition at line 66 of file PtrVectorBase.h.

References core_, and edm::RefCore::isAvailable().

{ return core_.isAvailable(); }
bool edm::PtrVectorBase::isNonnull ( ) const [inline]

Checks for non-null.

Definition at line 49 of file PtrVectorBase.h.

References core_, and edm::RefCore::isNonnull().

Referenced by isNull().

{ return core_.isNonnull(); }
bool edm::PtrVectorBase::isNull ( ) const [inline]

Checks for null.

Definition at line 45 of file PtrVectorBase.h.

References isNonnull().

Referenced by operator!().

{return !isNonnull(); }
bool edm::PtrVectorBase::isTransient ( ) const [inline]

Definition at line 89 of file PtrVectorBase.h.

References core_, and edm::RefCore::isTransient().

Referenced by makePtr().

{return core_.isTransient();}
template<typename TPtr >
TPtr edm::PtrVectorBase::makePtr ( unsigned long  iIndex) const [inline, protected]

Definition at line 113 of file PtrVectorBase.h.

References cachedItems_, hasCache(), indicies_, isTransient(), and productGetter().

                                             {
      if (isTransient()) {
        return TPtr(reinterpret_cast<typename TPtr::value_type const*>(cachedItems_[iIndex]),
                  indicies_[iIndex]);
      }
      if (hasCache()) {
        return TPtr(this->id(),
                  reinterpret_cast<typename TPtr::value_type const*>(cachedItems_[iIndex]),
                  indicies_[iIndex]);
      }
      return TPtr(this->id(), indicies_[iIndex], productGetter());
    }
template<typename TPtr >
TPtr edm::PtrVectorBase::makePtr ( std::vector< void const * >::const_iterator const  iIt) const [inline, protected]

Definition at line 127 of file PtrVectorBase.h.

References cachedItems_, hasCache(), indicies_, isTransient(), and productGetter().

                                                                       {
      if (isTransient()) {
        return TPtr(reinterpret_cast<typename TPtr::value_type const*>(*iIt),
                  indicies_[iIt - cachedItems_.begin()]);
      }
      if (hasCache()) {
        return TPtr(this->id(),
                  reinterpret_cast<typename TPtr::value_type const*>(*iIt),
                  indicies_[iIt - cachedItems_.begin()]);
      }
      return TPtr(this->id(), indicies_[iIt - cachedItems_.begin()], productGetter());
    }
bool edm::PtrVectorBase::operator! ( ) const [inline]

Checks for null.

Definition at line 52 of file PtrVectorBase.h.

References isNull().

{return isNull();}
bool PtrVectorBase::operator== ( PtrVectorBase const &  iRHS) const

Definition at line 100 of file PtrVectorBase.cc.

References core_, and indicies_.

                                                           {
    if (core_ != iRHS.core_) {
      return false;
    }
    if (indicies_.size() != iRHS.indicies_.size()){
      return false;
    }
    return std::equal(indicies_.begin(),
                      indicies_.end(),
                      iRHS.indicies_.begin());
    return true;
  }
void const* edm::PtrVectorBase::product ( ) const [inline]

Definition at line 91 of file PtrVectorBase.h.

Referenced by getProduct_().

                                {
       return 0;
    }
EDProductGetter const* edm::PtrVectorBase::productGetter ( ) const [inline]

Accessor for product getter.

Definition at line 58 of file PtrVectorBase.h.

References core_, and edm::RefCore::productGetter().

Referenced by getProduct_(), and makePtr().

{return core_.productGetter();}
void PtrVectorBase::push_back_base ( RefCore const &  core,
key_type  iKey,
void const *  iData 
) [protected]

Definition at line 60 of file PtrVectorBase.cc.

References cachedItems_, core_, indicies_, and edm::RefCore::pushBackItem().

Referenced by edm::PtrVector< Candidate >::push_back().

                                                                                     {
    core_.pushBackItem(core, false);
    //Did we already push a 'non-cached' Ptr into the container or is this a 'non-cached' Ptr?
    if(indicies_.size() == cachedItems_.size()) {
      if(iData) {
        cachedItems_.push_back(iData);
      } else if(key_traits<key_type>::value == iKey) {
        cachedItems_.push_back(0);
      } else {
        cachedItems_.clear();
      }
    }
    indicies_.push_back(iKey);
  }
void edm::PtrVectorBase::reserve ( size_type  n) [inline]

Reserve space for RefVector.

Definition at line 85 of file PtrVectorBase.h.

References cachedItems_, and indicies_.

{indicies_.reserve(n); cachedItems_.reserve(n);}
void edm::PtrVectorBase::setProductGetter ( EDProductGetter iGetter) const [inline]

Definition at line 87 of file PtrVectorBase.h.

References core_, and edm::RefCore::setProductGetter().

{ core_.setProductGetter(iGetter); }
size_type edm::PtrVectorBase::size ( void  ) const [inline]
void PtrVectorBase::swap ( PtrVectorBase other) [protected]

swap

Definition at line 53 of file PtrVectorBase.cc.

References cachedItems_, core_, indicies_, and edm::RefCore::swap().

                                         {
    core_.swap(other.core_);
    indicies_.swap(other.indicies_);
    cachedItems_.swap(other.cachedItems_);
  }
virtual std::type_info const& edm::PtrVectorBase::typeInfo ( ) const [private, pure virtual]
std::vector<void const*>::const_iterator edm::PtrVectorBase::void_begin ( ) const [inline, protected]

Definition at line 103 of file PtrVectorBase.h.

References cachedItems_, and getProduct_().

Referenced by edm::PtrVector< Candidate >::begin().

                                                            {
      getProduct_();
      return cachedItems_.begin();
    }
std::vector<void const*>::const_iterator edm::PtrVectorBase::void_end ( ) const [inline, protected]

Definition at line 107 of file PtrVectorBase.h.

References cachedItems_, and getProduct_().

Referenced by edm::PtrVector< Candidate >::end().

                                                          {
      getProduct_();
      return cachedItems_.end();
    }

Member Data Documentation

std::vector<void const*> edm::PtrVectorBase::cachedItems_ [mutable, private]
std::vector<key_type> edm::PtrVectorBase::indicies_ [private]