| The Gaudi Framework v28r2-patches (bc4ad17a)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

SharedObjectsContainer.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_SHAREDOBJECTSCONTAINER_H
2 #define GAUDIKERNEL_SHAREDOBJECTSCONTAINER_H 1
3 // ============================================================================
4 // Include files
5 // ============================================================================
6 // STD & STL
7 // ============================================================================
8 #include <algorithm>
9 // ============================================================================
10 // GaudiKernel
11 // ============================================================================
12 #include "GaudiKernel/Kernel.h"
13 #include "GaudiKernel/ClassID.h"
14 #include "GaudiKernel/ObjectContainerBase.h"
15 // ============================================================================
27 template <class TYPE>
28 class SharedObjectsContainer : public ObjectContainerBase
29 {
30 public:
31 // ==========================================================================
33 typedef std::vector<const TYPE*> ConstVector ;
35 typedef typename ConstVector::value_type value_type ;
36 typedef typename ConstVector::size_type size_type ;
37 typedef typename ConstVector::reference reference ;
38 typedef typename ConstVector::const_reference const_reference ;
39 typedef typename ConstVector::iterator iterator ;
40 typedef typename ConstVector::const_iterator const_iterator ;
41 typedef typename ConstVector::reverse_iterator reverse_iterator ;
42 typedef typename ConstVector::const_reverse_iterator const_reverse_iterator ;
43 // ==========================================================================
44 public:
45 // ==========================================================================
46 // the default constructor (creates the empty vector)
47 SharedObjectsContainer () = default;
48 // move constructor and move assignement
49 SharedObjectsContainer(SharedObjectsContainer&&) = default;
50 SharedObjectsContainer& operator=(SharedObjectsContainer&&) = default;
51 // the constructor from the data
52 SharedObjectsContainer ( const ConstVector& data )
53 : m_data(data) {}
54 SharedObjectsContainer ( ConstVector&& data )
55 : m_data(std::move(data)) {}
56
61 template <class DATA>
62 SharedObjectsContainer(DATA first, DATA last)
63 : m_data(first, last) {}
87 template <class DATA, class PREDICATE>
88 SharedObjectsContainer(DATA first, DATA last, const PREDICATE& cut)
89 {
90 insert ( first , last , cut ) ;
91 }
92 // ==========================================================================
93 public:
94 // ==========================================================================
96 const CLID& clID() const override
97 { return SharedObjectsContainer<TYPE>::classID(); }
99 static const CLID& classID()
100 {
101 static const CLID s_clid =
102 ( ( static_cast<CLID> ( -1 ) << 16 ) // 16 used and 16 empty bits
103 & !CLID_ObjectVector // not an ObjectVector
104 & !CLID_ObjectList // not an ObjectList
105 & !static_cast<CLID> ( 0x00030000 ) // not a KeyedContainer/map
106 & !static_cast<CLID> ( 0x00040000 ) )// not a KeyedContainer/hashmap
107 + TYPE::classID() ; // the specific CLID from the contents
108 //
109 return s_clid;
110 }
111 // ==========================================================================
112 public:
113 // ==========================================================================
115 inline const ConstVector& data () const { return m_data ; }
117 operator const ConstVector& () const { return data () ; }
118 // ==========================================================================
119 public:
120 // ==========================================================================
122 size_type size () const { return m_data.size () ; }
124 bool empty () const { return m_data.empty () ; }
128 void push_back ( const TYPE* object ) { m_data.push_back ( object ) ; }
132 void insert ( const TYPE* object ) { m_data.push_back ( object ) ; }
137 template <class DATA>
138 void insert
139 ( DATA first ,
140 DATA last ) { m_data.insert ( end() , first ,last ) ; }
167 template <class DATA, class PREDICATE>
168 void insert
169 ( DATA first ,
170 DATA last ,
171 const PREDICATE& cut )
172 {
173 m_data.reserve ( m_data.size() + std::distance ( first , last ) ) ;
174 std::copy_if( first, last, std::back_inserter(m_data), std::cref(cut) );
175 }
200 template <class OUTPUT, class PREDICATE>
201 OUTPUT get ( const PREDICATE& cut ,
202 OUTPUT output ) const
203 {
204 return std::copy_if( begin(), end(), output, std::cref(cut) );
205 }
207 void erase ( iterator i ) { m_data.erase ( i ) ; }
225 template <class PREDICATE>
226 void erase ( const PREDICATE& cut )
227 { m_data.erase( std::remove_if ( begin() , end() , cut ) , end() ) ; }
246 bool erase ( const TYPE* object )
247 {
248 auto i = std::find ( begin() , end() , object ) ;
249 if ( end() == i ) { return false ; }
250 m_data.erase ( i ) ;
251 return true ;
252 }
253 // ==========================================================================
254 public:
255 // ==========================================================================
257 reference operator[] ( size_type index ) { return m_data [index] ; }
259 const_reference operator[] ( size_type index ) const { return m_data [index] ; }
261 reference operator() ( size_type index ) { return m_data [index] ; }
263 const_reference operator() ( size_type index ) const { return m_data [index] ; }
265 reference at ( size_type index ) { return m_data.at(index) ; }
267 const_reference at ( size_type index ) const { return m_data.at(index) ; }
268 // ==========================================================================
269 public:
270 // ==========================================================================
271 iterator begin () { return m_data . begin () ; }
272 iterator end () { return m_data . end () ; }
273 const_iterator begin () const { return m_data . begin () ; }
274 const_iterator end () const { return m_data . end () ; }
275 reverse_iterator rbegin () { return m_data . rbegin () ; }
276 reverse_iterator rend () { return m_data . rend () ; }
277 const_reverse_iterator rbegin () const { return m_data . rbegin () ; }
278 const_reverse_iterator rend () const { return m_data . rend () ; }
279 // ==========================================================================
280 public:
281 // ==========================================================================
283 reference front () { return m_data . front () ; }
285 const_reference front () const { return m_data . front () ; }
287 reference back () { return m_data . back () ; }
289 const_reference back () const { return m_data . back () ; }
290 // ==========================================================================
291 public:
292 // ==========================================================================
294 bool operator== ( const SharedObjectsContainer& right ) const
295 { return &right == this || right.m_data == m_data ; }
297 bool operator== ( const ConstVector& right ) const
298 { return m_data == right ; }
300 bool operator < ( const SharedObjectsContainer& right ) const
301 { return m_data < right.m_data ; }
303 bool operator < ( const ConstVector& right ) const
304 { return m_data < right ; }
305 // ==========================================================================
306 public: // ObjectContainerBase methods:
307 // ==========================================================================
311 long index( const ContainedObject* object ) const override
312 {
313 auto _i = std::find ( begin() , end() , object ) ;
314 return end() != _i ? ( _i - begin() ) : -1 ; // RETURN
315 }
320 ContainedObject* containedObject ( long index ) const override
321 {
322 if ( 0 > index || !(index < (long) size () ) ) { return nullptr; } // RETURN
323 const ContainedObject* co = m_data[index] ;
324 return const_cast<ContainedObject*>( co ) ;
325 }
327 size_type numberOfObjects() const override { return m_data.size() ; }
332 long add ( ContainedObject* object) override
333 {
334 if ( !object ) { return -1 ; } // RETURN
335 TYPE* _obj = dynamic_cast<TYPE*> ( object ) ;
336 if ( !_obj ) { return -1 ; } // RETURN
337 const size_type pos = size() ;
338 push_back ( _obj ) ;
339 return pos ;
340 }
345 long remove ( ContainedObject* value ) override
346 {
347 auto _i = std::find ( begin() , end() , value ) ;
348 if ( end() == _i ) { return -1 ; } // RETURN
349 const size_type pos = _i - begin() ;
350 m_data.erase ( _i ) ;
351 return pos ; // RETURN
352 }
353 // ==========================================================================
354 private:
355 // ==========================================================================
356 // the actual data
357 ConstVector m_data ; // the actual data
358 // ==========================================================================
359 };
360 // ============================================================================
361 // The END
362 // ============================================================================
363 #endif // GAUDIKERNEL_SHAREDOBJECTSCONTAINER_H
364 // ============================================================================
SharedObjectsContainer::erase
bool erase(const TYPE *object)
erase the first occurance of the certain element
Definition: SharedObjectsContainer.h:246
SharedObjectsContainer::front
reference front()
the first element (only for non-empty vectors)
Definition: SharedObjectsContainer.h:283
SharedObjectsContainer
Very simple class to represent the container of objects which are not owned by this container...
Definition: SharedObjectsContainer.h:28
SharedObjectsContainer::containedObject
ContainedObject * containedObject(long index) const override
Pointer to an object of a given distance.
Definition: SharedObjectsContainer.h:320
ClassID.h
Kernel.h
std::vector::empty
T empty(T...args)
SharedObjectsContainer::at
const_reference at(size_type index) const
checked access (const-version)
Definition: SharedObjectsContainer.h:267
std::copy_if
T copy_if(T...args)
std::distance
T distance(T...args)
SharedObjectsContainer::operator()
reference operator()(size_type index)
&#39;functional&#39;-access
Definition: SharedObjectsContainer.h:261
SharedObjectsContainer::begin
const_iterator begin() const
Definition: SharedObjectsContainer.h:273
SharedObjectsContainer::erase
void erase(const PREDICATE &cut)
erase the objects which satisfy the criteria
Definition: SharedObjectsContainer.h:226
SharedObjectsContainer::operator==
bool operator==(const SharedObjectsContainer &right) const
equal content with other container ?
Definition: SharedObjectsContainer.h:294
gaudirun.output
output
Definition: gaudirun.py:388
SharedObjectsContainer::push_back
void push_back(const TYPE *object)
insert one object into the container
Definition: SharedObjectsContainer.h:128
SharedObjectsContainer::operator<
bool operator<(const SharedObjectsContainer &right) const
comparisons with other container
Definition: SharedObjectsContainer.h:300
SharedObjectsContainer::size_type
ConstVector::size_type size_type
Definition: SharedObjectsContainer.h:36
std
STL namespace.
ObjectContainerBase.h
SharedObjectsContainer::reverse_iterator
ConstVector::reverse_iterator reverse_iterator
Definition: SharedObjectsContainer.h:41
SharedObjectsContainer::size
size_type size() const
get the actual size of the container
Definition: SharedObjectsContainer.h:122
SharedObjectsContainer::numberOfObjects
size_type numberOfObjects() const override
Number of objects in the container.
Definition: SharedObjectsContainer.h:327
std::remove_if
T remove_if(T...args)
SharedObjectsContainer::SharedObjectsContainer
SharedObjectsContainer(DATA first, DATA last, const PREDICATE &cut)
the templated constructor from the pair of iterators and the predicate.
Definition: SharedObjectsContainer.h:88
SharedObjectsContainer::rbegin
reverse_iterator rbegin()
Definition: SharedObjectsContainer.h:275
SharedObjectsContainer::iterator
ConstVector::iterator iterator
Definition: SharedObjectsContainer.h:39
SharedObjectsContainer::const_reference
ConstVector::const_reference const_reference
Definition: SharedObjectsContainer.h:38
std::vector::at
T at(T...args)
SharedObjectsContainer::insert
void insert(const TYPE *object)
insert one object into the container
Definition: SharedObjectsContainer.h:132
std::vector::push_back
T push_back(T...args)
SharedObjectsContainer::front
const_reference front() const
the first element (only for non-empty vectors) (const-version)
Definition: SharedObjectsContainer.h:285
SharedObjectsContainer::end
const_iterator end() const
Definition: SharedObjectsContainer.h:274
SharedObjectsContainer::rbegin
const_reverse_iterator rbegin() const
Definition: SharedObjectsContainer.h:277
SharedObjectsContainer::const_iterator
ConstVector::const_iterator const_iterator
Definition: SharedObjectsContainer.h:40
SharedObjectsContainer::begin
iterator begin()
Definition: SharedObjectsContainer.h:271
SharedObjectsContainer::SharedObjectsContainer
SharedObjectsContainer(const ConstVector &data)
Definition: SharedObjectsContainer.h:52
SharedObjectsContainer::back
const_reference back() const
the last element (only for non-empty vectors) (const-version)
Definition: SharedObjectsContainer.h:289
SharedObjectsContainer::data
const ConstVector & data() const
get the access to the underlying container (const)
Definition: SharedObjectsContainer.h:115
std::vector::erase
T erase(T...args)
SharedObjectsContainer::end
iterator end()
Definition: SharedObjectsContainer.h:272
SharedObjectsContainer::at
reference at(size_type index)
checked access
Definition: SharedObjectsContainer.h:265
SharedObjectsContainer::index
long index(const ContainedObject *object) const override
Distance of a given object from the beginning of its container.
Definition: SharedObjectsContainer.h:311
SharedObjectsContainer::add
long add(ContainedObject *object) override
Virtual functions (forwards to the concrete container definitions) Add an object to the container...
Definition: SharedObjectsContainer.h:332
CLID
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
SharedObjectsContainer::SharedObjectsContainer
SharedObjectsContainer()=default
SharedObjectsContainer::empty
bool empty() const
empty container?
Definition: SharedObjectsContainer.h:124
SharedObjectsContainer::rend
reverse_iterator rend()
Definition: SharedObjectsContainer.h:276
SharedObjectsContainer::operator[]
reference operator[](size_type index)
index access
Definition: SharedObjectsContainer.h:257
SharedObjectsContainer::operator=
SharedObjectsContainer & operator=(SharedObjectsContainer &&)=default
SharedObjectsContainer::ConstVector
std::vector< const TYPE * > ConstVector
the actual container type
Definition: SharedObjectsContainer.h:33
std::vector::insert
T insert(T...args)
ContainedObject
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
Definition: ContainedObject.h:29
std::find
T find(T...args)
SharedObjectsContainer::rend
const_reverse_iterator rend() const
Definition: SharedObjectsContainer.h:278
std::vector::size
T size(T...args)
SharedObjectsContainer::SharedObjectsContainer
SharedObjectsContainer(ConstVector &&data)
Definition: SharedObjectsContainer.h:54
std::vector< const TYPE * >
std::cref
T cref(T...args)
std::back_inserter
T back_inserter(T...args)
SharedObjectsContainer::classID
static const CLID & classID()
Retrieve the unuqie class ID (static)
Definition: SharedObjectsContainer.h:99
SharedObjectsContainer::reference
ConstVector::reference reference
Definition: SharedObjectsContainer.h:37
SharedObjectsContainer::back
reference back()
the last element (only for non-empty vectors)
Definition: SharedObjectsContainer.h:287
ObjectContainerBase
ObjectContainerBase is the base class for Gaudi container classes.
Definition: ObjectContainerBase.h:19
SharedObjectsContainer::clID
const CLID & clID() const override
Retrieve the unique class ID (virtual)
Definition: SharedObjectsContainer.h:96
SharedObjectsContainer::SharedObjectsContainer
SharedObjectsContainer(DATA first, DATA last)
the templated constructor from the pair of iterators
Definition: SharedObjectsContainer.h:62
Objects::reference
TO * reference(FROM *from)
Definition: KeyedObject.cpp:20
SharedObjectsContainer::m_data
ConstVector m_data
Definition: SharedObjectsContainer.h:357
std::vector::reserve
T reserve(T...args)
SharedObjectsContainer::erase
void erase(iterator i)
erase the object by iterator
Definition: SharedObjectsContainer.h:207
SharedObjectsContainer::const_reverse_iterator
ConstVector::const_reverse_iterator const_reverse_iterator
Definition: SharedObjectsContainer.h:42
SharedObjectsContainer::value_type
ConstVector::value_type value_type
various types (to make STL happy)
Definition: SharedObjectsContainer.h:35