ATLAS Offline Software
AthLinks/ElementLinkVector.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 
3 /*
4  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 #ifndef ATHLINKS_ELEMENTLINKVECTOR_H
8 #define ATHLINKS_ELEMENTLINKVECTOR_H
9 
10 #include <algorithm>
11 #include <exception>
12 #include <functional>
13 #include <vector>
14 #include <boost/iterator/transform_iterator.hpp>
15 #include <boost/iterator_adaptors.hpp>
16 
17 #include "AthLinks/ElementLinkVectorBase.h"
18 #include "AthLinks/DataLink.h"
19 #include "AthLinks/ElementLink.h"
21 #include "AthLinks/tools/selection_ns.h"
22 
23 
24 // Forward declaration(s):
26 template< class STORABLE >
29 
30 // forward declarations of our friends
31 template <typename DOBJ>
32 bool
34  const ElementLinkVector<DOBJ>& rhs);
35 template <typename DOBJ>
36 bool
38  const ElementLinkVector<DOBJ>& rhs);
39 
61 template <typename DOBJ>
63 {
64 private:
67 
68 
69 public:
70  typedef typename std::vector< DataLink<DOBJ> > DataLinkVector;
72 
77  {
78  // i.e. friend class ElemLinkRef;
80  ElemLink operator()(ElemLinkRef& shortRef) const {
81  return shortRef.elementLink();
82  }
83  const ElemLink operator()(const ElemLinkRef& shortRef) const {
84  return shortRef.elementLink();
85  }
86  };
87 
88 private:
90  typedef typename std::vector<ElemLinkRef> RefVector;
92 
95 
96 public:
98  typedef typename ElemLink::index_type index_type;
99  typedef typename ElemLink::ID_type ID_type;
100  typedef typename ElemLink::sgkey_t sgkey_t;
101 
102 
103  // We used to just use transform_iterator directly.
104  // However, postincrement for transform_iterator is implemented as a free
105  // function, which pyroot doesn't see. This causes python iteration
106  // over ElementLinkVector to fail.
107  template <class Iterator>
109  : public boost::transform_iterator<Short2LongRef, Iterator>
110  {
111  public:
112  typedef boost::transform_iterator<Short2LongRef, Iterator> Base;
113  using Base::Base;
114  ELVIterator (const Base& b) : Base (b) {}
115  using Base::operator++;
116  using Base::operator--;
117  ELVIterator operator++(int) { ELVIterator tmp=*this; ++(*this); return tmp; }
118  ELVIterator operator--(int) { ELVIterator tmp=*this; --(*this); return tmp; }
119  };
120 
122 
123  typedef ElemLink& reference;
124  //FIXME typedef const ElemLink& const_reference;
126  typedef ELVIterator<typename RefVector::iterator> iterator;
127  typedef ELVIterator<typename RefVector::const_iterator> const_iterator;
128  //1.30 typedef typename boost::transform_iterator_generator<Short2LongRef, typename RefVector::iterator>::type iterator;
129  //1.30 typedef typename boost::transform_iterator_generator<Short2LongRef, typename RefVector::const_iterator>::type const_iterator;
130  typedef typename RefVector::size_type size_type;
131  typedef typename RefVector::difference_type difference_type;
133  typedef typename RefVector::allocator_type allocator_type;
134  typedef ElemLink* pointer;
135  typedef const ElemLink* const_pointer;
136  typedef ELVIterator<typename RefVector::reverse_iterator> reverse_iterator;
137  typedef ELVIterator<typename RefVector::const_reverse_iterator> const_reverse_iterator;
138  //1.30 typedef typename boost::transform_iterator_generator<Short2LongRef, typename RefVector::reverse_iterator>::type reverse_iterator;
139  //1.30 typedef typename boost::transform_iterator_generator<Short2LongRef, typename RefVector::const_reverse_iterator>::type const_reverse_iterator;
141 
142 
145 
148  return m_shortRefs[index].cptr();
149  }
152  return m_shortRefs[index].elementIndex();
153  }
156  return m_shortRefs[index].dataID();
157  }
158 
160 
162 
163  const DataLinkVector& hostDObjs() const { return m_hostDObjs; }
165  return m_hostDObjs.begin();
166  }
168  return m_hostDObjs.end();
169  }
170  typename DataLinkVector::const_iterator beginHostDObjs() const {
171  return m_hostDObjs.begin();
172  }
173  typename DataLinkVector::const_iterator endHostDObjs() const {
174  return m_hostDObjs.end();
175  }
177  typename DataLinkVector::const_iterator findHostDObj(const ElemLink& link) const;
180 
181  // Set the vector of host data objects from @a dobjs.
182  // @a dobjs is destroyed.
183  // This is an error if the vector is not empty.
185 
187 
188 
190 
192 
195  {
196  if (n > 0)
197  addHostDObj(link);
198  }
199 
200  ElementLinkVector(int n, const ElemLink& link = ElemLink()) :
202  {
203  if (n > 0)
204  addHostDObj(link);
205  }
206 
207  ElementLinkVector(long n, const ElemLink& link = ElemLink()) :
209  {
210  if (n > 0)
211  addHostDObj(link);
212  }
213 
216 
220 
222  ElementLinkVectorBase( std::move(vec) ),
223  m_shortRefs(std::move(vec.m_shortRefs)),
224  m_hostDObjs(std::move(vec.m_hostDObjs)) { }
225 
227  {
228  if (this != &vec) {
229  m_persKeys = vec.m_persKeys;
230  m_persIndices = vec.m_persIndices;
231  m_shortRefs = vec.m_shortRefs;
232  m_hostDObjs = vec.m_hostDObjs;
233  }
234  return *this;
235  }
236 
238  {
239  if (this != &vec) {
240  m_persKeys = std::move(vec.m_persKeys);
241  m_persIndices = std::move(vec.m_persIndices);
242  m_shortRefs = std::move(vec.m_shortRefs);
243  m_hostDObjs = std::move(vec.m_hostDObjs);
244  }
245  return *this;
246  }
247 
248  template <class InputIterator>
249  void assign(InputIterator first, InputIterator last) {
250  clear();
251  insert(begin(), first, last);
252  }
253  void assign(size_type n, const ElemLink& link) {
254  clear();
255  insert(begin(), n, link);
256  }
257 
258  bool toPersistent();
259 
260  // Also return list of shortrefs.
261  bool toPersistent(std::vector<typename DataLinkVector::size_type>& shortrefs);
262 
263  // Just the DataLink part of toPersistent().
265  bool toTransient();
266  void doRemap();
268 
270 
271 
272  iterator begin() { return iterator(m_shortRefs.begin(), Short2LongRef()); }
274  return const_iterator(m_shortRefs.begin(), Short2LongRef());
275  }
276  iterator end() { return iterator(m_shortRefs.end(), Short2LongRef()); }
277  const_iterator end() const {
278  return const_iterator(m_shortRefs.end(), Short2LongRef());
279  }
280  reverse_iterator rbegin() { return reverse_iterator(m_shortRefs.begin(), Short2LongRef()); }
282  return const_reverse_iterator(m_shortRefs.begin(), Short2LongRef());
283  }
284  reverse_iterator rend() { return reverse_iterator(m_shortRefs.end(), Short2LongRef()); }
286  return const_reverse_iterator(m_shortRefs.end(), Short2LongRef());
287  }
289 
291 
292  size_type size() const { return m_shortRefs.size(); }
293  size_type max_size() const { return m_shortRefs.max_size(); }
294  void resize(size_type sz, const ElemLink& link = ElemLink());
295  size_type capacity() const { return m_shortRefs.capacity(); }
296  bool empty() const { return 0 == size(); }
297  void reserve(size_type n) { return m_shortRefs.reserve(n); }
299 
301 
302  // reference operator[](size_type n);
304  operator[](size_type n) const { return m_shortRefs[n].elementLink(); }
305  // reference at(size_type n);
307  at(size_type n) const { return m_shortRefs.at(n).elementLink(); }
308  // reference front();
309  const_reference front() const{ return m_shortRefs.front().elementLink(); }
310  // reference back();
311  const_reference back() const{ return m_shortRefs.back().elementLink(); }
313 
315 
316  void push_back(const ElemLink& link) {
317  addHostDObj(link);
318  m_shortRefs.push_back(ElemLinkRef(link));
319  }
320  void pop_back() { //FIXME CHECK
321  removeHostObj(back());
322  m_shortRefs.pop_back();
323  }
324 
325  // Add an element by indices.
326  // (Mostly for use from persistency.)
327  void push_back (typename DataLinkVector::size_type nameIndex,
329 
330  iterator insert(iterator position, const ElemLink& link);
331  void insert(iterator position, size_type n, const ElemLink& link);
332 
335 
337  m_hostDObjs.swap(vec.m_hostDObjs);
338  m_shortRefs.swap(vec.m_shortRefs);
339  }
340 
341  void clear() {
342  m_hostDObjs.clear();
343  m_shortRefs.clear();
344  }
346 
347 private:
352  template< typename INDEX_TYPE >
353  void toTransient( INDEX_TYPE& dummy );
354 
356  void removeHostObj(const ElemLink&
357 #ifdef __ELVDEBUG
358  link
359 #endif
360  ) {
361 #ifdef __ELVDEBUG
362  std::cout << "DUMMY removeHostDObj called for link "
363  << link.dataID() << "/" << link.index() << std::endl;
364 #endif
365  //FIXME this is a dummy until we find how to remove an host w/o
366  //FIXME screwing up the otherElemLinkRefs
367  //FIXME m_hostDObjs.erase(findHostDObj(link));
368  }
369 
371  void addHostDObj(const ElemLink& link);
372 
374  typename RefVector::const_iterator
376  typename RefVector::const_iterator ret(m_shortRefs.begin());
377  advance(ret, distance(begin(), longIter));
378 #ifdef __ELVDEBUG
379  std::cout << "shortIterFromLong(const version) called for "
380  << longIter->dataID() << "/" << longIter->index()
381  << " advance by " << distance(begin(), longIter)
382  << " result is " << ret->dataID() << "/" << ret->index() << std::endl;
383 #endif
384  return ret;
385  }
386 
388  typename RefVector::iterator
390  typename RefVector::iterator ret(m_shortRefs.begin());
391  advance(ret, distance(begin(), longIter));
392 #ifdef __ELVDEBUG
393  std::cout << "shortIterFromLong called for "
394  << longIter->dataID() << "/" << longIter->index()
395  << " advance by " << distance(begin(), longIter)
396  << " result is " << ret->dataID() << "/" << ret->index() << std::endl;
397 #endif
398  return ret;
399  }
400 
402 
403  template <class InputIterator>
404  ElementLinkVector(InputIterator first, InputIterator last);
405  template <class InputIterator>
406  void insert(iterator position, InputIterator first, InputIterator last);
408 
410  friend bool operator == <>(const ElemLinkVec&, const ElemLinkVec&);
412  friend bool operator < <>(const ElemLinkVec&, const ElemLinkVec&);
413 
415  typedef typename
416  ROOT_SELECTION_NS::ElementLinkVector< DOBJ>::self DictSel;
417 
418 }; // class ElementLinkVector
419 
420 template <typename DOBJ>
422 }
423 
424 /*
425  * The following piece of code makes the Reflex dictionary think of
426  * "ElementLinkVector< T, DataProxyStorage< T >,
427  * SG::GenerateIndexingPolicy< T >::type >"
428  * simply as "ElementLinkVector< T >". This is vital for tricking
429  * ROOT into reading this object's payload back into a different
430  * ElementLink implementation in vanilla ROOT.
431  */
433 
434 template< class STORABLE >
435 struct ElementLinkVector : public SelectNoInstance
436 {
439  ROOT_SELECTION_NS::MemberAttributes< kTransient > m_shortRefs;
440  ROOT_SELECTION_NS::MemberAttributes< kTransient > m_hostDObjs;
441 };
442 
444 
445 // Hide the rest from the dictionary generator:
446 #ifndef __GCCXML__
447 
448 #include "AthLinks/ElementLinkVector.icc"
449 #include "AthLinks/tools/SGELVRef.icc" /* to avoid circular deps */
450 
452 
453 template <typename DOBJ>
454 bool
456  const ElementLinkVector<DOBJ>& rhs) {
457  return (lhs.m_shortRefs < rhs.m_shortRefs);
458 }
459 template <typename DOBJ>
460 bool
462  const ElementLinkVector<DOBJ>& rhs) {
463  return rhs < lhs;
464 }
465 template <typename DOBJ>
466 bool
468  const ElementLinkVector<DOBJ>& rhs) {
469  return (lhs.m_shortRefs == rhs.m_shortRefs);
470 }
471 template <typename DOBJ>
472 bool
474  const ElementLinkVector<DOBJ>& rhs) {
475  return !operator==(lhs, rhs);
476 }
477 //FIXME ops <= , => etc
479 
480 namespace std {
481 template <typename DOBJ>
482 void
485 #ifdef __ELVDEBUG
486  std::cout << "std::swap called for lhs " << std::hex << &lhs
487  << " rhs " << &rhs << std::dec << std::endl;
488 #endif
489  lhs.swap(rhs);
490 }
491 }
492 
493 #endif // not __GCCXML__
494 #endif /*ATHLINKS_ELEMENTLINKVECTOR_H*/
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
ElementLinkVector::ElementLinkVector
ElementLinkVector(size_type n, const ElemLink &link)
Definition: AthLinks/ElementLinkVector.h:193
ElementLinkVector::toPersistent
bool toPersistent()
ElementLinkVector::toPersistent
bool toPersistent(std::vector< typename DataLinkVector::size_type > &shortrefs)
ElementLinkVector::front
const_reference front() const
Definition: AthLinks/ElementLinkVector.h:309
ElementLinkVector::toTransient
void toTransient(uint64_t &dummy)
Function setting up the object for forward indexing types.
fitman.sz
sz
Definition: fitman.py:527
ElementLinkVector::begin
iterator begin()
Definition: AthLinks/ElementLinkVector.h:272
ElementLinkVector::pop_back
void pop_back()
Definition: AthLinks/ElementLinkVector.h:320
ElementLinkVector::toPersistentDL
bool toPersistentDL()
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ElementLinkVector::operator[]
const_reference operator[](size_type n) const
Definition: AthLinks/ElementLinkVector.h:304
ElementLinkVector::end
iterator end()
Definition: AthLinks/ElementLinkVector.h:276
index
Definition: index.py:1
ElementLinkVector::endHostDObjs
DataLinkVector::iterator endHostDObjs()
Definition: AthLinks/ElementLinkVector.h:167
ElementLinkVector::push_back
void push_back(typename DataLinkVector::size_type nameIndex, typename ElemLinkRef::index_type elementIndex)
ElementLinkVector::findHostDObj
DataLinkVector::iterator findHostDObj(const ElemLink &link)
find the host of an element. Returns endHostDObjs() if not found
ElementLinkVector::const_pointer
const ElemLink * const_pointer
Definition: AthLinks/ElementLinkVector.h:135
ElementLinkVector::ElementLinkVector
ElementLinkVector(size_type n)
Definition: AthLinks/ElementLinkVector.h:214
ElementLinkVector::rbegin
const_reverse_iterator rbegin() const
Definition: AthLinks/ElementLinkVector.h:281
ElementLinkVector::Short2LongRef::operator()
const ElemLink operator()(const ElemLinkRef &shortRef) const
Definition: AthLinks/ElementLinkVector.h:83
ElementLinkVector::ElementLinkVector
ElementLinkVector(int n, const ElemLink &link=ElemLink())
Definition: AthLinks/ElementLinkVector.h:200
ElementLinkVector::toTransient
void toTransient(INDEX_TYPE &dummy)
Function taking care of all the other indexing types (no direct ROOT I/O)
ElementLinkVector::moveHostDObjs
void moveHostDObjs(DataLinkVector &dobjs)
ElementLinkVector::reverse_iterator
ELVIterator< typename RefVector::reverse_iterator > reverse_iterator
Definition: AthLinks/ElementLinkVector.h:136
ElementLinkVector::const_reverse_iterator
ELVIterator< typename RefVector::const_reverse_iterator > const_reverse_iterator
Definition: AthLinks/ElementLinkVector.h:137
ElementLinkVector::addHostDObj
void addHostDObj(const ElemLink &link)
add host of link to list. No duplicates. O(N) in m_hostDObjs
ElementLinkVector::ElemLinkRef
SG::ELVRef< DOBJ > ElemLinkRef
Definition: AthLinks/ElementLinkVector.h:66
ElementLinkVector::toTransient
bool toTransient()
ElementLinkVector::iterator
ELVIterator< typename RefVector::iterator > iterator
Definition: AthLinks/ElementLinkVector.h:126
ElementLinkVector::hostDObjs
const DataLinkVector & hostDObjs() const
Definition: AthLinks/ElementLinkVector.h:163
ElementLinkVector::insert
void insert(iterator position, size_type n, const ElemLink &link)
ElementLinkVector::ElemLink
ElementLink< DOBJ > ElemLink
Definition: AthLinks/ElementLinkVector.h:71
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
ElementLinkVector::ElementLinkVector
ElementLinkVector(long n, const ElemLink &link=ElemLink())
Definition: AthLinks/ElementLinkVector.h:207
ElementLinkVector::insert
void insert(iterator position, InputIterator first, InputIterator last)
ElementLinkVector::swap
void swap(ElemLinkVec &vec)
Definition: AthLinks/ElementLinkVector.h:336
ElementLinkVectorBase
Base class holding the container independent part of ElementLinkVector.
Definition: AthLinks/ElementLinkVectorBase.h:28
ElementLinkVector::elementCPtr
ElementConstPointer elementCPtr(size_type index) const
pointer to an element, given its ElementLinkVector index. O(1)
Definition: AthLinks/ElementLinkVector.h:147
ElementLinkVector::push_back
void push_back(const ElemLink &link)
Definition: AthLinks/ElementLinkVector.h:316
ElementLinkVector::findHostDObj
DataLinkVector::const_iterator findHostDObj(const ElemLink &link) const
find the host of an element. Returns endHostDObjs() if not found
ElementLinkVector::resize
void resize(size_type sz, const ElemLink &link=ElemLink())
ElementLinkVector::begin
const_iterator begin() const
Definition: AthLinks/ElementLinkVector.h:273
ElementLinkVector::toTransient
void toTransient(uint32_t &dummy)
ElementLinkVector::capacity
size_type capacity() const
Definition: AthLinks/ElementLinkVector.h:295
ElementLinkVector::rend
const_reverse_iterator rend() const
Definition: AthLinks/ElementLinkVector.h:285
ElementLinkVector::allocator_type
RefVector::allocator_type allocator_type
Definition: AthLinks/ElementLinkVector.h:133
SG::ELVRef
a short ref to an ElementLink into an ElementLinkVector. Used to be an internal class of ElementLinkV...
Definition: SGELVRef.h:30
ElementLinkVector::clear
void clear()
Definition: AthLinks/ElementLinkVector.h:341
ElementLinkVector::m_shortRefs
ROOT_SELECTION_NS::MemberAttributes< kTransient > m_shortRefs
Mark all transient members:
Definition: AthLinks/ElementLinkVector.h:439
DataLinkVector::iterator
class iterator - iterator over elements in DataLinkVector which manages the Entry objects
Definition: DataLinkVector.h:128
beamspotman.n
n
Definition: beamspotman.py:731
ElementLinkVector::shortIterFromLong
RefVector::iterator shortIterFromLong(iterator longIter)
get a short ref iterator from an iterator
Definition: AthLinks/ElementLinkVector.h:389
ElementLinkVector::m_hostDObjs
DataLinkVector m_hostDObjs
the dobjs hosting our elements. They are all of type DOBJ
Definition: AthLinks/ElementLinkVector.h:94
Base
ElementLinkVector::empty
bool empty() const
Definition: AthLinks/ElementLinkVector.h:296
ElementLinkVector::elementDataID
ID_type elementDataID(size_type index) const
dataID (long ref) of an element, given its ElementLinkVector index. O(1)
Definition: AthLinks/ElementLinkVector.h:155
ElementLinkVector::DataLinkVector
std::vector< DataLink< DOBJ > > DataLinkVector
Definition: AthLinks/ElementLinkVector.h:70
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
python.xAODType.dummy
dummy
Definition: xAODType.py:4
ElementLinkVector::sgkey_t
ElemLink::sgkey_t sgkey_t
Definition: AthLinks/ElementLinkVector.h:100
ElementLinkVector::pointer
ElemLink * pointer
Definition: AthLinks/ElementLinkVector.h:134
ElementLinkVector::size_type
RefVector::size_type size_type
Definition: AthLinks/ElementLinkVector.h:130
ElementLinkVector::ELVIterator::operator++
ELVIterator operator++(int)
Definition: AthLinks/ElementLinkVector.h:117
ElementLinkVector::rend
reverse_iterator rend()
Definition: AthLinks/ElementLinkVector.h:284
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
ElementLinkVector::const_iterator
ELVIterator< typename RefVector::const_iterator > const_iterator
Definition: AthLinks/ElementLinkVector.h:127
ElementLinkVector::ElementLinkVector
ElementLinkVector()
ElementLinkVector::beginHostDObjs
DataLinkVector::iterator beginHostDObjs()
Definition: AthLinks/ElementLinkVector.h:164
ElementLinkVector::beginHostDObjs
DataLinkVector::const_iterator beginHostDObjs() const
Definition: AthLinks/ElementLinkVector.h:170
ElementLinkVector::value_type
ElemLink value_type
Definition: AthLinks/ElementLinkVector.h:132
ElementLinkVector::erase
iterator erase(iterator position)
SGELVRef.h
ElementLinkVector::removeHostObj
void removeHostObj(const ElemLink &)
remove host of link from list. O(N) in m_hostDObjs (which is small)
Definition: AthLinks/ElementLinkVector.h:356
ElementLinkVector::DictSel
ROOT_SELECTION_NS::ElementLinkVector< DOBJ >::self DictSel
Needed for the simplified Reflex class name.
Definition: AthLinks/ElementLinkVector.h:416
ElementLinkVector::RefVector
std::vector< ElemLinkRef > RefVector
the element links stored as ElemLinkRefs for compactness
Definition: AthLinks/ElementLinkVector.h:90
ElementLinkVector
ElementLinkVector implementation for standalone ROOT.
Definition: AthLinks/ElementLinkVector.h:27
ElementLinkVector::Short2LongRef
a functor turning an ElemLinkRef into an ElementLink
Definition: AthLinks/ElementLinkVector.h:77
ElementLinkVector::ElementLinkVector
ElementLinkVector(const ElemLinkVec &vec)
Definition: AthLinks/ElementLinkVector.h:217
ElementLinkVector::m_hostDObjs
ROOT_SELECTION_NS::MemberAttributes< kTransient > m_hostDObjs
Definition: AthLinks/ElementLinkVector.h:440
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
ElementLinkVector::ELVIterator::Base
boost::transform_iterator< Short2LongRef, Iterator > Base
Definition: AthLinks/ElementLinkVector.h:112
ElementLinkVector::ElementLinkVector
ElementLinkVector(InputIterator first, InputIterator last)
ElementLinkVector::at
const_reference at(size_type n) const
Definition: AthLinks/ElementLinkVector.h:307
ElementLinkVector::erase
iterator erase(iterator first, iterator last)
ElementLinkVector::index_type
ElemLink::index_type index_type
Definition: AthLinks/ElementLinkVector.h:98
ElementLinkVector::Short2LongRef::operator()
ElemLink operator()(ElemLinkRef &shortRef) const
Definition: AthLinks/ElementLinkVector.h:80
DeMoScan.index
string index
Definition: DeMoScan.py:364
ElementLinkVector::size
size_type size() const
Definition: AthLinks/ElementLinkVector.h:292
ElementLinkVector::m_shortRefs
RefVector m_shortRefs
Definition: AthLinks/ElementLinkVector.h:91
ElementLinkVector::assign
void assign(size_type n, const ElemLink &link)
Definition: AthLinks/ElementLinkVector.h:253
ElementLinkVector::Short2LongRef::ElemLinkVec
ElementLinkVector< DOBJ > ElemLinkVec
Definition: AthLinks/ElementLinkVector.h:79
ElementLinkVector::back
const_reference back() const
Definition: AthLinks/ElementLinkVector.h:311
ElementLinkVector::difference_type
RefVector::difference_type difference_type
Definition: AthLinks/ElementLinkVector.h:131
ElementLinkVector::insert
iterator insert(iterator position, const ElemLink &link)
ElementLinkVector::reference
ElemLink & reference
Definition: AthLinks/ElementLinkVector.h:123
DeMoScan.first
bool first
Definition: DeMoScan.py:536
ElementLinkVector::ELVIterator
Definition: AthLinks/ElementLinkVector.h:110
ElementLinkVector::endHostDObjs
DataLinkVector::const_iterator endHostDObjs() const
Definition: AthLinks/ElementLinkVector.h:173
ElementLinkVector::ElemLinkVec
ElementLinkVector< DOBJ > ElemLinkVec
Definition: AthLinks/ElementLinkVector.h:65
ElementLinkVector::end
const_iterator end() const
Definition: AthLinks/ElementLinkVector.h:277
ElementLinkVector::assign
void assign(InputIterator first, InputIterator last)
Definition: AthLinks/ElementLinkVector.h:249
ElementLinkVector::elementIndex
index_type elementIndex(size_type index) const
host index of an element, given its ElementLinkVector index. O(1)
Definition: AthLinks/ElementLinkVector.h:151
ElementLinkVector::reserve
void reserve(size_type n)
Definition: AthLinks/ElementLinkVector.h:297
ElementLinkVector::doRemap
void doRemap()
ElementLinkVector::ElementLinkVector
ElementLinkVector(ElemLinkVec &&vec) noexcept
Definition: AthLinks/ElementLinkVector.h:221
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
ElementLinkVector::max_size
size_type max_size() const
Definition: AthLinks/ElementLinkVector.h:293
ElementLinkVector::const_reference
ElemLink const_reference
Definition: AthLinks/ElementLinkVector.h:125
ElementLinkVector::ELVIterator::operator--
ELVIterator operator--(int)
Definition: AthLinks/ElementLinkVector.h:118
ElementLinkVector::rbegin
reverse_iterator rbegin()
Definition: AthLinks/ElementLinkVector.h:280
ElementLinkVector::ELVIterator::ELVIterator
ELVIterator(const Base &b)
Definition: AthLinks/ElementLinkVector.h:114
ElementLinkVector::shortIterFromLong
RefVector::const_iterator shortIterFromLong(const_iterator longIter) const
get a short ref iterator from an iterator
Definition: AthLinks/ElementLinkVector.h:375
SG::ELVRef::index_type
ElemLink::index_type index_type
Definition: SGELVRef.h:37
ElementLinkVector::operator=
ElementLinkVector & operator=(const ElemLinkVec &vec)
Definition: AthLinks/ElementLinkVector.h:226
SG::ELVRef::elementLink
const ElemLink & elementLink() const
get the corresponding ElementLink. O(1)
Definition: SGELVRef.h:59
SGELVRef.icc
ElementLinkVector::ElementConstPointer
ElemLink::ElementConstPointer ElementConstPointer
Definition: AthLinks/ElementLinkVector.h:97
ElementLinkVector::ID_type
ElemLink::ID_type ID_type
Definition: AthLinks/ElementLinkVector.h:99