All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ObjectVector.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_OBJECTVECTOR_H
2 #define GAUDIKERNEL_OBJECTVECTOR_H
3 
4 
5 // Include files
6 #include "GaudiKernel/Kernel.h"
7 #include "GaudiKernel/ClassID.h"
10 
11 #include <vector>
12 #include <iomanip>
13 
14 
15 // Definition of the CLID for this class defined in ClassID.h
16 //static const CLID CLID_ObjectList = (1<<17); // ObjectVector (bit 17 set)
17 
37 template <class TYPE>
38 class ObjectVector : public ObjectContainerBase {
39 
40 public:
41  typedef TYPE contained_type;
43 
46 
49 
52 #ifdef _WIN32
53  typedef typename std::vector<TYPE*>::_Tptr pointer;
55 #else
58 #endif
59 
60 public:
63  : m_vector(0) { }
64  ObjectVector( const char* /* name */ )
65  : m_vector(0) { }
66 
67  ObjectVector( const ObjectVector<TYPE>& ) = delete;
68  ObjectVector& operator=( const ObjectVector<TYPE>& ) = delete;
69 
71  ~ObjectVector() override {
72  for( auto& i : m_vector ) {
73  // Set the back pointer to 0 to avoid repetitional searching
74  // for the object in the container, and deleting the object
75  i->setParent (nullptr);
76  delete i;
77  }
78  }
79 
81  const CLID& clID() const override {
83  }
85  static const CLID& classID() {
86  static const CLID clid = TYPE::classID() + CLID_ObjectVector;
87  return clid;
88  }
89 
90 
93  return m_vector.begin();
94  }
95 
98  return m_vector.begin();
99  }
100 
103  return m_vector.end();
104  }
105 
108  return m_vector.end();
109  }
110 
113  return m_vector.rbegin();
114  }
115 
119  return m_vector.rbegin();
120  }
121 
124  return m_vector.rend();
125  }
126 
129  return m_vector.rend();
130  }
131 
137  return m_vector.size();
138  }
139 
141  typename ObjectVector<TYPE>::size_type numberOfObjects() const override {
142  return m_vector.size();
143  }
144 
147  return m_vector.max_size();
148  }
149 
153  return m_vector.capacity();
154  }
155 
163  void reserve( typename ObjectVector<TYPE>::size_type value ) {
164  m_vector.reserve( value );
165  }
166 
168  bool empty () const {
169  return m_vector.empty();
170  }
171 
174  return m_vector.front();
175  }
176 
179  return m_vector.front();
180  }
181 
184  return m_vector.back();
185  }
186 
189  return m_vector.back();
190  }
191 
194  if( value->parent() ) {
195  const_cast<ObjectContainerBase*>(value->parent())->remove(value);
196  }
197  value->setParent(this);
198  m_vector.push_back(value);
199  }
200 
202  long add(ContainedObject* pObject) override {
203  try {
204  auto ptr = dynamic_cast<typename ObjectVector<TYPE>::value_type>(pObject);
205  if ( ptr ) {
206  push_back(ptr);
207  return m_vector.size()-1;
208  }
209  }
210  catch(...) {
211  }
212  return -1;
213  }
214 
217  void pop_back () {
218  auto position = m_vector.back();
219  // Set the back pointer to 0 to avoid repetitional searching
220  // for the object in the container, and deleting the object
221  position->setParent(nullptr);
222  delete position;
223  // Removing from the container itself
224  m_vector.pop_back();
225  }
226 
229  long remove(ContainedObject* value) override {
230  // Find the object of the value value
231  auto i = std::find_if( begin(), end(), [&](const ContainedObject* j) { return j==value; } );
232  if( i == end() ) {
233  // Object cannot be released from the conatiner,
234  // as it is not contained in it
235  return StatusCode::FAILURE;
236  }
237  // Set the back pointer to 0 to avoid repetitional searching
238  // for the object in the container and deleting the object
239  (*i)->setParent (nullptr);
240  erase(i);
241  return StatusCode::SUCCESS;
242  }
243 
246  typename ObjectVector<TYPE>::const_reference value ) {
247  value->setParent(this);
248  return m_vector.insert(position, value);
249  }
250 
252  void erase( typename ObjectVector<TYPE>::iterator position ) {
253  if( (*position)->parent() ) {
254  // Set the back pointer to 0 to avoid repetitional searching
255  // for the object in the container, and deleting the object
256  (*position)->setParent (nullptr);
257  delete *position;
258  }
259  // Removing from the container itself
260  m_vector.erase(position);
261  }
262 
264  void erase( typename ObjectVector<TYPE>::iterator first,
265  typename ObjectVector<TYPE>::iterator last ) {
266  for(auto i = first; i != last; i++ ) {
267  // Set the back pointer to 0 to avoid repetitional searching
268  // for the object in the container, and deleting the object
269  (*i)->setParent(nullptr);
270  delete *i;
271  }
272  // Removing from the container itself
273  m_vector.erase(first, last);
274  }
275 
277  void clear() {
278  erase(begin(), end());
279  }
280 
284  return m_vector[n];
285  }
286 
290  return m_vector[n];
291  }
292 
296  long index( const ContainedObject* obj ) const override {
297  auto i = std::find_if( begin(), end(), [&](const ContainedObject *o)
298  { return o == obj; } );
299  return i!=end() ? std::distance( begin(), i ) : -1 ;
300  }
301 
303  ContainedObject* containedObject( long dist ) const override {
304  return m_vector[dist];
305  }
306 
308  std::ostream& fillStream( std::ostream& s ) const override {
309  s << "class ObjectVector : size = "
310  << std::setw(12)
311  << size() << "\n";
312  // Output the base class
313  //ObjectContainerBase::fillStream(s);
314  if ( !empty() ) {
315  s << "\nContents of the STL vector :";
316  long count = 0;
317  for(const auto& i : m_vector) {
318  s << "\nIndex "
319  << std::setw(12)
320  << count++
321  << " of object of type " << *i;
322  }
323  }
324  return s;
325  }
326 
327 private:
330 };
331 
332 #endif // GAUDIKERNEL_OBJECTVECTOR_H
ObjectVector< TYPE >::iterator end()
Return an iterator pointing to the end of the container.
Definition: ObjectVector.h:102
void clear()
Clear the entire content of the container and delete all contained objects.
Definition: ObjectVector.h:277
T empty(T...args)
T distance(T...args)
long add(ContainedObject *pObject) override
Add an object to the container.
Definition: ObjectVector.h:202
size_t size_type
size_type, to conform the STL container interface
const CLID & clID() const override
Retrieve class ID.
Definition: ObjectVector.h:81
ObjectVector< TYPE >::reference back()
Return reference to the last element.
Definition: ObjectVector.h:183
ObjectVector< TYPE >::iterator begin()
Return an iterator pointing to the beginning of the container.
Definition: ObjectVector.h:92
ObjectVector(const char *)
Definition: ObjectVector.h:64
T rend(T...args)
T front(T...args)
void erase(typename ObjectVector< TYPE >::iterator position)
Erase the object at "position" from the container. The removed object will be deleted.
Definition: ObjectVector.h:252
ObjectVector< TYPE >::reverse_iterator rbegin()
Return a reverse_iterator pointing to the beginning of the reversed container.
Definition: ObjectVector.h:112
ObjectVector< TYPE >::const_iterator begin() const
Return a const_iterator pointing to the beginning of the container.
Definition: ObjectVector.h:97
std::vector< TYPE * >::const_iterator const_iterator
Definition: ObjectVector.h:48
std::vector< TYPE * > m_vector
The STL vector itself.
Definition: ObjectVector.h:329
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:193
ObjectVector is one of the basic Gaudi container classes capable of being registered in Data Stores...
ContainedObject * containedObject(long dist) const override
Return const pointer to an object of a given distance (index)
Definition: ObjectVector.h:303
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:264
std::vector< TYPE * >::const_reference const_reference
Definition: ObjectVector.h:45
ObjectVector< TYPE >::const_reverse_iterator rend() const
Return a const_reverse_iterator pointing to the end of the reversed container.
Definition: ObjectVector.h:128
T end(T...args)
std::vector< TYPE * >::const_pointer const_pointer
Definition: ObjectVector.h:57
T setw(T...args)
std::vector< TYPE * >::const_reverse_iterator const_reverse_iterator
Definition: ObjectVector.h:51
ObjectVector< TYPE >::reference front()
Return reference to the first element.
Definition: ObjectVector.h:173
ObjectVector & operator=(const ObjectVector< TYPE > &)=delete
T push_back(T...args)
ObjectVector< TYPE >::const_reference front() const
Return const_reference to the first element.
Definition: ObjectVector.h:178
std::vector< TYPE * >::reverse_iterator reverse_iterator
Definition: ObjectVector.h:50
ObjectVector< TYPE >::reference operator[](typename ObjectVector< TYPE >::size_type n)
Return the reference to the n&#39;th object in the container.
Definition: ObjectVector.h:283
long index(const ContainedObject *obj) const override
Return distance of a given object from the beginning of its container It correcponds to the "index" (...
Definition: ObjectVector.h:296
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:152
T erase(T...args)
T pop_back(T...args)
T capacity(T...args)
std::vector< TYPE * >::iterator iterator
Definition: ObjectVector.h:47
bool empty() const
Return true if the size of the container is 0.
Definition: ObjectVector.h:168
~ObjectVector() override
Destructor.
Definition: ObjectVector.h:71
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
void reserve(typename ObjectVector< TYPE >::size_type value)
Reserve place for "value" objects in the container.
Definition: ObjectVector.h:163
ObjectVector< TYPE >::const_reverse_iterator rbegin() const
Return a const_reverse_iterator pointing to the beginning of the reversed container.
Definition: ObjectVector.h:118
std::vector< TYPE * >::reference reference
Definition: ObjectVector.h:44
ObjectVector< TYPE >::iterator insert(typename ObjectVector< TYPE >::iterator position, typename ObjectVector< TYPE >::const_reference value)
Insert "value" before "position".
Definition: ObjectVector.h:245
T insert(T...args)
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
T find_if(T...args)
T size(T...args)
ObjectVector< TYPE >::size_type max_size() const
Return the largest possible size of the container.
Definition: ObjectVector.h:146
STL class.
ObjectVector< TYPE >::const_reference back() const
Return const_reference to the last element.
Definition: ObjectVector.h:188
std::ostream & fillStream(std::ostream &s) const override
Fill the output stream (ASCII)
Definition: ObjectVector.h:308
ObjectVector()
Constructors.
Definition: ObjectVector.h:62
std::vector< TYPE * >::value_type value_type
Definition: ObjectVector.h:42
ObjectVector< TYPE >::size_type numberOfObjects() const override
The same as size(), return number of objects in the container.
Definition: ObjectVector.h:141
T begin(T...args)
std::vector< TYPE * >::pointer pointer
Definition: ObjectVector.h:56
T max_size(T...args)
T back(T...args)
string s
Definition: gaudirun.py:245
TYPE contained_type
Definition: ObjectVector.h:41
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:123
ObjectVector< TYPE >::size_type size() const
Return the size of the container.
Definition: ObjectVector.h:136
ObjectVector< TYPE >::const_iterator end() const
Return a const_iterator pointing to the end of the container.
Definition: ObjectVector.h:107
STL class.
static const CLID & classID()
Retrieve class ID.
Definition: ObjectVector.h:85
void pop_back()
pop_back = remove the last element from the container The removed object will be deleted (see the met...
Definition: ObjectVector.h:217
T reserve(T...args)
T rbegin(T...args)