All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ObjectVector.h
Go to the documentation of this file.
1 // $Header: /tmp/svngaudi/tmp.jEpFh25751/Gaudi/GaudiKernel/GaudiKernel/ObjectVector.h,v 1.11 2008/10/09 16:46:49 marcocle Exp $
2 #ifndef GAUDIKERNEL_OBJECTVECTOR_H
3 #define GAUDIKERNEL_OBJECTVECTOR_H
4 
5 
6 // Include files
7 #include "GaudiKernel/Kernel.h"
8 #include "GaudiKernel/ClassID.h"
11 
12 #include <vector>
13 #include <iomanip>
14 
15 
16 // Definition of the CLID for this class defined in ClassID.h
17 //static const CLID CLID_ObjectList = (1<<17); // ObjectVector (bit 17 set)
18 
38 template <class TYPE>
39 class ObjectVector : public ObjectContainerBase {
40 
41 public:
42  typedef TYPE contained_type;
43  typedef typename std::vector<TYPE*>::value_type value_type;
44 
46  typedef typename std::vector<TYPE*>::const_reference const_reference;
47 
48  typedef typename std::vector<TYPE*>::iterator iterator;
49  typedef typename std::vector<TYPE*>::const_iterator const_iterator;
50 
51  typedef typename std::vector<TYPE*>::reverse_iterator reverse_iterator;
52  typedef typename std::vector<TYPE*>::const_reverse_iterator const_reverse_iterator;
53 #ifdef _WIN32
54  typedef typename std::vector<TYPE*>::_Tptr pointer;
55  typedef typename std::vector<TYPE*>::_Ctptr const_pointer;
56 #else
57  typedef typename std::vector<TYPE*>::pointer pointer;
58  typedef typename std::vector<TYPE*>::const_pointer const_pointer;
59 #endif
60 
61 public:
64  : m_vector(0) { }
65  ObjectVector( const char* /* name */ )
66  : m_vector(0) { }
69  : ObjectContainerBase(), m_vector(value.m_vector) { }
70 
72  virtual ~ObjectVector() {
73  for( typename ObjectVector<TYPE>::iterator i = begin(); i != end(); i++ ) {
74  // Set the back pointer to 0 to avoid repetitional searching
75  // for the object in the container, and deleting the object
76  (*i)->setParent (0);
77  delete *i;
78  }
79  }
80 
82  virtual const CLID& clID() const {
84  }
86  static const CLID& classID() {
87  static CLID clid = TYPE::classID() + CLID_ObjectVector;
88  return clid;
89  }
90 
93  m_vector = right.m_vector;
94  return *this;
95  }
96 
99  return m_vector.begin();
100  }
101 
104  return m_vector.begin();
105  }
106 
109  return m_vector.end();
110  }
111 
114  return m_vector.end();
115  }
116 
119  return m_vector.rbegin();
120  }
121 
125  return m_vector.rbegin();
126  }
127 
130  return m_vector.rend();
131  }
132 
135  return m_vector.rend();
136  }
137 
143  return m_vector.size();
144  }
145 
148  return m_vector.size();
149  }
150 
153  return m_vector.max_size();
154  }
155 
159  return m_vector.capacity();
160  }
161 
170  m_vector.reserve( value );
171  }
172 
174  bool empty () const {
175  return m_vector.empty();
176  }
177 
180  return m_vector.front();
181  }
182 
185  return m_vector.front();
186  }
187 
190  return m_vector.back();
191  }
192 
195  return m_vector.back();
196  }
197 
200  if( 0 != value->parent() ) {
201  const_cast<ObjectContainerBase*>(value->parent())->remove(value);
202  }
203  value->setParent(this);
204  m_vector.push_back(value);
205  }
206 
208  virtual long add(ContainedObject* pObject) {
209  try {
210  typename ObjectVector<TYPE>::value_type ptr =
211  dynamic_cast<typename ObjectVector<TYPE>::value_type>(pObject);
212  if ( 0 != ptr ) {
213  push_back(ptr);
214  return m_vector.size()-1;
215  }
216  }
217  catch(...) {
218  }
219  return -1;
220  }
221 
224  void pop_back () {
225  typename ObjectVector<TYPE>::value_type position = m_vector.back();
226  // Set the back pointer to 0 to avoid repetitional searching
227  // for the object in the container, and deleting the object
228  position->setParent (0);
229  delete position;
230  // Removing from the container itself
231  m_vector.pop_back();
232  }
233 
236  virtual long remove(ContainedObject* value) {
237  // Find the object of the value value
239  for( i = begin(); i != end(); i++ ) {
240  if( value == *i ) {
241  break;
242  }
243  }
244  if( end() == i ) {
245  // Object cannot be released from the conatiner,
246  // as it is not contained in it
247  return StatusCode::FAILURE;
248  }
249  else {
250  // Set the back pointer to 0 to avoid repetitional searching
251  // for the object in the container and deleting the object
252  (*i)->setParent (0);
253  erase(i);
254  return StatusCode::SUCCESS;
255  }
256  }
257 
261  value->setParent(this);
262  typename ObjectVector<TYPE>::iterator i = m_vector.insert(position, value);
263  return i;
264  }
265 
267  void erase( typename ObjectVector<TYPE>::iterator position ) {
268  if( 0 != (*position)->parent() ) {
269  // Set the back pointer to 0 to avoid repetitional searching
270  // for the object in the container, and deleting the object
271  (*position)->setParent (0);
272  delete *position;
273  }
274  // Removing from the container itself
275  m_vector.erase(position);
276  }
277 
279  void erase( typename ObjectVector<TYPE>::iterator first,
280  typename ObjectVector<TYPE>::iterator last ) {
281  for(typename ObjectVector<TYPE>::iterator i = first; i != last; i++ ) {
282  // Set the back pointer to 0 to avoid repetitional searching
283  // for the object in the container, and deleting the object
284  (*i)->setParent(0);
285  delete *i;
286  }
287  // Removing from the container itself
288  m_vector.erase(first, last);
289  }
290 
292  void clear() {
293  erase(begin(), end());
294  }
295 
299  return m_vector[n];
300  }
301 
305  return m_vector[n];
306  }
307 
311  virtual long index( const ContainedObject* obj ) const {
312  long i;
313  for( i = 0; i < (long)m_vector.size(); i++ ) {
314  if( m_vector[i] == obj ) {
315  return i;
316  }
317  }
318  return -1;
319  }
320 
322  virtual ContainedObject* containedObject( long dist ) const {
323  return m_vector[dist];
324  }
325 
327  virtual std::ostream& fillStream( std::ostream& s ) const {
328  s << "class ObjectVector : size = "
329  << std::setw(12)
330  << size() << "\n";
331  // Output the base class
332  //ObjectContainerBase::fillStream(s);
333  if ( 0 != size() ) {
334  s << "\nContents of the STL vector :";
335  long count = 0;
337  for( iter = m_vector.begin(); iter != m_vector.end(); iter++, count++ ) {
338  s << "\nIndex "
339  << std::setw(12)
340  << count
341  << " of object of type " << **iter;
342  }
343  }
344  return s;
345  }
346 
347 private:
349  std::vector<TYPE*> m_vector;
350 };
351 
352 #endif // GAUDIKERNEL_OBJECTVECTOR_H
353 
ObjectVector< TYPE >::iterator end()
Return an iterator pointing to the end of the container.
Definition: ObjectVector.h:108
void clear()
Clear the entire content of the container and delete all contained objects.
Definition: ObjectVector.h:292
virtual long index(const ContainedObject *obj) const
Return distance of a given object from the beginning of its container It correcponds to the "index" (...
Definition: ObjectVector.h:311
const ObjectVector< TYPE > & operator=(const ObjectVector< TYPE > &right)
Clone operator.
Definition: ObjectVector.h:92
size_t size_type
size_type, to conform the STL container interface
virtual long add(ContainedObject *pObject)
Add an object to the container.
Definition: ObjectVector.h:208
ObjectVector< TYPE >::reference back()
Return reference to the last element.
Definition: ObjectVector.h:189
ObjectVector< TYPE >::iterator begin()
Return an iterator pointing to the beginning of the container.
Definition: ObjectVector.h:98
ObjectVector(const char *)
Definition: ObjectVector.h:65
void erase(typename ObjectVector< TYPE >::iterator position)
Erase the object at "position" from the container. The removed object will be deleted.
Definition: ObjectVector.h:267
ObjectVector< TYPE >::reverse_iterator rbegin()
Return a reverse_iterator pointing to the beginning of the reversed container.
Definition: ObjectVector.h:118
ObjectVector< TYPE >::const_iterator begin() const
Return a const_iterator pointing to the beginning of the container.
Definition: ObjectVector.h:103
std::vector< TYPE * >::const_iterator const_iterator
Definition: ObjectVector.h:49
std::vector< TYPE * > m_vector
The STL vector itself.
Definition: ObjectVector.h:349
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:199
ObjectVector is one of the basic Gaudi container classes capable of being registered in Data Stores...
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.
Definition: ObjectVector.h:279
std::vector< TYPE * >::const_reference const_reference
Definition: ObjectVector.h:46
ObjectVector< TYPE >::const_reverse_iterator rend() const
Return a const_reverse_iterator pointing to the end of the reversed container.
Definition: ObjectVector.h:134
std::vector< TYPE * >::const_pointer const_pointer
Definition: ObjectVector.h:58
virtual ~ObjectVector()
Destructor.
Definition: ObjectVector.h:72
virtual ObjectVector< TYPE >::size_type numberOfObjects() const
The same as size(), return number of objects in the container.
Definition: ObjectVector.h:147
std::vector< TYPE * >::const_reverse_iterator const_reverse_iterator
Definition: ObjectVector.h:52
ObjectVector< TYPE >::reference front()
Return reference to the first element.
Definition: ObjectVector.h:179
ObjectVector< TYPE >::const_reference front() const
Return const_reference to the first element.
Definition: ObjectVector.h:184
std::vector< TYPE * >::reverse_iterator reverse_iterator
Definition: ObjectVector.h:51
virtual ContainedObject * containedObject(long dist) const
Return const pointer to an object of a given distance (index)
Definition: ObjectVector.h:322
ObjectVector< TYPE >::reference operator[](typename ObjectVector< TYPE >::size_type n)
Return the reference to the n'th object in the container.
Definition: ObjectVector.h:298
ObjectVector< TYPE >::size_type capacity() const
Return number of elements for which memory has been allocated It is always greater than or equal to s...
Definition: ObjectVector.h:158
std::vector< TYPE * >::iterator iterator
Definition: ObjectVector.h:48
bool empty() const
Return true if the size of the container is 0.
Definition: ObjectVector.h:174
unsigned int CLID
Class ID definition.
Definition: ClassID.h:9
void reserve(typename ObjectVector< TYPE >::size_type value)
Reserve place for "value" objects in the container.
Definition: ObjectVector.h:169
ObjectVector< TYPE >::const_reverse_iterator rbegin() const
Return a const_reverse_iterator pointing to the beginning of the reversed container.
Definition: ObjectVector.h:124
std::vector< TYPE * >::reference reference
Definition: ObjectVector.h:45
ObjectVector< TYPE >::iterator insert(typename ObjectVector< TYPE >::iterator position, typename ObjectVector< TYPE >::const_reference value)
Insert "value" before "position".
Definition: ObjectVector.h:259
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
ObjectVector< TYPE >::size_type max_size() const
Return the largest possible size of the container.
Definition: ObjectVector.h:152
ObjectVector< TYPE >::const_reference back() const
Return const_reference to the last element.
Definition: ObjectVector.h:194
ObjectVector()
Constructors.
Definition: ObjectVector.h:63
std::vector< TYPE * >::value_type value_type
Definition: ObjectVector.h:43
virtual std::ostream & fillStream(std::ostream &s) const
Fill the output stream (ASCII)
Definition: ObjectVector.h:327
std::vector< TYPE * >::pointer pointer
Definition: ObjectVector.h:57
virtual const CLID & clID() const
Retrieve class ID.
Definition: ObjectVector.h:82
string s
Definition: gaudirun.py:210
TYPE contained_type
Definition: ObjectVector.h:42
ObjectContainerBase is the base class for Gaudi container classes.
ObjectVector< TYPE >::reverse_iterator rend()
Return a reverse_iterator pointing to the end of the reversed container.
Definition: ObjectVector.h:129
ObjectVector(const ObjectVector< TYPE > &value)
Copy constructor.
Definition: ObjectVector.h:68
list i
Definition: ana.py:128
ObjectVector< TYPE >::size_type size() const
Return the size of the container.
Definition: ObjectVector.h:142
ObjectVector< TYPE >::const_iterator end() const
Return a const_iterator pointing to the end of the container.
Definition: ObjectVector.h:113
static const CLID & classID()
Retrieve class ID.
Definition: ObjectVector.h:86
TO * reference(FROM *from)
Definition: KeyedObject.cpp:21
void pop_back()
pop_back = remove the last element from the container The removed object will be deleted (see the met...
Definition: ObjectVector.h:224