The Gaudi Framework  v40r0 (475e45c1)
ObjectVector Class Reference

#include <GaudiKernel/ObjectVector.h>

Collaboration diagram for ObjectVector:

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 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. More...
 
ObjectVector< TYPE >::iterator begin ()
 Return an iterator pointing to the beginning of the container. More...
 
ObjectVector< TYPE >::const_iterator begin () const
 Return a const_iterator pointing to the beginning of the container. More...
 
ObjectVector< TYPE >::iterator end ()
 Return an iterator pointing to the end of the container. More...
 
ObjectVector< TYPE >::const_iterator end () const
 Return a const_iterator pointing to the end of the container. More...
 
ObjectVector< TYPE >::reverse_iterator rbegin ()
 Return a reverse_iterator pointing to the beginning of the reversed container. More...
 
ObjectVector< TYPE >::const_reverse_iterator rbegin () const
 Return a const_reverse_iterator pointing to the beginning of the reversed container. More...
 
ObjectVector< TYPE >::reverse_iterator rend ()
 Return a reverse_iterator pointing to the end of the reversed container. More...
 
ObjectVector< TYPE >::const_reverse_iterator rend () const
 Return a const_reverse_iterator pointing to the end of the reversed container. More...
 
ObjectVector< TYPE >::size_type size () const
 Return the size of the container. More...
 
ObjectVector< TYPE >::size_type numberOfObjects () const override
 The same as size(), return number of objects in the container. More...
 
ObjectVector< TYPE >::size_type max_size () const
 Return the largest possible size of the container. More...
 
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() More...
 
void reserve (typename ObjectVector< TYPE >::size_type value)
 Reserve place for "value" objects in the container. More...
 
bool empty () const
 Return true if the size of the container is 0. More...
 
ObjectVector< TYPE >::reference front ()
 Return reference to the first element. More...
 
ObjectVector< TYPE >::const_reference front () const
 Return const_reference to the first element. More...
 
ObjectVector< TYPE >::reference back ()
 Return reference to the last element. More...
 
ObjectVector< TYPE >::const_reference back () const
 Return const_reference to the last element. More...
 
void push_back (typename ObjectVector< TYPE >::const_reference value)
 push_back = append = insert a new element at the end of the container More...
 
long add (ContainedObject *pObject) override
 Add an object to the container. More...
 
void pop_back ()
 pop_back = remove the last element from the container The removed object will be deleted (see the method release) More...
 
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) More...
 
ObjectVector< TYPE >::iterator insert (typename ObjectVector< TYPE >::iterator position, typename ObjectVector< TYPE >::const_reference value)
 Insert "value" before "position". More...
 
void erase (typename ObjectVector< TYPE >::iterator position)
 Erase the object at "position" from the container. The removed object will be deleted. More...
 
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. More...
 
void clear ()
 Clear the entire content of the container and delete all contained objects. More...
 
ObjectVector< TYPE >::reference operator[] (typename ObjectVector< TYPE >::size_type n)
 Return the reference to the n'th object in the container. More...
 
ObjectVector< TYPE >::const_reference operator[] (typename ObjectVector< TYPE >::size_type n) const
 Return the const_reference to the n'th object in the container. More...
 
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. More...
 
ContainedObject const * containedObject (long dist) const override
 Return const pointer to an object of a given distance (index) More...
 
ContainedObjectcontainedObject (long dist) override
 
std::ostream & fillStream (std::ostream &s) const override
 Fill the output stream (ASCII) More...
 

Static Public Member Functions

static const CLIDclassID ()
 Retrieve class ID. More...
 

Private Attributes

std::vector< TYPE * > m_vector
 

Detailed Description

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 19 of file ContainedObject.h.

Member Typedef Documentation

◆ const_iterator

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

Definition at line 53 of file ObjectVector.h.

◆ const_pointer

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

Definition at line 62 of file ObjectVector.h.

◆ const_reference

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

Definition at line 50 of file ObjectVector.h.

◆ const_reverse_iterator

Definition at line 56 of file ObjectVector.h.

◆ contained_type

Definition at line 46 of file ObjectVector.h.

◆ iterator

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

Definition at line 52 of file ObjectVector.h.

◆ pointer

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

Definition at line 61 of file ObjectVector.h.

◆ reference

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

Definition at line 49 of file ObjectVector.h.

◆ reverse_iterator

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

Definition at line 55 of file ObjectVector.h.

◆ value_type

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

Definition at line 47 of file ObjectVector.h.

Constructor & Destructor Documentation

◆ ObjectVector() [1/3]

ObjectVector::ObjectVector ( )
default

◆ ObjectVector() [2/3]

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

◆ ObjectVector() [3/3]

ObjectVector::ObjectVector ( ObjectVector &&  rhs)
inline

Definition at line 69 of file ObjectVector.h.

69  : ObjectContainerBase( std::move( rhs ) ), m_vector{ std::move( rhs.m_vector ) } {
70  std::for_each( begin(), end(), [this]( TYPE* obj ) { obj->setParent( this ); } );
71  }

◆ ~ObjectVector()

ObjectVector::~ObjectVector ( )
inlineoverride

Definition at line 73 of file ObjectVector.h.

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

Member Function Documentation

◆ add()

long ObjectVector::add ( ContainedObject pObject)
inlineoverride

Add an object to the container.

Definition at line 163 of file ObjectVector.h.

163  {
164  try {
165  auto ptr = dynamic_cast<typename ObjectVector<TYPE>::value_type>( pObject );
166  if ( ptr ) {
167  push_back( ptr );
168  return m_vector.size() - 1;
169  }
170  } catch ( ... ) {}
171  return -1;
172  }

◆ back() [1/2]

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

Return reference to the last element.

Definition at line 150 of file ObjectVector.h.

150 { return m_vector.back(); }

◆ back() [2/2]

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

Return const_reference to the last element.

Definition at line 153 of file ObjectVector.h.

153 { return m_vector.back(); }

◆ begin() [1/2]

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

Return an iterator pointing to the beginning of the container.

Definition at line 91 of file ObjectVector.h.

91 { return m_vector.begin(); }

◆ begin() [2/2]

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

Return a const_iterator pointing to the beginning of the container.

Definition at line 94 of file ObjectVector.h.

94 { return m_vector.begin(); }

◆ capacity()

ObjectVector<TYPE>::size_type ObjectVector::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 129 of file ObjectVector.h.

129 { return m_vector.capacity(); }

◆ classID()

static const CLID& ObjectVector::classID ( )
inlinestatic

Retrieve class ID.

Definition at line 85 of file ObjectVector.h.

85  {
86  static const CLID clid = TYPE::classID() + CLID_ObjectVector;
87  return clid;
88  }

◆ clear()

void ObjectVector::clear ( )
inline

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

Definition at line 236 of file ObjectVector.h.

236 { erase( begin(), end() ); }

◆ clID()

const CLID& ObjectVector::clID ( ) const
inlineoverride

Retrieve class ID.

Definition at line 83 of file ObjectVector.h.

83 { return ObjectVector<TYPE>::classID(); }

◆ containedObject() [1/2]

ContainedObject const* ObjectVector::containedObject ( long  dist) const
inlineoverride

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

Definition at line 255 of file ObjectVector.h.

255 { return m_vector[dist]; }

◆ containedObject() [2/2]

ContainedObject* ObjectVector::containedObject ( long  dist)
inlineoverride

Definition at line 256 of file ObjectVector.h.

256 { return m_vector[dist]; }

◆ empty()

bool ObjectVector::empty ( ) const
inline

Return true if the size of the container is 0.

Definition at line 141 of file ObjectVector.h.

141 { return m_vector.empty(); }

◆ end() [1/2]

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

Return an iterator pointing to the end of the container.

Definition at line 97 of file ObjectVector.h.

97 { return m_vector.end(); }

◆ end() [2/2]

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

Return a const_iterator pointing to the end of the container.

Definition at line 100 of file ObjectVector.h.

100 { return m_vector.end(); }

◆ erase() [1/2]

void ObjectVector::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 224 of file ObjectVector.h.

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

◆ erase() [2/2]

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

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

Definition at line 212 of file ObjectVector.h.

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

◆ fillStream()

std::ostream& ObjectVector::fillStream ( std::ostream &  s) const
inlineoverride

Fill the output stream (ASCII)

Definition at line 259 of file ObjectVector.h.

259  {
260  s << "class ObjectVector : size = " << std::setw( 12 ) << size() << "\n";
261  // Output the base class
262  // ObjectContainerBase::fillStream(s);
263  if ( !empty() ) {
264  s << "\nContents of the STL vector :";
265  long count = 0;
266  for ( const auto& i : m_vector ) { s << "\nIndex " << std::setw( 12 ) << count++ << " of object of type " << *i; }
267  }
268  return s;
269  }

◆ front() [1/2]

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

Return reference to the first element.

Definition at line 144 of file ObjectVector.h.

144 { return m_vector.front(); }

◆ front() [2/2]

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

Return const_reference to the first element.

Definition at line 147 of file ObjectVector.h.

147 { return m_vector.front(); }

◆ index()

long ObjectVector::index ( const ContainedObject obj) const
inlineoverride

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.

Definition at line 249 of file ObjectVector.h.

249  {
250  auto i = std::find_if( begin(), end(), [&]( const ContainedObject* o ) { return o == obj; } );
251  return i != end() ? std::distance( begin(), i ) : -1;
252  }

◆ insert()

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

Insert "value" before "position".

Definition at line 205 of file ObjectVector.h.

206  {
207  value->setParent( this );
208  return m_vector.insert( position, value );
209  }

◆ max_size()

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

Return the largest possible size of the container.

Definition at line 125 of file ObjectVector.h.

125 { return m_vector.max_size(); }

◆ numberOfObjects()

ObjectVector<TYPE>::size_type ObjectVector::numberOfObjects ( ) const
inlineoverride

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

Definition at line 122 of file ObjectVector.h.

122 { return m_vector.size(); }

◆ operator=()

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

◆ operator[]() [1/2]

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

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

Definition at line 239 of file ObjectVector.h.

239 { return m_vector[n]; }

◆ operator[]() [2/2]

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

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

Definition at line 242 of file ObjectVector.h.

242  {
243  return m_vector[n];
244  }

◆ pop_back()

void ObjectVector::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 176 of file ObjectVector.h.

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

◆ push_back()

void ObjectVector::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 156 of file ObjectVector.h.

156  {
157  if ( value->parent() ) { const_cast<ObjectContainerBase*>( value->parent() )->remove( value ); }
158  value->setParent( this );
159  m_vector.push_back( value );
160  }

◆ rbegin() [1/2]

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

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

Definition at line 103 of file ObjectVector.h.

103 { return m_vector.rbegin(); }

◆ rbegin() [2/2]

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

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

Definition at line 107 of file ObjectVector.h.

107 { return m_vector.rbegin(); }

◆ remove()

long ObjectVector::remove ( ContainedObject value)
inlineoverride

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)

Definition at line 188 of file ObjectVector.h.

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

◆ rend() [1/2]

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

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

Definition at line 110 of file ObjectVector.h.

110 { return m_vector.rend(); }

◆ rend() [2/2]

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

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

Definition at line 113 of file ObjectVector.h.

113 { return m_vector.rend(); }

◆ reserve()

void ObjectVector::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 138 of file ObjectVector.h.

138 { m_vector.reserve( value ); }

◆ size()

ObjectVector<TYPE>::size_type ObjectVector::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 119 of file ObjectVector.h.

119 { return m_vector.size(); }

Member Data Documentation

◆ m_vector

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

Definition at line 272 of file ObjectVector.h.


The documentation for this class was generated from the following files:
gaudirun.s
string s
Definition: gaudirun.py:346
ObjectVector::value_type
std::vector< TYPE * >::value_type value_type
Definition: ObjectVector.h:47
ObjectVector::size
ObjectVector< TYPE >::size_type size() const
Return the size of the container.
Definition: ObjectVector.h:119
ObjectVector::push_back
void push_back(typename ObjectVector< TYPE >::const_reference value)
push_back = append = insert a new element at the end of the container
Definition: ObjectVector.h:156
ObjectVector::begin
ObjectVector< TYPE >::iterator begin()
Return an iterator pointing to the beginning of the container.
Definition: ObjectVector.h:91
Gaudi::cxx::for_each
void for_each(ContainerOfSynced &c, Fun &&f)
Definition: SynchronizedValue.h:98
ProduceConsume.j
j
Definition: ProduceConsume.py:104
ObjectVector::erase
void erase(typename ObjectVector< TYPE >::iterator position)
Erase the object at "position" from the container. The removed object will be deleted.
Definition: ObjectVector.h:212
CLID
unsigned int CLID
Class ID definition.
Definition: ClassID.h:16
cpluginsvc.n
n
Definition: cpluginsvc.py:234
ObjectContainerBase
Definition: ObjectContainerBase.h:26
ObjectVector::end
ObjectVector< TYPE >::iterator end()
Return an iterator pointing to the end of the container.
Definition: ObjectVector.h:97
ObjectVector::remove
long remove(ContainedObject *value) override
Release object from the container (the poiter will be removed from the container, but the object itse...
Definition: ObjectVector.h:188
ObjectVector::empty
bool empty() const
Return true if the size of the container is 0.
Definition: ObjectVector.h:141
ObjectVector::m_vector
std::vector< TYPE * > m_vector
Definition: ObjectVector.h:272
ContainedObject
Definition: ContainedObject.h:37
ObjectVector::classID
static const CLID & classID()
Retrieve class ID.
Definition: ObjectVector.h:85