ATLAS Offline Software
DataVector.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-2024 CERN for the benefit of the ATLAS collaboration
5 */
520 #ifndef ATHCONTAINERS_DATAVECTOR_H
521 #define ATHCONTAINERS_DATAVECTOR_H
522 
523 
524 // For feature tests.
525 #define HAVE_CONSTDATAVECTOR
526 
527 
541 #include "AthLinks/tools/selection_ns.h"
542 #include <boost/iterator/iterator_adaptor.hpp>
543 #include <type_traits>
544 #include <vector>
545 #include <typeinfo>
546 #include <functional>
547 #include <iostream>
548 #include <algorithm>
549 #include <stdexcept>
550 #include <iterator>
551 #include <initializer_list>
552 
553 
554 
555 #ifdef XAOD_STANDALONE
556 # ifndef SG_BASE
557 # define SG_BASE(A, B) class ATHCONTAINERS_DUMMY
558 # endif // not SG_BASE
559 # ifndef SG_BASES1
560 # define SG_BASES1(A, B) class ATHCONTAINERS_DUMMY
561 # endif // not SG_BASES1
562 # ifndef SG_BASES2
563 # define SG_BASES2(A, B, C) class ATHCONTAINERS_DUMMY
564 # endif // not SG_BASES2
565 # ifndef SG_BASES3
566 # define SG_BASES3(A, B, C, D) class ATHCONTAINERS_DUMMY
567 # endif // not SG_BASES3
568 # ifndef SG_BASES4
569 # define SG_BASES4(A, B, C, D, E) class ATHCONTAINERS_DUMMY
570 # endif // not SG_BASES4
571 # ifndef SG_VIRTUAL
572 # define SG_VIRTUAL(X) X
573 # endif // not SG_VIRTUAL
574 #else
575 # include "AthenaKernel/BaseInfo.h"
576 #endif
577 
578 
579 // Forward declarations.
581 template <class T, class BASE> class DataVector;
583 
584 
585 namespace DataVector_detail {
586 
587 
588 // These are the intermediate classes from which @c DataVector derives
589 // in the case of multiple or virtual derivation. The actual
590 // definitions are in the @c icc file. They have the following
591 // properties:
592 // - They derive from those of @c B1, @c B2, and @c B3 that are not
593 // @c NoBase.
594 // - They perform (static) checking to ensure that there's a unique
595 // base class in the hierarchy.
596 // - They make the following types available from the base classes:
597 // - @c PtrVector
598 // - @c BaseContainer
599 // - @c size_type
600 // - @c difference_type
601 // - @c allocator_type
602 // - @c has_virtual is defined as @c true.
603 // - An override of @c dvlinfo_v is defined, to prevent ambiguities.
604 template <class B1,
605  class B2=DataModel_detail::NoBase,
607 
608 
611 template <class ITERATOR, class T>
613  std::enable_if_t<std::is_convertible_v<typename std::iterator_traits<ITERATOR>::value_type, T*>, bool>;
614 
615 template <class ITERATOR, class T>
617  std::enable_if_t<std::is_convertible_v<typename std::iterator_traits<ITERATOR>::value_type, std::unique_ptr<T> >, bool>;
618 
619 
620 } // namespace DataVector_detail
621 
622 
623 
632 template <class T>
634 {
636 };
637 
638 
648 #define DATAVECTOR_BASE(T, BASE) \
649 DATAVECTOR_BASE_FWD(T, BASE); \
650 template struct DataVector_detail::DVLEltBaseInit<T>
651 
652 
657 #define DATAVECTOR_BASE_FWD(T, BASE) \
658 template <> struct DataVectorBase<T> \
659 { typedef DataVector<BASE> Base; }; \
660 SG_BASE(DataVector<T>, DataVector<BASE>)
661 
662 
672 #define DATAVECTOR_VIRTBASES1(T, B1) \
673 DATAVECTOR_VIRTBASES1_FWD(T, B1); \
674 template struct DataVector_detail::DVLEltBaseInit<T>
675 
676 
677 
682 #define DATAVECTOR_VIRTBASES1_FWD(T, B1) \
683 template <> struct DataVectorBase<T> \
684 { typedef DataVector_detail::VirtBases<B1> Base; }; \
685 SG_BASES1(DataVector<T>, SG_VIRTUAL(DataVector<B1>))
686 
687 
688 
698 #define DATAVECTOR_VIRTBASES2(T, B1, B2) \
699 DATAVECTOR_VIRTBASES2_FWD(T, B1, B2); \
700 template struct DataVector_detail::DVLEltBaseInit<T>
701 
702 
707 #define DATAVECTOR_VIRTBASES2_FWD(T, B1, B2) \
708 template <> struct DataVectorBase<T> \
709 { typedef DataVector_detail::VirtBases<B1, B2> Base; }; \
710 SG_BASES2(DataVector<T>, SG_VIRTUAL(DataVector<B1>), \
711  SG_VIRTUAL(DataVector<B2>))
712 
713 
723 #define DATAVECTOR_VIRTBASES3(T, B1, B2, B3) \
724 DATAVECTOR_VIRTBASES3_FWD(T, B1, B2, B3); \
725 template struct DataVector_detail::DVLEltBaseInit<T>
726 
727 
732 #define DATAVECTOR_VIRTBASES3_FWD(T, B1, B2, B3) \
733 template <> struct DataVectorBase<T> \
734 { typedef DataVector_detail::VirtBases<B1, B2, B3> Base; }; \
735 SG_BASES3(DataVector<T>, SG_VIRTUAL(DataVector<B1>), \
736  SG_VIRTUAL(DataVector<B2>), \
737  SG_VIRTUAL(DataVector<B3>))
738 
739 
749 #define DATAVECTOR_VIRTBASES4(T, B1, B2, B3, B4) \
750 DATAVECTOR_VIRTBASES4_FWD(T, B1, B2, B3, B4); \
751 template struct DataVector_detail::DVLEltBaseInit<T>
752 
753 
758 #define DATAVECTOR_VIRTBASES4_FWD(T, B1, B2, B3, B4) \
759 template <> struct DataVectorBase<T> \
760 { typedef DataVector_detail::VirtBases<B1, B2, B3, B4> Base; }; \
761 SG_BASES4(DataVector<T>, SG_VIRTUAL(DataVector<B1>), \
762  SG_VIRTUAL(DataVector<B2>), \
763  SG_VIRTUAL(DataVector<B3>), \
764  SG_VIRTUAL(DataVector<B4>))
765 
766 
773 #define DATAVECTOR_BASE_FIN(T, B) \
774 template struct DataVector_detail::DVLEltBaseInit<T>
775 
776 
777 template <class DV> class ConstDataVector;
778 template <class DV> void test2_assignelement1();
779 template <class DV> void test2_assignelement1a();
780 template <class DV> void test2_assignelement2();
781 
782 
792 template <class T, class BASE = typename DataVectorBase<T>::Base>
793 class DataVector : public BASE
794 {
795 public:
796  typedef BASE DataVector_BASE;
797  typedef BASE DVL_BASE;
798 
801  static const bool has_virtual = BASE::has_virtual;
802 
805  typedef typename BASE::PtrVector PtrVector;
806  typedef typename BASE::PtrVector BaseContainer;
807 
808 
809 public:
810  // Standard types required for the container interface.
811  typedef T*& reference;
812  typedef T* const & const_reference;
813  typedef typename BASE::size_type size_type;
814  typedef typename BASE::difference_type difference_type;
815  typedef T* value_type;
816  typedef typename BASE::allocator_type allocator_type;
817  typedef T** pointer;
818  typedef T* const * const_pointer;
819 
820  typedef const T* const_value_type;
821 
825 
828  typedef std::unique_ptr<base_value_type> unique_type;
829 
833 
834 
838 
842 
843 
845  typedef typename std::reverse_iterator<const_iterator>
847 
850  typedef typename std::reverse_iterator<iterator>
852 
854 
855 
856  using Deleter = typename BASE::Deleter;
857 
859  static constexpr bool must_own = BASE::must_own;
860 
861 
862  //========================================================================
865 
866 
876  SG::IndexTrackingPolicy trackIndices =
878 
879 
892  explicit DataVector(size_type n, /* value_type pElem = 0,*/
894  SG::IndexTrackingPolicy trackIndices =
896 
897 
904  // The copy constructor for derived classes is deliberately omitted,
905  // as otherwise we get warnings about not calling the copy constructors
906  // for base classes, which are problematic when we have virtual
907  // inheritance. Most of what needs doing is done in the base class anyway,
908  // except for setting @c m_isMostDerived. We arrange for these flags
909  // to all get set to false; they'll get set correctly when
910  // @c testInsert is called.
911  // Need this to get the default copy ctor defined when a move
912  // ctor is also present.
913  DataVector (const DataVector&) = default;
914 
915 
922  DataVector (DataVector&& rhs) noexcept;
923 
924 
937  template <class InputIterator>
938  DataVector(InputIterator first,
939  InputIterator last,
942  SG::IAuxStore* store = 0);
943 
944 
955  DataVector(std::initializer_list<value_type> l,
958  SG::IAuxStore* store = 0);
959 
960 
974 
975 
982  DataVector& operator= (DataVector&& rhs) noexcept;
983 
984 
995  DataVector& operator= (std::initializer_list<value_type> l);
996 
997 
1007  template <class InputIterator>
1008  void assign(InputIterator first, InputIterator last);
1009 
1010 
1018  void assign(std::initializer_list<value_type> l);
1019 
1020 
1021  // Destructor is inherited.
1022 
1023 
1025  //========================================================================
1028 
1029 
1037  size_type size() const noexcept;
1038 
1039 
1044  // This is inherited from the base class.
1045 
1046 
1059 
1060 
1066  // This is inherited from the base class.
1067 
1068 
1073  // This is inherited from the base class.
1074 
1075 
1083 
1084 
1090  // This is inherited from the base class.
1091 
1092 
1094  //========================================================================
1097 
1098 
1107  const T* operator[] (size_type n) const;
1108 
1109 
1119 
1120 
1130  ElementProxy operator[] (size_type n);
1131 
1132 
1142 
1143 
1154 
1155 
1164 
1165 
1174 
1175 
1185 
1186 
1196 
1197 
1199  //========================================================================
1202 
1203 
1213 
1214 
1224 
1225 
1235  iterator begin() noexcept;
1236 
1237 
1247  iterator end() noexcept;
1248 
1249 
1259 
1260 
1270 
1271 
1282 
1283 
1294 
1295 
1305 
1306 
1316 
1317 
1327 
1328 
1338 
1339 
1341  //========================================================================
1344 
1345 
1359 
1360 
1372  value_type push_back(std::unique_ptr<base_value_type> pElem);
1373 
1374 
1390 
1391 
1405 
1406 
1418  iterator insert(iterator position, std::unique_ptr<base_value_type> pElem);
1419 
1420 
1437 
1438 
1454  template <class InputIterator,
1455  DataVector_detail::enable_if_ptr_itr<InputIterator, T> = true>
1456  void insert(iterator position, InputIterator first, InputIterator last);
1457 
1458 
1474  template <class InputIterator,
1475  DataVector_detail::enable_if_up_itr<InputIterator, T> = true>
1476  void insert(iterator position, InputIterator first, InputIterator last);
1477 
1478 
1490  void insert(iterator position, std::initializer_list<value_type> l);
1491 
1492 
1519 
1520 
1522  //========================================================================
1525 
1526 
1536 
1537 
1550 
1551 
1559  void pop_back();
1560 
1561 
1570  void clear();
1571 
1572 
1574  //========================================================================
1577 
1578 
1589  void swap(DataVector& rhs);
1590 
1591 
1597  static void iter_swap (iterator a, iterator b);
1598 
1599 
1605  void sort();
1606 
1607 
1612  template <class COMPARE>
1613  void sort(COMPARE comp);
1614 
1615 
1616 
1618  //========================================================================
1621 
1622 
1641 
1642 
1660  void swapElement(iterator pos, value_type newElem, reference oldElem);
1661 
1662 
1683  std::unique_ptr<base_value_type> newElem,
1684  std::unique_ptr<base_value_type>& oldElem);
1685 
1686 
1707  std::unique_ptr<base_value_type> newElem,
1708  std::unique_ptr<base_value_type>& oldElem);
1709 
1710 
1711 public:
1720  // This is inherited from the base class.
1721 
1722 
1727  // This is inherited from the base class.
1728 
1729 
1741 
1742 
1755  SG::IndexTrackingPolicy trackIndices);
1756 
1757 
1769  void clear (std::unique_ptr<Deleter> deleter);
1770 
1771 
1777  static const DataModel_detail::DVLInfoBase& dvlinfo();
1778 
1779 
1785  virtual const DataModel_detail::DVLInfoBase& dvlinfo_v() const;
1786 
1787 
1799  static
1800  int baseOffset (const std::type_info& ti);
1801 
1802 
1813  const SG::AuxVectorBase& auxbase() const;
1814 
1815 
1817  //========================================================================
1818 
1819 
1820  // Doxygen trick. We want DataVector<T> to show the complete interface,
1821  // including inherited methods. Normally, doxygen would do this.
1822  // But it's not smart enough to figure out our inheritance relationships.
1823  // We can add a function with `fn', but doxygen won't actually
1824  // generate the documentation unless it also sees the declaration.
1825  // So here are declarations which should be visible to doxygen
1826  // but not to C++.
1827 #ifndef __cplusplus
1831  [[nodiscard]] bool empty() const noexcept;
1833  void pop_back();
1834  void clear();
1838  SG::IndexTrackingPolicy trackIndices = SG::DEFAULT_TRACK_INDICES);
1839 #endif // not __cplusplus
1840 
1841 
1844 
1845 
1856  static
1857  int baseOffset1 (const char* p, const DataVector& dv,
1858  const std::type_info& ti);
1859 
1860 
1872 
1873 
1884  void testInsert (const char* op);
1885 
1886 
1897  void testInsertOol (const char* op);
1898 
1899 
1900 private:
1902  template <class DV>
1903  friend class ConstDataVector;
1904  template <class DV, class ALLOC>
1905  friend class DataVectorWithAlloc;
1906  friend void test2_assignelement1a<DataVector>();
1907  friend void test2_assignelement1<DataVector>();
1908  friend void test2_assignelement2<DataVector>();
1909 
1910 
1920 
1921 
1931  std::unique_ptr<base_value_type> newElem);
1932 
1933 
1943  typename BaseContainer::value_type newElem);
1944 
1945 
1969  void shift (size_t pos, ptrdiff_t offs);
1970 
1971 
1972 public:
1973  // Make this public so we can call it from DVCollectionProxy.
1982  static
1983  const T* do_cast (const typename PtrVector::value_type p);
1984 
1985 
1994  static
1995  T* do_cast_nc (typename PtrVector::value_type p);
1996 
1997 
1998 private:
2009  virtual const std::type_info& dv_typeid() const;
2010 
2011 
2012 protected:
2019 
2020 
2028  virtual void setMostDerived();
2029 
2030 
2031 private:
2033 
2034 
2039 
2040 
2041  typedef typename
2042  ROOT_SELECTION_NS::DataVector<T, DataVector_BASE>::self self;
2043 };
2044 
2045 
2046 template <class T, class BASE>
2048 
2058 template <class T>
2060  : public SG::AuxVectorBase
2061 {
2062 public:
2065 
2067  typedef std::true_type isSequence;
2068 
2071  typedef std::vector<T*> PtrVector;
2072  typedef std::vector<T*> BaseContainer;
2073 
2078  static const bool has_virtual = false;
2079 
2080  // Standard types required for the container interface.
2081  typedef T*& reference;
2082  typedef T* const & const_reference;
2083  typedef typename PtrVector::size_type size_type;
2084  typedef typename PtrVector::difference_type difference_type;
2085  typedef T* value_type;
2086  typedef typename PtrVector::allocator_type allocator_type;
2087  typedef T** pointer;
2088  typedef T* const * const_pointer;
2089 
2090  typedef const T* const_value_type;
2091 
2095 
2098  typedef std::unique_ptr<base_value_type> unique_type;
2099 
2103 
2104 
2108 
2112 
2114  // Note: we can't just use the underlying PtrVector::const_reverse_iterator
2115  // here; otherwise, const_reverse_iterator won't be convertable to
2116  // reverse_iterator.
2117  typedef typename std::reverse_iterator<const_iterator>
2119 
2122  typedef typename std::reverse_iterator<iterator>
2124 
2126 
2127 
2131  class Deleter
2132  {
2133  public:
2136  virtual ~Deleter() = default;
2137  virtual void doDelete (value_type p) = 0;
2138  virtual void doDelete (typename PtrVector::iterator first,
2139  typename PtrVector::iterator last) = 0;
2140  };
2141 
2142 
2144  static constexpr bool must_own = false;
2145 
2146 
2147  //========================================================================
2150 
2151 
2161  SG::IndexTrackingPolicy trackIndices =
2163 
2164 
2177  explicit DataVector
2178  (size_type n, /* value_type pElem = 0,*/
2181 
2182 
2189  DataVector(const DataVector& rhs);
2190 
2191 
2198  DataVector (DataVector&& rhs) noexcept;
2199 
2200 
2213  template <class InputIterator>
2214  DataVector(InputIterator first, InputIterator last,
2217  SG::IAuxStore* store = 0);
2218 
2219 
2230  DataVector(std::initializer_list<value_type> l,
2233  SG::IAuxStore* store = 0);
2234 
2235 
2249 
2250 
2258 
2259 
2270  DataVector& operator= (std::initializer_list<value_type> l);
2271 
2272 
2282  template <class InputIterator>
2283  void assign(InputIterator first, InputIterator last);
2284 
2285 
2294  void assign(std::initializer_list<value_type> l);
2295 
2296 
2306  virtual ~DataVector();
2307 
2308 
2310  //========================================================================
2313 
2314 
2318  size_type size() const noexcept;
2319 
2320 
2327  virtual size_type size_v() const;
2328 
2329 
2334 
2335 
2347 
2348 
2354 
2355 
2363  virtual size_type capacity_v() const;
2364 
2365 
2369  [[nodiscard]] bool empty() const noexcept;
2370 
2371 
2378 
2379 
2386 
2387 
2389  //========================================================================
2392 
2393 
2402  const T* operator[] (size_type n) const;
2403 
2404 
2414 
2415 
2425  ElementProxy operator[] (size_type n);
2426 
2427 
2437 
2438 
2449 
2450 
2459 
2460 
2469 
2470 
2480 
2481 
2491 
2492 
2494  //========================================================================
2497 
2498 
2508 
2509 
2519 
2520 
2530  iterator begin() noexcept;
2531 
2532 
2542  iterator end() noexcept;
2543 
2544 
2554 
2555 
2565 
2566 
2577 
2578 
2589 
2599 
2600 
2610 
2611 
2621 
2622 
2632 
2633 
2635  //========================================================================
2638 
2639 
2653 
2654 
2666  value_type push_back(std::unique_ptr<base_value_type> pElem);
2667 
2668 
2684 
2685 
2699 
2700 
2712  iterator insert(iterator position, std::unique_ptr<base_value_type> pElem);
2713 
2714 
2731 
2732 
2748  template <class InputIterator,
2749  DataVector_detail::enable_if_ptr_itr<InputIterator, T> = true>
2750  void insert(iterator position, InputIterator first, InputIterator last);
2751 
2752 
2768  template <class InputIterator,
2769  DataVector_detail::enable_if_up_itr<InputIterator, T> = true>
2770  void insert(iterator position, InputIterator first, InputIterator last);
2771 
2772 
2784  void insert(iterator position, std::initializer_list<value_type> l);
2785 
2786 
2813 
2814 
2816  //========================================================================
2819 
2820 
2830 
2831 
2844 
2845 
2852  void pop_back();
2853 
2854 
2862  void clear();
2863 
2864 
2866  //========================================================================
2869 
2870 
2881  void swap(DataVector& rhs);
2882 
2883 
2889  static void iter_swap (iterator a, iterator b);
2890 
2891 
2897  void sort();
2898 
2899 
2905  template <class COMPARE>
2906  void sort(COMPARE comp);
2907 
2908 
2910  //========================================================================
2913 
2914 
2933 
2934 
2952  void swapElement(iterator pos, value_type newElem, reference oldElem);
2953 
2954 
2975  std::unique_ptr<base_value_type> newElem,
2976  std::unique_ptr<base_value_type>& oldElem);
2977 
2978 
2998  std::unique_ptr<base_value_type> newElem,
2999  std::unique_ptr<base_value_type>& oldElem);
3000 
3001 
3002 public:
3011 
3012 
3017 
3018 
3029 
3030 
3042  SG::IndexTrackingPolicy trackIndices);
3043 
3044 
3056  void clear (std::unique_ptr<Deleter> deleter);
3057 
3058 
3064  static const DataModel_detail::DVLInfoBase& dvlinfo();
3065 
3066 
3072  virtual const DataModel_detail::DVLInfoBase& dvlinfo_v() const;
3073 
3074 
3086  static
3087  int baseOffset (const std::type_info& ti);
3088 
3089 
3096  const SG::AuxVectorBase& auxbase() const;
3097 
3098 
3100  //========================================================================
3103 
3104 
3115  static
3117  const std::type_info& ti);
3118 
3119 
3131 
3132 
3143  void testInsert (const char* op);
3144 
3145 
3156  void testInsertOol (const char* op);
3157 
3158 
3159 private:
3160  friend class DataModel_detail::ElementProxy<DataVector>;
3161  template <class DV>
3162  friend class ConstDataVector;
3163  template <class DV, class ALLOC>
3164  friend class DataVectorWithAlloc;
3168 
3169 
3179 
3180 
3190  std::unique_ptr<base_value_type> newElem);
3191 
3192 
3202  typename BaseContainer::value_type newElem);
3203 
3204 
3228  void shift (size_t pos, ptrdiff_t offs);
3229 
3230 
3231 public:
3232  // Make this public so we can call it from DVCollectionProxy.
3240  static
3242 
3243 
3251  static
3253 
3254 
3255 private:
3266  virtual const std::type_info& dv_typeid() const;
3267 
3268 
3269 protected:
3280  erase_base(typename PtrVector::iterator position);
3281 
3282 
3296  typename PtrVector::iterator last);
3297 
3298 
3303  void doDelete (value_type p);
3304 
3305 
3312  typename PtrVector::iterator last);
3313 
3314 
3315 protected:
3319 
3321  PtrVector m_pCont;
3322 
3325  // This should really be a unique_ptr --- but that causes problems
3326  // with ROOT persistency (even though this is tagged as transient).
3327  Deleter* m_deleter = nullptr;
3328 
3329 
3336 
3337 
3345  virtual void setMostDerived();
3346 
3347 
3348 private:
3350 
3351 
3355  SG::IsMostDerivedFlag m_isMostDerived;
3356 
3357 
3358  typedef typename
3360 };
3361 
3362 template <class T>
3364 
3365 
3376 template <class T>
3377 bool operator== (const DataVector<T>& a, const DataVector<T>& b);
3378 
3379 
3381 template <class T>
3382 bool operator!= (const DataVector<T>& a, const DataVector<T>& b);
3383 
3384 
3396 template <class T>
3397 bool operator< (const DataVector<T>& a, const DataVector<T>& b);
3398 
3399 
3401 template <class T>
3402 bool operator> (const DataVector<T>& a, const DataVector<T>& b);
3403 
3404 
3406 template <class T>
3407 bool operator<= (const DataVector<T>& a, const DataVector<T>& b);
3408 
3409 
3411 template <class T>
3412 bool operator>= (const DataVector<T>& a, const DataVector<T>& b);
3413 
3414 
3416 template <class T>
3418 
3419 
3421 
3422 template< class T, class BASE >
3423 class DataVector : KeepFirstTemplateArguments< 1 >, SelectNoInstance
3424 {
3425 
3426 public:
3429 #ifndef XAOD_STANDALONE
3430  //MN: this causes massive dictionary duplication. Disabling for now.
3432  // ROOT_SELECTION_NS::MemberAttributes< kAutoSelected > m_pCont;
3433 #endif
3434  ROOT_SELECTION_NS::MemberAttributes< kTransient > m_isMostDerived;
3436  ROOT_SELECTION_NS::MemberAttributes< kTransient > m_deleter;
3437 
3440  ROOT_SELECTION_NS::MemberAttributes< kTransient > m_ownPolicy;
3441 
3442 };
3443 
3445 
3446 
3447 #include "AthContainers/ClassName.h"
3448 
3449 
3456 template <class T>
3458 {
3459 public:
3460  static std::string name();
3461 };
3462 
3463 
3464 #ifndef XAOD_STANDALONE
3465 
3466 
3469 #include "AthenaKernel/TopBase.h"
3470 
3471 
3472 namespace SG {
3473 
3474 
3481 template <class T, class U>
3483 {
3485  static void init() { DataVector<T>::dvlinfo(); }
3486 };
3487 
3488 
3495 template <class T>
3498 };
3499 template <class T>
3502 };
3503 
3504 
3505 } // namespace SG
3506 
3507 
3508 #endif
3509 
3510 
3512 
3513 
3514 #if 0
3515 //===================================================================
3516 // Code to try to make the DATAVECTOR_BASES definitions automatically
3517 // based on SG_BASES. Still have to use one macro, DATAVECTOR_BASES_FROM_SG.
3518 // Currently missing the part that would declare the DataVector relations
3519 // to SG. Not sure how useful this will be; don't bother trying to
3520 // finish it now.
3521 #include "boost/mpl/if.hpp"
3522 #include "boost/mpl/and.hpp"
3523 #include "boost/mpl/equal_to.hpp"
3524 #define if_ boost::mpl::if_
3525 #define and_ boost::mpl::and_
3526 #define equal_to boost::mpl::equal_to
3527 #define true_ boost::mpl::true_
3528 #define false_ boost::mpl::false_
3529 template <class U> struct not_virtual { typedef true_ type; };
3530 template <class U> struct not_virtual<SG::Virtual<U> > { typedef false_ type; };
3531 template <class U> struct clean_type { typedef U type; };
3532 template <> struct clean_type<SG::NoBase>
3533 { typedef DataModel_detail::NoBase type; };
3534 template <class U> struct clean_type<SG::Virtual<U> >
3535 { typedef typename clean_type<U>::type type; };
3536 template <class T>
3537 struct bases_from_sg
3538 {
3539  typedef typename
3540  if_<equal_to<typename SG::Bases<T>::Base1, SG::NoBase>,
3542  if_<and_<equal_to<typename SG::Bases<T>::Base1, SG::NoBase>,
3543  not_virtual<typename SG::Bases<T>::Base2> >,
3544  typename SG::Bases<T>::Base1,
3546  <clean_type<typename SG::Bases<T>::Base1>,
3547  clean_type<typename SG::Bases<T>::Base2>,
3548  clean_type<typename SG::Bases<T>::Base3>,
3549  clean_type<typename SG::Bases<T>::Base4> >
3550  > >::type type;
3551 };
3552 #undef if_
3553 #undef and_
3554 #undef equal_to
3555 #undef true_
3556 #undef false_
3557 
3558 #define DATAVECTOR_BASES_FROM_SG(T) \
3559 template <> struct DataVectorBase<T> \
3560 { typedef bases_from_sg<T>::type Base; };
3561 //===================================================================
3562 #endif
3563 
3564 
3565 #endif // not ATHCONTAINERS_DATAVECTOR_H
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
DataVector::dv_typeid
virtual const std::type_info & dv_typeid() const
Find the most-derived DataVector class in the hierarchy.
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
DataVector< T, DataModel_detail::NoBase >::reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
Standard reverse_iterator.
Definition: DataVector.h:2123
plotting.yearwise_luminosity_vs_mu.comp
comp
Definition: yearwise_luminosity_vs_mu.py:23
store
StoreGateSvc * store
Definition: fbtTestBasics.cxx:71
DataVector::DataVector
DataVector(const DataVector &)=default
Copy constructor.
DataVector::const_reference
T *const & const_reference
Definition: DataVector.h:812
SG::DataBucketTrait< DataVector< T >, U >::type
SG::DVLDataBucket< U > type
Definition: DataVector.h:3484
DataVector< T, DataModel_detail::NoBase >::iterator
DataModel_detail::iterator< DataVector > iterator
Standard iterator.
Definition: DataVector.h:2111
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
fitman.sz
sz
Definition: fitman.py:527
DataVector::m_ownPolicy
ROOT_SELECTION_NS::MemberAttributes< kTransient > m_ownPolicy
We do not want to save this.
Definition: DataVector.h:3440
PlotCalibFromCool.dv
dv
Definition: PlotCalibFromCool.py:762
SG::IsMostDerivedFlag
Holder for the is-most-derived flag.
Definition: IsMostDerivedFlag.h:34
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
DataVector< T, DataModel_detail::NoBase >::reference
T *& reference
Definition: DataVector.h:2081
DataVector::emplace_back
value_type emplace_back(value_type pElem)
Add an element to the end of the collection.
DataVector< T, DataModel_detail::NoBase >::self
ROOT_SELECTION_NS::DataVector< T, DataVector_BASE >::self self
Definition: DataVector.h:3359
DataVector::iterator
DataModel_detail::iterator< DataVector > iterator
Standard iterator.
Definition: DataVector.h:841
DataVector< T, DataModel_detail::NoBase >::DataVector
DataVector(DataVector &&rhs) noexcept
Move constructor.
DataVector< T, DataModel_detail::NoBase >::const_reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Standard const_reverse_iterator.
Definition: DataVector.h:2118
SG::DataBucketTrait< DataVector< T >, U >::init
static void init()
Definition: DataVector.h:3485
DataVector::const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition: DataVector.h:837
DataVector< T, DataModel_detail::NoBase >::Deleter::PtrVector
DataVector::PtrVector PtrVector
Definition: DataVector.h:2135
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
test2_assignelement2
void test2_assignelement2()
IndexTrackingPolicy.h
Describes the possible index tracking policies.
DataVector::rend
const_reverse_iterator rend() const noexcept
Return a const_reverse_iterator pointing at the beginning of the collection.
DataVectorBase
Derivation information for DataVector.
Definition: DataVector.h:634
index
Definition: index.py:1
DataVector::m_deleter
ROOT_SELECTION_NS::MemberAttributes< kTransient > m_deleter
Definition: DataVector.h:3436
DataVector::do_cast_nc
static T * do_cast_nc(typename PtrVector::value_type p)
Helper to shorten calls to DataModel_detail::DVLCast.
DataVectorWithAlloc
DataVector using a custom allocator for the elements.
Definition: DataVectorWithAlloc.h:67
exceptions.h
Exceptions that can be thrown from AthContainers.
taskman.template
dictionary template
Definition: taskman.py:317
DataVector< T, DataModel_detail::NoBase >::pointer
T ** pointer
Definition: DataVector.h:2087
DataVector< T, DataModel_detail::NoBase >::size
size_type size() const noexcept
Returns the number of elements in the collection.
DataVector::get
const T * get(size_type n) const
Access an element, as an rvalue.
DataVector::shift
void shift(size_t pos, ptrdiff_t offs)
Shift the auxiliary elements of the container.
DVLInfo.h
Holder to implement conversion copies for DataVector/DataList.
TrigL2Bphys
Definition: TrigL2Bphys.h:43
SG::DEFAULT_TRACK_INDICES
@ DEFAULT_TRACK_INDICES
Default value.
Definition: IndexTrackingPolicy.h:40
DataVectorWithAllocFwd.h
DataVector::cend
const_iterator cend() const noexcept
Return a const_iterator pointing past the end of the collection.
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
DataVector::testInsert
void testInsert(const char *op)
Test if we can insert; raise an exception if not.
DataVector::DVL_BASE
BASE DVL_BASE
Definition: DataVector.h:797
DataVector::assignBaseElement
void assignBaseElement(typename BaseContainer::iterator pos, typename BaseContainer::value_type newElem)
Handle element assignment from a base pointer.
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
DataVector< T, DataModel_detail::NoBase >::unique_type
std::unique_ptr< base_value_type > unique_type
Type of a unique_ptr that can be used to insert elements into this container.
Definition: DataVector.h:2098
DataVector::operator=
DataVector & operator=(const DataVector &rhs)
Assignment operator.
DataVector::swapElement
void swapElement(size_type index, value_type newElem, reference oldElem)
Swap one element out of the container.
test2_assignelement1a
void test2_assignelement1a()
AuxVectorBase.h
Manage index tracking and synchronization of auxiliary data.
SG::AuxVectorBase
Manage index tracking and synchronization of auxiliary data.
Definition: AuxVectorBase.h:98
DataVector::DataVector
DataVector(SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES)
Default constructor.
DVLDataBucket.h
A DataBucket specialized for DataVector/DataList.
protected
#define protected
Definition: DetDescrConditionsDict_dict_fixes.cxx:14
DataVector::PtrVector
BASE::PtrVector PtrVector
This is the type of the underlying std::vector (what stdcont returns).
Definition: DataVector.h:805
DataVector::setMostDerived
virtual void setMostDerived()
Set m_isMostDerived for this instance and clear it for all bases.
DataVector::auxbase
const SG::AuxVectorBase & auxbase() const
Convert to AuxVectorBase.
DataVector< T, DataModel_detail::NoBase >::Deleter::doDelete
virtual void doDelete(value_type p)=0
DataVector::DataVector
DataVector(size_type n, SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES)
Sized constructor.
SG::OwnershipPolicy
OwnershipPolicy
describes the possible element ownership policies (see e.g. DataVector)
Definition: OwnershipPolicy.h:16
DVL_iter_swap.h
Specializations of iter_swap for DataVector/DataList.
DataVector::const_value_type
const T * const_value_type
Definition: DataVector.h:820
DataVector::assign
void assign(InputIterator first, InputIterator last)
Assign from iterators.
DataVector::has_virtual
static const bool has_virtual
This is true for any DataVector class if we need to use virtual derivation to get to the base DataVec...
Definition: DataVector.h:801
DataVector::reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
Standard reverse_iterator.
Definition: DataVector.h:851
test2_assignelement1
void test2_assignelement1()
DataVector::base_value_type
T base_value_type
The T value used as the template parameter.
Definition: DataVector.h:824
DataVector< T, DataModel_detail::NoBase >::DataVector
DataVector(SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES)
Default constructor.
DataVector::baseOffset
static int baseOffset(const std::type_info &ti)
Return the offset of a base DataVector class.
SG::TopBase
Calculate topmost base accessible via SG_BASES.
Definition: TopBase.h:38
DataVector.icc
DataVector::test2_assignelement1
friend void test2_assignelement1()
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
DataVector< T, DataModel_detail::NoBase >::base_data_vector
DataVector base_data_vector
Definition: DataVector.h:2125
DataVector< T, DataModel_detail::NoBase >::Deleter::value_type
DataVector::value_type value_type
Definition: DataVector.h:2134
DataVector::reference
T *& reference
Definition: DataVector.h:811
DataVector< T, DataModel_detail::NoBase >::DataVector
DataVector(InputIterator first, InputIterator last, SG::OwnershipPolicy ownPolicy=SG::VIEW_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES, SG::IAuxStore *store=0)
Constructor from iterators.
DataModel_detail::NoBase
Marker for the base of the inheritance hierarchy.
Definition: DVLNoBase.h:32
ClassName< DataVector< T > >::name
static std::string name()
SG::TopBase< DataVector< T, DataModel_detail::NoBase > >::type
DataVector< T, DataModel_detail::NoBase > type
Definition: DataVector.h:3501
DataVector_detail::enable_if_ptr_itr
std::enable_if_t< std::is_convertible_v< typename std::iterator_traits< ITERATOR >::value_type, T * >, bool > enable_if_ptr_itr
Helpers for enabling the correct overloads for insert() methods taking a range, allowing us to handle...
Definition: DataVector.h:613
DataModel_detail::iterator
(Non-const) Iterator class for DataVector/DataList.
Definition: DVLIterator.h:184
SG::OWN_ELEMENTS
@ OWN_ELEMENTS
this data object owns its elements
Definition: OwnershipPolicy.h:17
BaseInfo.h
Provide an interface for finding inheritance information at run time.
TopBase.h
Calculate topmost accessible base accessible via SG_BASES.
beamspotman.n
n
Definition: beamspotman.py:731
ClassName
An interface for getting the name of a class as a string.
Definition: AthenaKernel/AthenaKernel/ClassName.h:33
DataVector< T, DataModel_detail::NoBase >::DVL_BASE
DataModel_detail::NoBase DVL_BASE
Definition: DataVector.h:2064
DataVector< T, DataModel_detail::NoBase >
Base specialization for DataVector<T>.
Definition: DataVector.h:2061
DataBucketTraitFwd.h
SG::Bases
Traits class to hold derivation information.
Definition: Bases.h:110
DVLNoBase.h
Marker for the base of the inheritance hierarchy.
DataVector::front
const T * front() const
Access the first element in the collection as an rvalue.
SG::NoBase
Marker to indicate a nonexistent base class.
Definition: Bases.h:63
DataVector::swap
void swap(DataVector &rhs)
Swap this collection with another.
DataVector< T, DataModel_detail::NoBase >::Deleter::doDelete
virtual void doDelete(typename PtrVector::iterator first, typename PtrVector::iterator last)=0
DataVector::assign
void assign(std::initializer_list< value_type > l)
DataVector::const_pointer
T *const * const_pointer
Definition: DataVector.h:818
DataVector::insert
iterator insert(iterator position, value_type pElem)
Add a new element to the collection.
DataVector::m_isMostDerived
SG::IsMostDerivedFlag m_isMostDerived
This flag is true if this DV instance is the most-derived one.
Definition: DataVector.h:2038
DataVector::allocator_type
BASE::allocator_type allocator_type
Definition: DataVector.h:816
DataVector::assignElement
void assignElement(typename BaseContainer::iterator pos, std::unique_ptr< base_value_type > newElem)
Handle element assignment.
DataVector< T, DataModel_detail::NoBase >::DataVector
DataVector(size_type n, SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES)
Sized constructor.
DataVector::crend
const_reverse_iterator crend() const noexcept
Return a const_reverse_iterator pointing at the beginning of the collection.
DataVector< T, DataModel_detail::NoBase >::difference_type
PtrVector::difference_type difference_type
Definition: DataVector.h:2084
OwnershipPolicy.h
DataVector< T, DataModel_detail::NoBase >::const_reference
T *const & const_reference
Definition: DataVector.h:2082
DataVector::back
const T * back() const
Access the last element in the collection as an rvalue.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
DataVector< T, DataModel_detail::NoBase >::const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition: DataVector.h:2107
DataVector::rbegin
const_reverse_iterator rbegin() const noexcept
Return a const_reverse_iterator pointing past the end of the collection.
DataVector::insertMove
void insertMove(iterator position, DataVector &other)
Insert the contents of another DataVector, with auxiliary data copied via move semantics.
DataVector::clear
void clear()
Erase all the elements in the collection.
DataVector::DataVector
DataVector(DataVector &&rhs) noexcept
Move constructor.
DataVector::capacity
size_type capacity() const noexcept
Returns the total number of elements that the collection can hold before needing to allocate more mem...
DataVector< T, DataModel_detail::NoBase >::DataVector
DataVector(const DataVector &rhs)
Copy constructor.
DataModel_detail
Definition: CompareAndPrint.h:15
DataVector::unique_type
std::unique_ptr< base_value_type > unique_type
Type of a unique_ptr that can be used to insert elements into this container.
Definition: DataVector.h:828
DataVector_detail
Definition: DataVector.h:585
ClassName.h
DataVector::testInsertOol
void testInsertOol(const char *op)
Test if we can insert; raise an exception if not.
DataVector_detail::VirtBases
Definition: DataVector.h:606
DataVector::base_data_vector
DataVector base_data_vector
Definition: DataVector.h:853
DataVector::resize
void resize(size_type sz)
Resizes the collection to the specified number of elements.
WriteBchToCool.beg
beg
Definition: WriteBchToCool.py:69
private
#define private
Definition: DetDescrConditionsDict_dict_fixes.cxx:13
DataVector::const_reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Standard const_reverse_iterator.
Definition: DataVector.h:846
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
DataVector::BaseContainer
BASE::PtrVector BaseContainer
Definition: DataVector.h:806
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DataVector::do_cast
static const T * do_cast(const typename PtrVector::value_type p)
Helper to shorten calls to DataModel_detail::DVLCast.
DataVector< T, DataModel_detail::NoBase >::DataVector
DataVector(std::initializer_list< value_type > l, SG::OwnershipPolicy ownPolicy=SG::VIEW_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES, SG::IAuxStore *store=0)
Constructor from iterators.
DataVector< T, DataModel_detail::NoBase >::BaseContainer
std::vector< T * > BaseContainer
Definition: DataVector.h:2072
python.Dumpers.typename
def typename(t)
Definition: Dumpers.py:194
DataVector::DataVector
DataVector(InputIterator first, InputIterator last, SG::OwnershipPolicy ownPolicy=SG::VIEW_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES, SG::IAuxStore *store=0)
Constructor from iterators.
DataVector< T, DataModel_detail::NoBase >::size_type
PtrVector::size_type size_type
Definition: DataVector.h:2083
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
DataVector< T, DataModel_detail::NoBase >::ElementProxy
DataModel_detail::ElementProxy< DataVector > ElementProxy
This type is used to proxy lvalue accesses to DataVector elements, in order to handle ownership.
Definition: DataVector.h:2102
DataVector< T, DataModel_detail::NoBase >::assign
void assign(InputIterator first, InputIterator last)
Assign from iterators.
SG::IAuxStore
Interface for non-const operations on an auxiliary store.
Definition: IAuxStore.h:48
DataVector< T, DataModel_detail::NoBase >::PtrVector
std::vector< T * > PtrVector
This is the type of the underlying std::vector (what stdcont returns).
Definition: DataVector.h:2071
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
DataVector::stdcont
const PtrVector & stdcont() const
Return the underlying std::vector of the container.
DataVector::sort
void sort()
Sort the container.
a
TList * a
Definition: liststreamerinfos.cxx:10
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
DataVector_detail::enable_if_up_itr
std::enable_if_t< std::is_convertible_v< typename std::iterator_traits< ITERATOR >::value_type, std::unique_ptr< T > >, bool > enable_if_up_itr
Definition: DataVector.h:617
SG::DVLDataBucket
A DataBucket specialized for DataVector/DataList.
Definition: DVLDataBucket.h:49
DataVector< T, DataModel_detail::NoBase >::assign
void assign(std::initializer_list< value_type > l)
Assign from an initializer list.
DataVector::clearMostDerived
void clearMostDerived()
Clear m_isMostDerived for this instance and for all bases.
DataVector< T, DataModel_detail::NoBase >::allocator_type
PtrVector::allocator_type allocator_type
Definition: DataVector.h:2086
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition: ConstDataVector.h:76
DataVector< T, DataModel_detail::NoBase >::base_value_type
T base_value_type
The T value used as the template parameter.
Definition: DataVector.h:2094
DataVector::pop_back
void pop_back()
Remove the last element from the collection.
DataVector::dvlinfo
static const DataModel_detail::DVLInfoBase & dvlinfo()
Return the DV/DL info struct for this class.
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DVLIterator.h
DeMoScan.first
bool first
Definition: DeMoScan.py:536
DataVector< T, DataModel_detail::NoBase >::Deleter::~Deleter
virtual ~Deleter()=default
DataVector< TrigL2Bphys >::Deleter
typename BASE::Deleter Deleter
Definition: DataVector.h:856
DataVector::ElementProxy
DataModel_detail::ElementProxy< DataVector > ElementProxy
This type is used to proxy lvalue accesses to DataVector elements, in order to handle ownership.
Definition: DataVector.h:832
DataVector< T, DataModel_detail::NoBase >::const_pointer
T *const * const_pointer
Definition: DataVector.h:2088
DataVector::must_own
static constexpr bool must_own
If true, then this type must own its contents.
Definition: DataVector.h:859
DVL_algorithms.h
Specializations of STL algorithms to work with DataVector/List.
DataVector::pointer
T ** pointer
Definition: DataVector.h:817
DataVector::ownPolicy
SG::OwnershipPolicy ownPolicy() const
Return the ownership policy setting for this container.
DataVector::resortAux
void resortAux(iterator beg, iterator end)
Reset indices / reorder aux data after elements have been permuted.
DataVector< T, DataModel_detail::NoBase >::~DataVector
virtual ~DataVector()
Destructor.
DataVector::cbegin
const_iterator cbegin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
DataVector::difference_type
BASE::difference_type difference_type
Definition: DataVector.h:814
DataVector::DataVector
DataVector(std::initializer_list< value_type > l, SG::OwnershipPolicy ownPolicy=SG::VIEW_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES, SG::IAuxStore *store=0)
Constructor from an initializer list.
DataVector::emplace
iterator emplace(iterator position, value_type pElem)
Add a new element to the collection.
DataVector::baseOffset1
static int baseOffset1(const char *p, const DataVector &dv, const std::type_info &ti)
Helper for baseOffset.
DataVector::iter_swap
static void iter_swap(iterator a, iterator b)
Swap the referents of two DataVector iterators.
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
DataVector::test2_assignelement2
friend void test2_assignelement2()
DataModel_detail::ElementProxy
Proxy for lvalue access to DataVector/DataList elements.
Definition: ElementProxy.h:26
DataVector::max_size
size_type max_size() const noexcept
Returns the size() of the largest possible collection.
DataVector::size_type
BASE::size_type size_type
Definition: DataVector.h:813
DataVector::erase
iterator erase(iterator position)
Remove element at a given position.
DataVector< T, DataModel_detail::NoBase >::DataVector_BASE
DataModel_detail::NoBase DataVector_BASE
Definition: DataVector.h:2063
SG::DataBucketTrait
Metafunction to find the proper DataBucket class for T.
Definition: DataBucketTraitFwd.h:30
IsMostDerivedFlag.h
Holder for the is-most-derived flag.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DataVector< T, DataModel_detail::NoBase >::value_type
T * value_type
Definition: DataVector.h:2085
DataVector::value_type
T * value_type
Definition: DataVector.h:815
DataVector< T, DataModel_detail::NoBase >::isSequence
std::true_type isSequence
Mark as a sequence, for DataLink / ElementLink.
Definition: DataVector.h:2067
SG::IndexTrackingPolicy
IndexTrackingPolicy
Definition: IndexTrackingPolicy.h:37
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
DVLCast.h
casting operations for DataVector/DataList.
DataVector::test2_assignelement1a
friend void test2_assignelement1a()
DataVector< T, DataModel_detail::NoBase >::const_value_type
const T * const_value_type
Definition: DataVector.h:2090
DataVectorBase::Base
DataModel_detail::NoBase Base
Definition: DataVector.h:635
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
DataVector::assignElement
void assignElement(typename BaseContainer::iterator pos, value_type newElem)
Handle element assignment.
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
ElementProxy.h
Proxy for lvalue access to DataVector/DataList elements.
DataVector::shrink_to_fit
void shrink_to_fit()
DataVector::crbegin
const_reverse_iterator crbegin() const noexcept
Return a const_reverse_iterator pointing past the end of the collection.
DataVector::DataVector_BASE
BASE DataVector_BASE
Definition: DataVector.h:796
DataVector::dvlinfo_v
virtual const DataModel_detail::DVLInfoBase & dvlinfo_v() const
Return the DV/DL info struct for this class.
SG::BaseList
Represent a list of base classes.
Definition: Bases.h:74