LArSoft
v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
|
Base representation of a collection of proxied objects. More...
#include "CollectionProxy.h"
Public Types | |
using | element_proxy_t = Element< collection_proxy_t > |
Type of element of this collection proxy. More... | |
using | aux_collections_t = std::tuple< AuxColls... > |
Tuple of all auxiliary data collections (wrappers). More... | |
using | value_type = element_proxy_t |
Type of element of this collection proxy. More... | |
using | const_iterator = details::IndexBasedIterator< collection_proxy_t > |
Type of iterator to this collection (constant). More... | |
using | iterator = const_iterator |
Type of iterator to this collection (still constant). More... | |
using | main_element_t = util::collection_value_t< MainColl > |
Type of the elements in the original collection. More... | |
using | main_collection_t = MainColl |
Type of the original collection. More... | |
Public Member Functions | |
CollectionProxyBase (main_collection_t const &main, AuxColls &&...aux) | |
Constructor: uses the specified data. More... | |
element_proxy_t const | operator[] (std::size_t i) const |
Returns the element of this collection with the specified index. More... | |
const_iterator | begin () const |
Returns an iterator to the first element of the collection. More... | |
const_iterator | end () const |
Returns an iterator past the last element of the collection. More... | |
bool | empty () const |
Returns whether this collection is empty. More... | |
std::size_t | size () const |
Returns the size of this collection. More... | |
template<typename AuxTag > | |
auto | get () const -> decltype(auto) |
Returns the associated data proxy specified by AuxTag . More... | |
template<typename Tag , typename T = std::vector<Tag> const&> | |
auto | getIf () const -> decltype(auto) |
Returns the auxiliary data specified by type (Tag ). More... | |
main_collection_t const & | main () const |
Returns the wrapped collection. More... | |
main_collection_t const & | mainRef () const |
Returns a reference to the wrapped collection. More... | |
main_collection_t const * | mainPtr () const |
Returns a pointer to the wrapped collection. More... | |
Static Public Member Functions | |
template<typename Tag > | |
static constexpr bool | has () |
Returns whether this class knowns about the specified type (Tag ). More... | |
Protected Types | |
using | this_t = MainCollectionProxy< main_collection_t > |
This type. More... | |
Protected Member Functions | |
template<typename AuxColl > | |
AuxColl const & | aux () const |
Returns the auxiliary data specified by type. More... | |
template<typename AuxTag > | |
auto | auxByTag () const -> decltype(auto) |
Returns the auxiliary data specified by type. More... | |
template<typename Tag , typename > | |
auto | getIfHas (std::bool_constant< true >) const -> decltype(auto) |
template<typename Tag , typename T > | |
auto | getIfHas (std::bool_constant< false >) const -> T |
const_iterator | makeIterator (std::size_t i) const |
Returns an iterator pointing to the specified index of this collection. More... | |
this_t & | mainProxy () |
Return this object as main collection proxy. More... | |
this_t const & | mainProxy () const |
Return this object as main collection proxy. More... | |
auto | getMainAt (std::size_t i) const -> decltype(auto) |
Returns the specified item in the original collection. More... | |
Private Types | |
using | collection_proxy_t = CollectionProxyBase< Element, MainColl, AuxColls... > |
This type. More... | |
using | main_collection_proxy_t = details::MainCollectionProxy< MainColl > |
Type of wrapper used for the main data product. More... | |
Base representation of a collection of proxied objects.
Element | type of element of the collection proxy |
MainColl | type of the collection of the main data product |
AuxColls | type of all included auxiliary data proxies |
This object exposes a collection interface. The collection proxy is driven by a data product containing the main objects. The size of the collection proxy is the same as the one of this main data product, and all associated data is referring to its elements.
Thus, the elements of this collection proxy are objects that collect the information of a single element in the main data product and all the data associated with it.
The AuxColls
types are tagged types: all must define a tag
type. Their data is accessed specifying that tag, i.e. via get<Tag>()
. Therefore, tags must be unique.
The type Element
is expected to expose the same interface of CollectionProxyElement
, from which it can derive. It is a template that needs to take as only argument the type of collection proxy it is the element of. This is a way to customize the interface of access to single element of proxy.
Element
type, which indirectly depends on this class for discovering some relevant data types. This is a circular dependency that might be solved by introducing a third class with the definition of the types that both classes need. Definition at line 110 of file CollectionProxy.h.
using proxy::CollectionProxyBase< Element, MainColl, AuxColls >::aux_collections_t = std::tuple<AuxColls...> |
Tuple of all auxiliary data collections (wrappers).
Definition at line 128 of file CollectionProxy.h.
|
private |
This type.
Definition at line 112 of file CollectionProxy.h.
using proxy::CollectionProxyBase< Element, MainColl, AuxColls >::const_iterator = details::IndexBasedIterator<collection_proxy_t> |
Type of iterator to this collection (constant).
Definition at line 134 of file CollectionProxy.h.
using proxy::CollectionProxyBase< Element, MainColl, AuxColls >::element_proxy_t = Element<collection_proxy_t> |
Type of element of this collection proxy.
Definition at line 125 of file CollectionProxy.h.
using proxy::CollectionProxyBase< Element, MainColl, AuxColls >::iterator = const_iterator |
Type of iterator to this collection (still constant).
Definition at line 137 of file CollectionProxy.h.
|
private |
Type of wrapper used for the main data product.
Definition at line 115 of file CollectionProxy.h.
using proxy::details::MainCollectionProxy< MainColl >::main_collection_t = MainColl |
Type of the original collection.
Definition at line 41 of file MainCollectionProxy.h.
using proxy::details::MainCollectionProxy< MainColl >::main_element_t = util::collection_value_t<MainColl> |
Type of the elements in the original collection.
Definition at line 44 of file MainCollectionProxy.h.
|
protectedinherited |
This type.
Definition at line 60 of file MainCollectionProxy.h.
using proxy::CollectionProxyBase< Element, MainColl, AuxColls >::value_type = element_proxy_t |
Type of element of this collection proxy.
Definition at line 131 of file CollectionProxy.h.
|
inline |
Constructor: uses the specified data.
main | the original main data product collection |
aux | all auxiliary data collections and structures |
The auxiliary data structures are stolen (moved) from the arguments. They are expected to be wrappers around the original associated data, not owning the auxiliary data itself.
Definition at line 148 of file CollectionProxy.h.
|
inlineprotected |
Returns the auxiliary data specified by type.
Definition at line 258 of file CollectionProxy.h.
|
inlineprotected |
Returns the auxiliary data specified by type.
Definition at line 265 of file CollectionProxy.h.
|
inline |
Returns an iterator to the first element of the collection.
Definition at line 169 of file CollectionProxy.h.
|
inline |
Returns whether this collection is empty.
Definition at line 175 of file CollectionProxy.h.
|
inline |
Returns an iterator past the last element of the collection.
Definition at line 172 of file CollectionProxy.h.
|
inline |
Returns the associated data proxy specified by AuxTag
.
Definition at line 182 of file CollectionProxy.h.
auto proxy::CollectionProxyBase< Element, MainColl, AuxColls >::getIf | ( | ) | const -> decltype(auto) |
Returns the auxiliary data specified by type (Tag
).
Tag | tag of the data to fetch (usually, its type) |
T | exact type returned by the method (by default a vector of tags) |
Tag
). std::logic_error | if the tag is not available. |
if constexpr
should be used instead (see the example below)This method is a get()
which forgives when the requested type is not available (because this proxy was configured not to hold it).
The difference with get()
is the following:
If the proxy tracks
has not been coded with recob::Hit
data, the code snippet will not compile, because get()
will not compile for tags that were not coded in. On the other end, if recob::Hit
is coded in tracks
but recob::SpacePoint
is not, the snippet will compile. In that case, if the has()
check had been omitted, getIt()
would throw a std::logic_error
exception when executed. With C++17, this will not be necessary any more by using "constexpr if":
T
.Definition at line 396 of file CollectionProxy.h.
|
protected |
Definition at line 403 of file CollectionProxy.h.
|
protected |
Definition at line 411 of file CollectionProxy.h.
|
inlineprotectedinherited |
Returns the specified item in the original collection.
Definition at line 69 of file MainCollectionProxy.h.
References proxy::details::MainCollectionProxy< MainColl >::fMain.
|
inlinestatic |
Returns whether this class knowns about the specified type (Tag
).
Definition at line 246 of file CollectionProxy.h.
|
inlineinherited |
Returns the wrapped collection.
Definition at line 50 of file MainCollectionProxy.h.
References proxy::details::MainCollectionProxy< MainColl >::mainRef().
|
inlineprotectedinherited |
Return this object as main collection proxy.
Definition at line 63 of file MainCollectionProxy.h.
|
inlineprotectedinherited |
Return this object as main collection proxy.
Definition at line 66 of file MainCollectionProxy.h.
|
inlineinherited |
Returns a pointer to the wrapped collection.
Definition at line 56 of file MainCollectionProxy.h.
References proxy::details::MainCollectionProxy< MainColl >::fMain.
|
inlineinherited |
Returns a reference to the wrapped collection.
Definition at line 53 of file MainCollectionProxy.h.
References proxy::details::MainCollectionProxy< MainColl >::fMain.
Referenced by proxy::details::MainCollectionProxy< MainColl >::main().
|
inlineprotected |
Returns an iterator pointing to the specified index of this collection.
Definition at line 276 of file CollectionProxy.h.
|
inline |
Returns the element of this collection with the specified index.
i | the index in the collection |
The returned value is an object created on the spot, not a reference to an existing structure. The structure exposes the i
-th element in the main collection, plus all objects that are associated to it.
Definition at line 162 of file CollectionProxy.h.
|
inline |
Returns the size of this collection.
Definition at line 178 of file CollectionProxy.h.