11 #ifndef LARDATA_RECOBASEPROXY_PROXYBASE_COLLECTIONPROXYELEMENT_H
12 #define LARDATA_RECOBASEPROXY_PROXYBASE_COLLECTIONPROXYELEMENT_H
23 #include <type_traits>
33 template <
typename AuxCollTuple>
161 template <
typename CollProxy>
170 <
typename collection_proxy_t::aux_collections_t>
::type;
189 template <
typename Tag>
190 auto get()
const -> decltype(
auto)
191 {
return std::get<util::index_of_tag_v<Tag, aux_elements_t>>(
fAuxData); }
264 template <
typename Tag,
typename T = Tag const&>
265 [[deprecated(
"Use C++17 constexpr if instead and get() instead")]]
270 template <typename Tag>
271 static constexpr
bool has() {
return util::has_tag_v<Tag, aux_elements_t>; }
282 template <
typename Tag,
typename>
283 auto getIfHas(std::bool_constant<true>)
const -> decltype(auto);
285 template <typename Tag, typename T>
310 template <
typename ProxyElement,
typename... AuxData>
313 typename ProxyElement::main_element_t
const& main,
318 typename ProxyElement::aux_elements_t(std::forward<AuxData>(auxData)...)
342 template <
typename Tuple>
343 struct SubstituteWithAuxList {
348 template <
typename... T>
350 using type = std::tuple<
typename T::auxiliary_data_t...>;
361 template <
typename CollProxy>
362 template <
typename Tag,
typename T>
364 {
return getIfHas<Tag, T>(std::bool_constant<has<Tag>()>{}); }
368 template <
typename CollProxy>
369 template <
typename Tag,
typename>
371 (std::bool_constant<true>)
const -> decltype(
auto)
372 {
return get<Tag>(); }
374 template <
typename CollProxy>
375 template <
typename Tag,
typename T>
377 (std::bool_constant<false>)
const -> T
379 throw std::logic_error
380 (
"Tag '" + lar::debug::demangle<Tag>() +
"' not available.");
389 #endif // LARDATA_RECOBASEPROXY_PROXYBASE_COLLECTIONPROXYELEMENT_H
main_element_t const * operator->() const
Returns a pointer to the main element.
double std(const std::vector< short > &wf, const double ped_mean, size_t start, size_t nsample)
auto makeCollectionProxyElement(std::size_t index, typename ProxyElement::main_element_t const &main, AuxData &&...auxData)
Creates a collection proxy element object from data structures.
typename collection_proxy_t::main_element_t main_element_t
auto getIfHas(std::bool_constant< true >) const -> decltype(auto)
std::integral_constant< bool, Value > bool_constant
aux_elements_t fAuxData
Data associated to the main object.
static constexpr bool has()
Returns whether this class knowns about the specified type (Tag).
main_element_t const * fMain
Pointer to the main object of the element.
CollProxy collection_proxy_t
std::size_t index() const
Returns the index of this element in the collection.
std::size_t fIndex
Index of this element in the proxy.
A std::true_type with a template argument.
An element of a collection proxy.
Functions to help debugging by instrumenting code.
typename details::SubstituteWithAuxList< typename collection_proxy_t::aux_collections_t >::type aux_elements_t
Tuple of elements (expected to be tagged types).
Utilities to address elements of a tuple-like class by tag.
auto getIf() const -> decltype(auto)
Returns the auxiliary data specified by type (Tag).
int main(int argc, char **argv)
main_element_t const & operator*() const
Returns a reference to the main element.
CollectionProxyElement(std::size_t index, main_element_t const &main, aux_elements_t &&auxData)