CMS 3D CMS Logo

Public Types | Public Member Functions

FWItemDetSetAccessor< C, COLL, V > Class Template Reference

#include <FWItemRandomAccessor.h>

Inheritance diagram for FWItemDetSetAccessor< C, COLL, V >:
FWItemRandomAccessorBase FWItemAccessorBase

List of all members.

Public Types

typedef COLL collection_type
typedef V collection_value_type
typedef C container_type

Public Member Functions

 FWItemDetSetAccessor (const TClass *iClass)
const void * modelData (int iIndex) const
 REGISTER_FWITEMACCESSOR_METHODS ()
unsigned int size () const

Detailed Description

template<class C, class COLL = typename C::value_type, class V = typename COLL::value_type>
class FWItemDetSetAccessor< C, COLL, V >

Generic class for creating accessors for containers which are implemented as a container of containers. This for example includes `DetSetVector` hence the name. Both the outer and the inner containers must follow the Random Access Container model and in particular must have a size() method. The outer collection must be iterable, while the inner collections must have an array subscript operator.

Definition at line 109 of file FWItemRandomAccessor.h.


Member Typedef Documentation

template<class C , class COLL = typename C::value_type, class V = typename COLL::value_type>
typedef COLL FWItemDetSetAccessor< C, COLL, V >::collection_type

Definition at line 113 of file FWItemRandomAccessor.h.

template<class C , class COLL = typename C::value_type, class V = typename COLL::value_type>
typedef V FWItemDetSetAccessor< C, COLL, V >::collection_value_type

Definition at line 114 of file FWItemRandomAccessor.h.

template<class C , class COLL = typename C::value_type, class V = typename COLL::value_type>
typedef C FWItemDetSetAccessor< C, COLL, V >::container_type

Definition at line 112 of file FWItemRandomAccessor.h.


Constructor & Destructor Documentation

template<class C , class COLL = typename C::value_type, class V = typename COLL::value_type>
FWItemDetSetAccessor< C, COLL, V >::FWItemDetSetAccessor ( const TClass *  iClass) [inline]

Definition at line 116 of file FWItemRandomAccessor.h.


Member Function Documentation

template<class C , class COLL = typename C::value_type, class V = typename COLL::value_type>
const void* FWItemDetSetAccessor< C, COLL, V >::modelData ( int  iIndex) const [inline, virtual]

Implements FWItemAccessorBase.

Definition at line 122 of file FWItemRandomAccessor.h.

References trackerHits::c, FWItemRandomAccessorBase::getDataPtr(), i, and FWItemDetSetAccessor< C, COLL, V >::size().

      {
         if (!getDataPtr())
            return 0;
         const container_type *c = reinterpret_cast<const container_type*>(getDataPtr());
         size_t collectionOffset = 0;
         for (typename container_type::const_iterator ci = c->begin(), ce = c->end(); ci != ce; ++ci)
         {
            size_t i = iIndex - collectionOffset;
            if (i < ci->size())
               return &(ci->operator[](i));
            collectionOffset += ci->size();
         }

         return 0;
      }
template<class C , class COLL = typename C::value_type, class V = typename COLL::value_type>
FWItemDetSetAccessor< C, COLL, V >::REGISTER_FWITEMACCESSOR_METHODS ( )
template<class C , class COLL = typename C::value_type, class V = typename COLL::value_type>
unsigned int FWItemDetSetAccessor< C, COLL, V >::size ( void  ) const [inline, virtual]

Implements FWItemAccessorBase.

Definition at line 139 of file FWItemRandomAccessor.h.

References trackerHits::c, FWItemRandomAccessorBase::getDataPtr(), and i.

Referenced by FWItemDetSetAccessor< C, COLL, V >::modelData().

      {
         if (!getDataPtr())
            return 0;
         const container_type *c = reinterpret_cast<const container_type*>(getDataPtr());
         size_t finalSize = 0;

         for (typename container_type::const_iterator i = c->begin(), e = c->end(); i != e; ++i)
            finalSize += i->size();
         
         return finalSize;
      }