| # Gaudi Framework, version v23r1 |

Home |  | Generated: Wed Feb 29 2012

Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Friends

# SmartRefVector< TYPE > Class Template Reference

Kernel objects: SmartRefVector. More...

`#include <SmartRefVector.h>`

Inheritance diagram for SmartRefVector< TYPE >:
[legend]
Collaboration diagram for SmartRefVector< TYPE >:
[legend]

List of all members.

## Public Member Functions
| SmartRefVector ()
| Standard Constructor.
template<class ITERATOR >
| SmartRefVector (ITERATOR first, ITERATOR last)
| templated Constructor
| SmartRefVector (const SmartRefVector &copy)
| Copy Constructor.
SmartRefVector< TYPE > & | operator() (ContainedObject *pObj)
| Standard destructor.
const SmartRefVector< TYPE > & | operator() (const ContainedObject *pObj) const
| operator() const: assigns parent object for serialisation
SmartRefVector< TYPE > & | operator() (DataObject *pObj)
| operator(): assigns parent object for serialisation
const SmartRefVector< TYPE > & | operator() (const DataObject *pObj) const
| operator() const: assigns parent object for serialisation
SmartRefVector< TYPE > & | operator= (const SmartRefVector< TYPE > &copy)
| Assignment.
const std::type_info * | type () const
| Access to embedded type.
StreamBuffer & | readRefs (StreamBuffer &s)
| Helper to read references.
StreamBuffer & | writeRefs (StreamBuffer &s) const
| Helper to write references.
## Protected Types
typedef SmartRef< TYPE > | _Entry
| That's the type of crap I am hosting.
typedef std::vector< _Entry > | _Base
| Object types: typedef myself as Base.
typedef std::vector< _Entry > ::const_iterator | _BaseConstIter
typedef std::vector< _Entry > ::value_type | _BaseValueType
## Protected Member Functions
void | _setEnvironment (const DataObject *pObj, const ContainedObject *pContd) const
| Set the environment for the vector and all contained objects references.
## Protected Attributes
const DataObject * | m_data
| Object data: Pointer to the identifiable object the link originates.
const ContainedObject * | m_contd
| Object data: Pointer to the Contained object (if applicable)
## Friends
StreamBuffer & | operator<< (StreamBuffer &_s, const SmartRefVector< TYPE > &ptr)
| Output Streamer operator.
StreamBuffer & | operator>> (StreamBuffer &_s, SmartRefVector< TYPE > &ptr)
| Input Streamer operator.

## Detailed Description

### template<class TYPE>
class SmartRefVector< TYPE >

Kernel objects: SmartRefVector.

Description: The SmartRefVector class allows transparent handling of multiple object links within the data store. Links are unloaded a priori and will only be loaded "on demand", i.e. when dereferenced.

SmartRefVectors should behave in the same way as normal vectors of pointers;

Using SmartRefVectors the environment of the vector is automatically propagated to each contained reference.

In order to speed things up, an attempt was made to avoid any virtual functions.

Base Class: STL vector

Dependencies:

- Base class: vector
- SmartRef constructs: Gaudi/Kernel/SmartRef.h

History :

        +---------+----------------------------------------------+--------+
        |    Date |                 Comment                      | Who    |
        +---------+----------------------------------------------+--------+
        | 12/07/99| Initial version.                             | MF     |
        +---------+----------------------------------------------+--------+

Author: M.Frank Version: 1.0

Definition at line 54 of file SmartRefVector.h.

## Member Typedef Documentation

template<class TYPE>

typedef std::vector<_Entry> SmartRefVector< TYPE >::_Base`[protected]`

Object types: typedef myself as Base.

Definition at line 59 of file SmartRefVector.h.

template<class TYPE>

typedef std::vector<_Entry>::const_iterator SmartRefVector< TYPE >::_BaseConstIter`[protected]`

Definition at line 60 of file SmartRefVector.h.

template<class TYPE>

typedef std::vector<_Entry>::value_type SmartRefVector< TYPE >::_BaseValueType`[protected]`

Definition at line 61 of file SmartRefVector.h.

template<class TYPE>

typedef SmartRef<TYPE> SmartRefVector< TYPE >::_Entry`[protected]`

That's the type of crap I am hosting.

Definition at line 57 of file SmartRefVector.h.

## Constructor & Destructor Documentation

template<class TYPE>

SmartRefVector< TYPE >::SmartRefVector | ( | ) | `[inline]`

Standard Constructor.

Definition at line 78 of file SmartRefVector.h.

                        {
        m_contd  = 0;
        m_data   = 0;
      }

template<class TYPE>
template<class ITERATOR >

SmartRefVector< TYPE >::SmartRefVector | ( | ITERATOR | first,
|  | ITERATOR | last
| ) |  | `[inline]`

templated Constructor

Definition at line 84 of file SmartRefVector.h.

        :  std::vector< SmartRef<TYPE> >( first , last )
        , m_data  ( 0 )
        , m_contd ( 0 )
      {

      }

template<class TYPE>

SmartRefVector< TYPE >::SmartRefVector | ( | const SmartRefVector< TYPE > & | copy ) | `[inline]`

Copy Constructor.

Definition at line 92 of file SmartRefVector.h.

        :  std::vector< SmartRef<TYPE> >(copy) {
        *this = copy;
      }

## Member Function Documentation

template<class TYPE>

void SmartRefVector< TYPE >::_setEnvironment | ( | const DataObject * | pObj,
|  | const ContainedObject * | pContd
| ) |  | const`[inline, protected]`

Set the environment for the vector and all contained objects references.

Definition at line 69 of file SmartRefVector.h.

                                                                                          {
        m_data  = pObj;
        m_contd = pContd;
        for ( _BaseConstIter i = _Base::begin(); i != _Base::end(); i++ )   {
          (*i)._setEnvironment(pObj, pContd);
        }
      }

template<class TYPE>

SmartRefVector<TYPE>& SmartRefVector< TYPE >::operator() | ( | ContainedObject * | pObj ) | `[inline]`

Standard destructor.

operator(): assigns parent object for serialisation

Definition at line 101 of file SmartRefVector.h.

                                                                  {
        _setEnvironment((0==pObj) ? 0 : pObj->parent(), pObj);
        return *this;
      }

template<class TYPE>

SmartRefVector<TYPE>& SmartRefVector< TYPE >::operator() | ( | DataObject * | pObj ) | `[inline]`

operator(): assigns parent object for serialisation

Definition at line 111 of file SmartRefVector.h.

                                                             {
        _setEnvironment(pObj,0);
        return *this;
      }

template<class TYPE>

const SmartRefVector<TYPE>& SmartRefVector< TYPE >::operator() | ( | const DataObject * | pObj ) | const`[inline]`

operator() const: assigns parent object for serialisation

Definition at line 116 of file SmartRefVector.h.

                                                                              {
        _setEnvironment(pObj,0);
        return *this;
      }

template<class TYPE>

const SmartRefVector<TYPE>& SmartRefVector< TYPE >::operator() | ( | const ContainedObject * | pObj ) | const`[inline]`

operator() const: assigns parent object for serialisation

Definition at line 106 of file SmartRefVector.h.

                                                                                   {
        _setEnvironment((0==pObj) ? 0 : pObj->parent(), pObj);
        return *this;
      }

template<class TYPE>

SmartRefVector<TYPE>& SmartRefVector< TYPE >::operator= | ( | const SmartRefVector< TYPE > & | copy ) | `[inline]`

Assignment.

Definition at line 121 of file SmartRefVector.h.

                                                                         {
        _Base::operator=(copy);
        // Harms.... MF
        // on copy we MUST make a 1 to 1 copy
        // _setEnvironment( copy.m_data, copy.m_contd );
        // use instead:
        m_data  = copy.m_data;
        m_contd = copy.m_contd;
        return *this;
      }

template<class TYPE >

StreamBuffer & SmartRefVector< TYPE >::readRefs | ( | StreamBuffer & | s ) | `[inline]`

Helper to read references.

Definition at line 163 of file SmartRefVector.h.

                                                                   {
      long len;
      _Base::erase( _Base::begin(), _Base::end() );
      s >> len;
      for ( long i = 0; i < len; i++ )    {
        _BaseValueType entry;
        entry._setEnvironment(m_data, m_contd);
        entry.readRef(s);
        _Base::push_back( entry );
      }
      return s;
    }

template<class TYPE>

const std::type_info* SmartRefVector< TYPE >::type | ( | ) | const`[inline]`

Access to embedded type.

Definition at line 132 of file SmartRefVector.h.

                                          {
        return &typeid(TYPE);
      }

template<class TYPE >

StreamBuffer & SmartRefVector< TYPE >::writeRefs | ( | StreamBuffer & | s ) | const`[inline]`

Helper to write references.

Definition at line 152 of file SmartRefVector.h.

                                                                         {
      long len = _Base::size();
      s << len;
      for ( _BaseConstIter i = _Base::begin(); i != _Base::end(); i++ )   {
        (*i)._setEnvironment(m_data, m_contd);
        (*i).writeRef(s);
      }
      return s;
    }

## Friends And Related Function Documentation

template<class TYPE>

StreamBuffer& operator<< | ( | StreamBuffer & | _s,
|  | const SmartRefVector< TYPE > & | ptr
| ) |  | `[friend]`

Output Streamer operator.

Definition at line 141 of file SmartRefVector.h.

                                                                                            {
        return ptr.writeRefs(_s);
      }

template<class TYPE>

StreamBuffer& operator>> | ( | StreamBuffer & | _s,
|  | SmartRefVector< TYPE > & | ptr
| ) |  | `[friend]`

Input Streamer operator.

Definition at line 146 of file SmartRefVector.h.

                                                                                        {
        return ptr.readRefs(_s);
      }

## Member Data Documentation

template<class TYPE>

const ContainedObject* SmartRefVector< TYPE >::m_contd`[mutable, protected]`

Object data: Pointer to the Contained object (if applicable)

Definition at line 66 of file SmartRefVector.h.

template<class TYPE>

const DataObject* SmartRefVector< TYPE >::m_data`[mutable, protected]`

Object data: Pointer to the identifiable object the link originates.

Definition at line 64 of file SmartRefVector.h.

The documentation for this class was generated from the following file:

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r1/GaudiKernel/GaudiKernel/SmartRefVector.h

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines