13#ifndef ATHCONTAINERS_ELPROXY_H
14#define ATHCONTAINERS_ELPROXY_H
21#include "AthLinks/DataLink.h"
22#include "AthLinks/ElementLink.h"
201#define ELPROXY(M) auto M() const { return this->m_cnv (m_pl).M(); }
205 ELPROXY(getStorableObjectPointer)
213#ifndef XAOD_STANDALONE
223#ifndef XAOD_STANDALONE
243template <
class PROXY>
273 using Base::operator();
301template <
class CONT,
class PLINK_ALLOC>
306template <
class CONT,
class PLINK_ALLOC>
309 std::reference_wrapper<detail::ELProxyInSpanConverter<CONT> > >;
328template <
class CONT,
class PLINK_ALLOC>
346 using VElt_t = std::vector<SG::PackedLink<CONT>, PLINK_ALLOC>;
368 template <ElementLinkRange<CONT> RANGE>
375 template <
class VALLOC>
376 operator std::vector<Link_t, VALLOC>()
const;
388 template <
class VALLOC>
389 bool operator== (
const std::vector<Link_t, VALLOC>& v)
const;
452 template <CxxUtils::detail::InputValIterator<ElementLink<CONT> > ITERATOR>
461 template <ElementLinkRange<CONT> RANGE>
469 template <ElementLinkRange<CONT> RANGE>
492 template <CxxUtils::detail::InputValIterator<ElementLink<CONT> > ITERATOR>
493 void assign (ITERATOR first, ITERATOR last);
501 template <ElementLinkRange<CONT> RANGE>
521template <
class CONT,
class PLINK_ALLOC>
Allow customizing how aux data types are treated.
Manage lookup of vectors of auxiliary data.
Conversions between PackedLink and ElementLink.
Factory object that creates vectors using AuxTypeVector, specialized for PackedLink.
Define macros for attributes used to control the static checker.
ElementLink implementation for ROOT usage.
Allow customizing how aux data types are treated.
Manage lookup of vectors of auxiliary data.
Extend PackedLinkConverter with a (non-const) conversion from PackedLink to a proxy object.
typename PROXY::PLink_t PLink_t
typename PROXY::Link_t value_type
ELProxyConverter(AuxVectorData &container, SG::auxid_t auxid, SG::auxid_t linked_auxid)
Constructor.
typename PROXY::Link_t Link_t
detail::PackedLinkConverter< typename PROXY::Cont_t > Base
ELProxyConverter(const Base &cnv)
Constructor.
PROXY operator()(PLink_t &pl)
Produce a proxy object for a given PackedLink.
CONT Cont_t
The Storable object referred to by links.
PackedLinkConverter< CONT > & m_cnv
Converter reference.
ELProxyRefBase(PackedLinkConverter< CONT > &cnv)
Constructor.
ElementLink< Cont_t > Link_t
ELProxyT(const ELProxyT &)=delete
Don't allow these proxy objects to be copied.
SG::PackedLink< Cont_t > PLink_t
typename detail::ELProxyValBase< CONT >::Cont_t Cont_t
ELProxyT(PLink_t &pl, AuxVectorData &container, SG::auxid_t auxid, SG::auxid_t linked_auxid)
Constructor.
bool operator==(const Link_t &l) const
Equality comparison with ElementLink.
ELProxyT & operator=(const ELProxyT &)=delete
ELProxyT(PLink_t &pl, PackedLinkConverter< Cont_t > &cnv)
Constructor.
CONT Cont_t
The Storable object referred to by links.
ELProxyValBase(AuxVectorData &container, SG::auxid_t auxid, SG::auxid_t linked_auxid)
Constructor.
PackedLinkConverter< CONT > m_cnv
The contained converter.
ELProxyValBase(PackedLinkConverter< CONT > &cnv)
Constructor.
ELSpanConverter(AuxVectorData &container, auxid_t auxid, auxid_t linked_auxid)
ELSpanProxy< CONT, VALLOC > value_type
typename value_type::VElt_t VElt_t
value_type operator()(VElt_t &velt) const
Convert from a PackedLink vector to a proxy for the span.
AuxVectorData & m_container
Proxy for a span of ElementLinks.
void insert(iterator pos, ITERATOR first, ITERATOR last)
Insert a range of links into this vector of links.
std::vector< SG::PackedLink< CONT >, VALLOC > VElt_t
void clear()
Clear this vector of links.
void assign(ITERATOR first, ITERATOR last)
Set this vector of links to a range of links.
bool operator==(const std::vector< Link_t, VALLOC > &v) const
Equality testing.
detail::PackedLink_span< CONT, VALLOC > PackedLink_span
void insert(iterator pos, const Link_t &l)
Insert a new link into this vector of links.
void assign(size_t n, const Link_t &l)
Set this vector of links to copies of a new link.
ELProxyInSpanConverter< CONT > m_cnv
void push_back(const Link_t &l)
Add a new link to this vector of links.
std::ranges::iterator_t< Base > iterator
ElementLink< CONT > Link_t
void pop_back()
Remove the last element in this vector of links.
void append_range(const RANGE &range)
Append a range of links to the end of this vector of links.
std::vector< Link_t > asVector() const
Convert to a vector of ElementLink.
SG::PackedLink< CONT > PLink_t
ELSpanProxyBase< CONT, VALLOC > Base
void resize(size_t n, const Link_t &l=Link_t())
Resize this vector of links.
void assign_range(const RANGE &range)
Set this vector of links to a range of links.
void erase(iterator first, iterator last)
Erase a range of elements from this vector of links.
void insert(iterator pos, size_t n, const Link_t &l)
Insert copies of a new link into this vector of links.
void operator=(const RANGE &r)
Assign from a range of ElementLink.
void erase(iterator pos)
Erase one element from this vector of links.
void insert_range(iterator pos, const RANGE &range)
Insert a range of links into this vector of links.
ELSpanProxy(VElt_t &velt, AuxVectorData &container, SG::auxid_t auxid, SG::auxid_t linked_auxid)
Constructor.
Helper: Convert a PackedLink to an ElementLink and vice-versa.
range_with_at< std::ranges::transform_view< SPAN, XFORM > > transform_view_with_at
Helper to add at() methods to a transform_view.
detail::ELProxyT< detail::ELProxyRefBase< CONT > > ELProxyInSpan
Proxy holding the converter by reference — meant to be used when we have a proxy as a member of a spa...
CxxUtils::transform_view_with_at< PackedLink_span< CONT, PLINK_ALLOC >, std::reference_wrapper< detail::ELProxyInSpanConverter< CONT > > > ELSpanProxyBase
A range transforming a span over PackedLink to ElementLink proxies.
detail::ELProxyConverter< detail::ELProxyInSpan< CONT > > ELProxyInSpanConverter
Converter producing a proxy — meant to be used when we have a proxy as a member of a span.
typename AuxDataTraits< PackedLink< CONT >, PLINK_ALLOC >::span PackedLink_span
A span over PackedLink.
size_t auxid_t
Identifier for a particular aux data item.
Add at() methods to a range class.
A packed version of ElementLink.