The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
ObjectVector< TYPE > Class Template Reference

ObjectVector is one of the basic Gaudi container classes capable of being registered in Data Stores. More...

#include <GaudiKernel/ObjectVector.h>

Inheritance diagram for ObjectVector< TYPE >:
Collaboration diagram for ObjectVector< TYPE >:

Public Types

typedef TYPE contained_type
 
typedef std::vector< TYPE * >::value_type value_type
 
typedef std::vector< TYPE * >::reference reference
 
typedef std::vector< TYPE * >::const_reference const_reference
 
typedef std::vector< TYPE * >::iterator iterator
 
typedef std::vector< TYPE * >::const_iterator const_iterator
 
typedef std::vector< TYPE * >::reverse_iterator reverse_iterator
 
typedef std::vector< TYPE * >::const_reverse_iterator const_reverse_iterator
 
typedef std::vector< TYPE * >::pointer pointer
 
typedef std::vector< TYPE * >::const_pointer const_pointer
 
- Public Types inherited from ObjectContainerBase
typedef size_t size_type
 size_type, to conform the STL container interface
 

Public Member Functions

 ObjectVector ()=default
 
 ObjectVector (const ObjectVector< TYPE > &)=delete
 
ObjectVectoroperator= (const ObjectVector< TYPE > &)=delete
 
 ObjectVector (ObjectVector &&rhs)
 
 ~ObjectVector () override
 
const CLIDclID () const override
 Retrieve class ID.
 
ObjectVector< TYPE >::iterator begin ()
 Return an iterator pointing to the beginning of the container.
 
ObjectVector< TYPE >::const_iterator begin () const
 Return a const_iterator pointing to the beginning of the container.
 
ObjectVector< TYPE >::iterator end ()
 Return an iterator pointing to the end of the container.
 
ObjectVector< TYPE >::const_iterator end () const
 Return a const_iterator pointing to the end of the container.
 
ObjectVector< TYPE >::reverse_iterator rbegin ()
 Return a reverse_iterator pointing to the beginning of the reversed container.
 
ObjectVector< TYPE >::const_reverse_iterator rbegin () const
 Return a const_reverse_iterator pointing to the beginning of the reversed container.
 
ObjectVector< TYPE >::reverse_iterator rend ()
 Return a reverse_iterator pointing to the end of the reversed container.
 
ObjectVector< TYPE >::const_reverse_iterator rend () const
 Return a const_reverse_iterator pointing to the end of the reversed container.
 
ObjectVector< TYPE >::size_type size () const
 Return the size of the container.
 
ObjectVector< TYPE >::size_type numberOfObjects () const override
 The same as size(), return number of objects in the container.
 
ObjectVector< TYPE >::size_type max_size () const
 Return the largest possible size of the container.
 
ObjectVector< TYPE >::size_type capacity () const
 Return number of elements for which memory has been allocated It is always greater than or equal to size()
 
void reserve (typename ObjectVector< TYPE >::size_type value)
 Reserve place for "value" objects in the container.
 
bool empty () const
 Return true if the size of the container is 0.
 
ObjectVector< TYPE >::reference front ()
 Return reference to the first element.
 
ObjectVector< TYPE >::const_reference front () const
 Return const_reference to the first element.
 
ObjectVector< TYPE >::reference back ()
 Return reference to the last element.
 
ObjectVector< TYPE >::const_reference back () const
 Return const_reference to the last element.
 
void push_back (typename ObjectVector< TYPE >::const_reference value)
 push_back = append = insert a new element at the end of the container
 
long add (ContainedObject *pObject) override
 Add an object to the container.
 
void pop_back ()
 pop_back = remove the last element from the container The removed object will be deleted (see the method release)
 
long remove (ContainedObject *value) override
 Release object from the container (the poiter will be removed from the container, but the object itself will remain alive) (see the method pop_back)
 
ObjectVector< TYPE >::iterator insert (typename ObjectVector< TYPE >::iterator position, typename ObjectVector< TYPE >::const_reference value)
 Insert "value" before "position".
 
void erase (typename ObjectVector< TYPE >::iterator position)
 Erase the object at "position" from the container. The removed object will be deleted.
 
void erase (typename ObjectVector< TYPE >::iterator first, typename ObjectVector< TYPE >::iterator last)
 Erase the range [first, last) from the container. The removed object will be deleted.
 
void clear ()
 Clear the entire content of the container and delete all contained objects.
 
ObjectVector< TYPE >::reference operator[] (typename ObjectVector< TYPE >::size_type n)
 Return the reference to the n'th object in the container.
 
ObjectVector< TYPE >::const_reference operator[] (typename ObjectVector< TYPE >::size_type n) const
 Return the const_reference to the n'th object in the container.
 
long index (const ContainedObject *obj) const override
 Return distance of a given object from the beginning of its container It correcponds to the "index" ( from 0 to size()-1 ) If "obj" not fount, return -1.
 
ContainedObject const * containedObject (long dist) const override
 Return const pointer to an object of a given distance (index)
 
ContainedObjectcontainedObject (long dist) override
 
std::ostream & fillStream (std::ostream &s) const override
 Fill the output stream (ASCII)
 
- Public Member Functions inherited from DataObject
 DataObject ()
 Standard Constructor.
 
 DataObject (const DataObject &rhs)
 Copy Constructor.
 
DataObjectoperator= (const DataObject &rhs)
 Assignment Operator.
 
 DataObject (DataObject &&rhs)
 Move Constructor.
 
DataObjectoperator= (DataObject &&rhs)
 Move Assignment Operator.
 
virtual ~DataObject ()
 Standard Destructor.
 
virtual unsigned long addRef ()
 Add reference to object.
 
virtual unsigned long release ()
 release reference to object
 
const std::string & name () const
 Retreive DataObject name. It is the name when registered in the store.
 
virtual StatusCode update ()
 Provide empty placeholder for internal object reconfiguration callback.
 
void setRegistry (IRegistry *pRegistry)
 Set pointer to Registry.
 
IRegistryregistry () const
 Get pointer to Registry.
 
LinkManagerlinkMgr ()
 Retrieve Link manager.
 
const LinkManagerlinkMgr () const
 
unsigned char version () const
 Retrieve version number of this object representation.
 
void setVersion (unsigned char vsn)
 Set version number of this object representation.
 
unsigned long refCount () const
 Return the refcount.
 

Static Public Member Functions

static const CLIDclassID ()
 Retrieve class ID.
 
- Static Public Member Functions inherited from DataObject
static const CLIDclassID ()
 Retrieve reference to class definition structure (static access)
 

Private Attributes

std::vector< TYPE * > m_vector
 

Additional Inherited Members

- Protected Member Functions inherited from ObjectContainerBase
 ObjectContainerBase ()=default
 Constructor.
 
 ObjectContainerBase (ObjectContainerBase &&)=default
 
ObjectContainerBaseoperator= (ObjectContainerBase &&)=default
 
 ~ObjectContainerBase () override=default
 

Detailed Description

template<class TYPE>
class ObjectVector< TYPE >

ObjectVector is one of the basic Gaudi container classes capable of being registered in Data Stores.

It is based on Standard Library (STL) std::vector (see STL Programmer's Guide) ObjectVector has all functions of the std::vector interface, and in addition a number of Gaudi specific functions.

Each object is allowed to belong into a single container only. After inserting the object into the container, it takes over all responsibilities for the object. E.g. erasing the object from its container causes removing the object's pointer from the container and deleting the object itself.

Author
Pavel Binko
Pere Mato
Date
19/10/1999, 30/11/2000

Definition at line 43 of file ObjectVector.h.

Member Typedef Documentation

◆ const_iterator

template<class TYPE>
typedef std::vector<TYPE*>::const_iterator ObjectVector< TYPE >::const_iterator

Definition at line 53 of file ObjectVector.h.

◆ const_pointer

template<class TYPE>
typedef std::vector<TYPE*>::const_pointer ObjectVector< TYPE >::const_pointer

Definition at line 59 of file ObjectVector.h.

◆ const_reference

template<class TYPE>
typedef std::vector<TYPE*>::const_reference ObjectVector< TYPE >::const_reference

Definition at line 50 of file ObjectVector.h.

◆ const_reverse_iterator

template<class TYPE>
typedef std::vector<TYPE*>::const_reverse_iterator ObjectVector< TYPE >::const_reverse_iterator

Definition at line 56 of file ObjectVector.h.

◆ contained_type

template<class TYPE>
typedef TYPE ObjectVector< TYPE >::contained_type

Definition at line 46 of file ObjectVector.h.

◆ iterator

template<class TYPE>
typedef std::vector<TYPE*>::iterator ObjectVector< TYPE >::iterator

Definition at line 52 of file ObjectVector.h.

◆ pointer

template<class TYPE>
typedef std::vector<TYPE*>::pointer ObjectVector< TYPE >::pointer

Definition at line 58 of file ObjectVector.h.

◆ reference

template<class TYPE>
typedef std::vector<TYPE*>::reference ObjectVector< TYPE >::reference

Definition at line 49 of file ObjectVector.h.

◆ reverse_iterator

template<class TYPE>
typedef std::vector<TYPE*>::reverse_iterator ObjectVector< TYPE >::reverse_iterator

Definition at line 55 of file ObjectVector.h.

◆ value_type

template<class TYPE>
typedef std::vector<TYPE*>::value_type ObjectVector< TYPE >::value_type

Definition at line 47 of file ObjectVector.h.

Constructor & Destructor Documentation

◆ ObjectVector() [1/3]

template<class TYPE>
ObjectVector< TYPE >::ObjectVector ( )
default

◆ ObjectVector() [2/3]

template<class TYPE>
ObjectVector< TYPE >::ObjectVector ( const ObjectVector< TYPE > & )
delete

◆ ObjectVector() [3/3]

template<class TYPE>
ObjectVector< TYPE >::ObjectVector ( ObjectVector< TYPE > && rhs)
inline

Definition at line 65 of file ObjectVector.h.

66 std::for_each( begin(), end(), [this]( TYPE* obj ) { obj->setParent( this ); } );
67 }
ObjectContainerBase()=default
Constructor.
ObjectVector is one of the basic Gaudi container classes capable of being registered in Data Stores.
ObjectVector< TYPE >::iterator begin()
Return an iterator pointing to the beginning of the container.
ObjectVector< TYPE >::iterator end()
Return an iterator pointing to the end of the container.
std::vector< TYPE * > m_vector

◆ ~ObjectVector()

template<class TYPE>
ObjectVector< TYPE >::~ObjectVector ( )
inlineoverride

Definition at line 69 of file ObjectVector.h.

69 {
70 for ( auto& i : m_vector ) {
71 // Set the back pointer to 0 to avoid repetitional searching
72 // for the object in the container, and deleting the object
73 i->setParent( nullptr );
74 delete i;
75 }
76 }

Member Function Documentation

◆ add()

template<class TYPE>
long ObjectVector< TYPE >::add ( ContainedObject * pObject)
inlineoverridevirtual

Add an object to the container.

Implements ObjectContainerBase.

Definition at line 159 of file ObjectVector.h.

159 {
160 try {
161 auto ptr = dynamic_cast<typename ObjectVector<TYPE>::value_type>( pObject );
162 if ( ptr ) {
163 push_back( ptr );
164 return m_vector.size() - 1;
165 }
166 } catch ( ... ) {}
167 return -1;
168 }
void push_back(typename ObjectVector< TYPE >::const_reference value)
push_back = append = insert a new element at the end of the container

◆ back() [1/2]

template<class TYPE>
ObjectVector< TYPE >::reference ObjectVector< TYPE >::back ( )
inline

Return reference to the last element.

Definition at line 146 of file ObjectVector.h.

146{ return m_vector.back(); }

◆ back() [2/2]

template<class TYPE>
ObjectVector< TYPE >::const_reference ObjectVector< TYPE >::back ( ) const
inline

Return const_reference to the last element.

Definition at line 149 of file ObjectVector.h.

149{ return m_vector.back(); }

◆ begin() [1/2]

template<class TYPE>
ObjectVector< TYPE >::iterator ObjectVector< TYPE >::begin ( )
inline

Return an iterator pointing to the beginning of the container.

Definition at line 87 of file ObjectVector.h.

87{ return m_vector.begin(); }

◆ begin() [2/2]

template<class TYPE>
ObjectVector< TYPE >::const_iterator ObjectVector< TYPE >::begin ( ) const
inline

Return a const_iterator pointing to the beginning of the container.

Definition at line 90 of file ObjectVector.h.

90{ return m_vector.begin(); }

◆ capacity()

template<class TYPE>
ObjectVector< TYPE >::size_type ObjectVector< TYPE >::capacity ( ) const
inline

Return number of elements for which memory has been allocated It is always greater than or equal to size()

Definition at line 125 of file ObjectVector.h.

125{ return m_vector.capacity(); }

◆ classID()

template<class TYPE>
static const CLID & ObjectVector< TYPE >::classID ( )
inlinestatic

Retrieve class ID.

Definition at line 81 of file ObjectVector.h.

81 {
82 static const CLID clid = TYPE::classID() + CLID_ObjectVector;
83 return clid;
84 }

◆ clear()

template<class TYPE>
void ObjectVector< TYPE >::clear ( )
inline

Clear the entire content of the container and delete all contained objects.

Definition at line 232 of file ObjectVector.h.

232{ erase( begin(), end() ); }
void erase(typename ObjectVector< TYPE >::iterator position)
Erase the object at "position" from the container. The removed object will be deleted.

◆ clID()

template<class TYPE>
const CLID & ObjectVector< TYPE >::clID ( ) const
inlineoverridevirtual

Retrieve class ID.

Reimplemented from DataObject.

Definition at line 79 of file ObjectVector.h.

static const CLID & classID()
Retrieve class ID.

◆ containedObject() [1/2]

template<class TYPE>
ContainedObject const * ObjectVector< TYPE >::containedObject ( long dist) const
inlineoverridevirtual

Return const pointer to an object of a given distance (index)

Implements ObjectContainerBase.

Definition at line 251 of file ObjectVector.h.

251{ return m_vector[dist]; }

◆ containedObject() [2/2]

template<class TYPE>
ContainedObject * ObjectVector< TYPE >::containedObject ( long dist)
inlineoverridevirtual

Implements ObjectContainerBase.

Definition at line 252 of file ObjectVector.h.

252{ return m_vector[dist]; }

◆ empty()

template<class TYPE>
bool ObjectVector< TYPE >::empty ( ) const
inline

Return true if the size of the container is 0.

Definition at line 137 of file ObjectVector.h.

137{ return m_vector.empty(); }

◆ end() [1/2]

template<class TYPE>
ObjectVector< TYPE >::iterator ObjectVector< TYPE >::end ( )
inline

Return an iterator pointing to the end of the container.

Definition at line 93 of file ObjectVector.h.

93{ return m_vector.end(); }

◆ end() [2/2]

template<class TYPE>
ObjectVector< TYPE >::const_iterator ObjectVector< TYPE >::end ( ) const
inline

Return a const_iterator pointing to the end of the container.

Definition at line 96 of file ObjectVector.h.

96{ return m_vector.end(); }

◆ erase() [1/2]

template<class TYPE>
void ObjectVector< TYPE >::erase ( typename ObjectVector< TYPE >::iterator first,
typename ObjectVector< TYPE >::iterator last )
inline

Erase the range [first, last) from the container. The removed object will be deleted.

Definition at line 220 of file ObjectVector.h.

220 {
221 for ( auto i = first; i != last; i++ ) {
222 // Set the back pointer to 0 to avoid repetitional searching
223 // for the object in the container, and deleting the object
224 ( *i )->setParent( nullptr );
225 delete *i;
226 }
227 // Removing from the container itself
228 m_vector.erase( first, last );
229 }

◆ erase() [2/2]

template<class TYPE>
void ObjectVector< TYPE >::erase ( typename ObjectVector< TYPE >::iterator position)
inline

Erase the object at "position" from the container. The removed object will be deleted.

Definition at line 208 of file ObjectVector.h.

208 {
209 if ( ( *position )->parent() ) {
210 // Set the back pointer to 0 to avoid repetitional searching
211 // for the object in the container, and deleting the object
212 ( *position )->setParent( nullptr );
213 delete *position;
214 }
215 // Removing from the container itself
216 m_vector.erase( position );
217 }

◆ fillStream()

template<class TYPE>
std::ostream & ObjectVector< TYPE >::fillStream ( std::ostream & s) const
inlineoverridevirtual

Fill the output stream (ASCII)

Reimplemented from DataObject.

Definition at line 255 of file ObjectVector.h.

255 {
256 s << "class ObjectVector : size = " << std::setw( 12 ) << size() << "\n";
257 // Output the base class
258 // ObjectContainerBase::fillStream(s);
259 if ( !empty() ) {
260 s << "\nContents of the STL vector :";
261 long count = 0;
262 for ( const auto& i : m_vector ) { s << "\nIndex " << std::setw( 12 ) << count++ << " of object of type " << *i; }
263 }
264 return s;
265 }
ObjectVector< TYPE >::size_type size() const
Return the size of the container.
bool empty() const
Return true if the size of the container is 0.

◆ front() [1/2]

template<class TYPE>
ObjectVector< TYPE >::reference ObjectVector< TYPE >::front ( )
inline

Return reference to the first element.

Definition at line 140 of file ObjectVector.h.

140{ return m_vector.front(); }

◆ front() [2/2]

template<class TYPE>
ObjectVector< TYPE >::const_reference ObjectVector< TYPE >::front ( ) const
inline

Return const_reference to the first element.

Definition at line 143 of file ObjectVector.h.

143{ return m_vector.front(); }

◆ index()

template<class TYPE>
long ObjectVector< TYPE >::index ( const ContainedObject * obj) const
inlineoverridevirtual

Return distance of a given object from the beginning of its container It correcponds to the "index" ( from 0 to size()-1 ) If "obj" not fount, return -1.

Implements ObjectContainerBase.

Definition at line 245 of file ObjectVector.h.

245 {
246 auto i = std::find_if( begin(), end(), [&]( const ContainedObject* o ) { return o == obj; } );
247 return i != end() ? std::distance( begin(), i ) : -1;
248 }

◆ insert()

template<class TYPE>
ObjectVector< TYPE >::iterator ObjectVector< TYPE >::insert ( typename ObjectVector< TYPE >::iterator position,
typename ObjectVector< TYPE >::const_reference value )
inline

Insert "value" before "position".

Definition at line 201 of file ObjectVector.h.

202 {
203 value->setParent( this );
204 return m_vector.insert( position, value );
205 }

◆ max_size()

template<class TYPE>
ObjectVector< TYPE >::size_type ObjectVector< TYPE >::max_size ( ) const
inline

Return the largest possible size of the container.

Definition at line 121 of file ObjectVector.h.

121{ return m_vector.max_size(); }

◆ numberOfObjects()

template<class TYPE>
ObjectVector< TYPE >::size_type ObjectVector< TYPE >::numberOfObjects ( ) const
inlineoverridevirtual

The same as size(), return number of objects in the container.

Implements ObjectContainerBase.

Definition at line 118 of file ObjectVector.h.

118{ return m_vector.size(); }

◆ operator=()

template<class TYPE>
ObjectVector & ObjectVector< TYPE >::operator= ( const ObjectVector< TYPE > & )
delete

◆ operator[]() [1/2]

template<class TYPE>
ObjectVector< TYPE >::reference ObjectVector< TYPE >::operator[] ( typename ObjectVector< TYPE >::size_type n)
inline

Return the reference to the n'th object in the container.

Definition at line 235 of file ObjectVector.h.

235{ return m_vector[n]; }

◆ operator[]() [2/2]

template<class TYPE>
ObjectVector< TYPE >::const_reference ObjectVector< TYPE >::operator[] ( typename ObjectVector< TYPE >::size_type n) const
inline

Return the const_reference to the n'th object in the container.

Definition at line 238 of file ObjectVector.h.

238 {
239 return m_vector[n];
240 }

◆ pop_back()

template<class TYPE>
void ObjectVector< TYPE >::pop_back ( )
inline

pop_back = remove the last element from the container The removed object will be deleted (see the method release)

Definition at line 172 of file ObjectVector.h.

172 {
173 auto position = m_vector.back();
174 // Set the back pointer to 0 to avoid repetitional searching
175 // for the object in the container, and deleting the object
176 position->setParent( nullptr );
177 delete position;
178 // Removing from the container itself
179 m_vector.pop_back();
180 }

◆ push_back()

template<class TYPE>
void ObjectVector< TYPE >::push_back ( typename ObjectVector< TYPE >::const_reference value)
inline

push_back = append = insert a new element at the end of the container

Definition at line 152 of file ObjectVector.h.

152 {
153 if ( value->parent() ) { const_cast<ObjectContainerBase*>( value->parent() )->remove( value ); }
154 value->setParent( this );
155 m_vector.push_back( value );
156 }

◆ rbegin() [1/2]

template<class TYPE>
ObjectVector< TYPE >::reverse_iterator ObjectVector< TYPE >::rbegin ( )
inline

Return a reverse_iterator pointing to the beginning of the reversed container.

Definition at line 99 of file ObjectVector.h.

99{ return m_vector.rbegin(); }

◆ rbegin() [2/2]

template<class TYPE>
ObjectVector< TYPE >::const_reverse_iterator ObjectVector< TYPE >::rbegin ( ) const
inline

Return a const_reverse_iterator pointing to the beginning of the reversed container.

Definition at line 103 of file ObjectVector.h.

103{ return m_vector.rbegin(); }

◆ remove()

template<class TYPE>
long ObjectVector< TYPE >::remove ( ContainedObject * value)
inlineoverridevirtual

Release object from the container (the poiter will be removed from the container, but the object itself will remain alive) (see the method pop_back)

Implements ObjectContainerBase.

Definition at line 184 of file ObjectVector.h.

184 {
185 // Find the object of the value value
186 auto i = std::find_if( begin(), end(), [&]( const ContainedObject* j ) { return j == value; } );
187 if ( i == end() ) {
188 // Object cannot be released from the conatiner,
189 // as it is not contained in it
190 return 0;
191 }
192 long idx = std::distance( begin(), i );
193 // Set the back pointer to 0 to avoid repetitional searching
194 // for the object in the container and deleting the object
195 ( *i )->setParent( nullptr );
196 erase( i );
197 return idx;
198 }

◆ rend() [1/2]

template<class TYPE>
ObjectVector< TYPE >::reverse_iterator ObjectVector< TYPE >::rend ( )
inline

Return a reverse_iterator pointing to the end of the reversed container.

Definition at line 106 of file ObjectVector.h.

106{ return m_vector.rend(); }

◆ rend() [2/2]

template<class TYPE>
ObjectVector< TYPE >::const_reverse_iterator ObjectVector< TYPE >::rend ( ) const
inline

Return a const_reverse_iterator pointing to the end of the reversed container.

Definition at line 109 of file ObjectVector.h.

109{ return m_vector.rend(); }

◆ reserve()

template<class TYPE>
void ObjectVector< TYPE >::reserve ( typename ObjectVector< TYPE >::size_type value)
inline

Reserve place for "value" objects in the container.

If "value" is less than or equal to capacity(), this call has no effect, otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is >= n, otherwise, capacity() is unchanged. In either case, size() is unchanged

Definition at line 134 of file ObjectVector.h.

134{ m_vector.reserve( value ); }

◆ size()

template<class TYPE>
ObjectVector< TYPE >::size_type ObjectVector< TYPE >::size ( ) const
inline

Return the size of the container.

Size means the number of objects stored in the container, independently on the amount of information stored in each object

Definition at line 115 of file ObjectVector.h.

115{ return m_vector.size(); }

Member Data Documentation

◆ m_vector

template<class TYPE>
std::vector<TYPE*> ObjectVector< TYPE >::m_vector
private

Definition at line 268 of file ObjectVector.h.


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