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 Types inherited from proxy::details::MainCollectionProxy< MainColl > | |
using | main_collection_t = MainColl |
Type of the original collection. More... | |
using | main_element_t = util::collection_value_t< MainColl > |
Type of the elements in 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... | |
Public Member Functions inherited from proxy::details::MainCollectionProxy< MainColl > | |
MainCollectionProxy (main_collection_t const &main) | |
Constructor: wraps the specified collection. 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 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... | |
Protected Member Functions inherited from proxy::details::MainCollectionProxy< MainColl > | |
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... | |
Additional Inherited Members | |
Protected Types inherited from proxy::details::MainCollectionProxy< MainColl > | |
using | this_t = MainCollectionProxy< main_collection_t > |
This type. 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 117 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 138 of file CollectionProxy.h.
|
private |
This type.
Definition at line 122 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 144 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 135 of file CollectionProxy.h.
using proxy::CollectionProxyBase< Element, MainColl, AuxColls >::iterator = const_iterator |
Type of iterator to this collection (still constant).
Definition at line 147 of file CollectionProxy.h.
|
private |
Type of wrapper used for the main data product.
Definition at line 125 of file CollectionProxy.h.
using proxy::details::MainCollectionProxy< MainColl >::main_collection_t = MainColl |
Type of the original collection.
Definition at line 43 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 46 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 141 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 158 of file CollectionProxy.h.
|
inlineprotected |
|
inlineprotected |
Returns the auxiliary data specified by type.
Definition at line 271 of file CollectionProxy.h.
|
inline |
Returns an iterator to the first element of the collection.
Definition at line 179 of file CollectionProxy.h.
|
inline |
Returns whether this collection is empty.
Definition at line 185 of file CollectionProxy.h.
|
inline |
Returns an iterator past the last element of the collection.
Definition at line 182 of file CollectionProxy.h.
|
inline |
Returns the associated data proxy specified by AuxTag
.
Definition at line 193 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 413 of file CollectionProxy.h.
|
protected |
Definition at line 425 of file CollectionProxy.h.
|
protected |
Definition at line 435 of file CollectionProxy.h.
|
inlinestatic |
Returns whether this class knowns about the specified type (Tag
).
Definition at line 256 of file CollectionProxy.h.
|
inlineprotected |
Returns an iterator pointing to the specified index of this collection.
Definition at line 281 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 172 of file CollectionProxy.h.
|
inline |
Returns the size of this collection.
Definition at line 188 of file CollectionProxy.h.