Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::variant_aggregate< VariantType, Tags > Class Template Reference

A variant_aggregate: A bag of compile-time tagged variants. In other words, a compile-time map of variants indexed by tag type. More...

#include <aggregate.hpp>

Public Types

using variant_t = VariantType
using TagsTuple = tuple<Tags...>

Static Public Attributes

static constexpr size_t N = sizeof...(Tags)

Constructors

template<size_t I>
using tag_type = tuple_element_t<I, TagsTuple>
 The I'th tag type.
constexpr variant_aggregate ()=default
 Default constructor.
constexpr variant_aggregate (Kokkos::Array< variant_t, N > variants)
 Construct a variant_aggregate that has the given tagged variants.
constexpr variant_aggregate (const variant_aggregate &)=default
 Default copy/move/assign constructors.
constexpr variant_aggregate (variant_aggregate &&)=default
constexpr variant_aggregateoperator= (const variant_aggregate &)=default
constexpr variant_aggregateoperator= (variant_aggregate &&)=default
template<typename Tag>
constexpr auto append (variant_t new_variant) const
 Add a value (fluent interface):
template<size_t I>
constexpr const variant_tget () const
 Fetch the I'th value (compile-time index).
template<size_t I>
constexpr variant_tget ()
constexpr const variant_tget (size_t I) const
 Fetch the I'th value (runtime index).
constexpr variant_tget (size_t I)
template<typename Tag>
constexpr const variant_tget () const
 Fetch the value corresponding to the given Tag.
template<typename Tag>
constexpr variant_tget ()
 Fetch the value corresponding to the given Tag.
template<typename Tag>
static constexpr bool has ()
 Check if we have a value with the given Tag.
static constexpr size_t size ()
 Get the number of components in this variant_aggregate.

Detailed Description

template<typename VariantType, typename... Tags>
class mundy::variant_aggregate< VariantType, Tags >

Construct a variant_aggregate via a fluent interface:

using VariantType = mundy::variant<int, double>;
.append<Tag1>(VariantType(1))
.append<Tag2>(VariantType(2.0));
constexpr auto append(variant_t new_variant) const
Add a value (fluent interface):
Definition aggregate.hpp:333
constexpr auto make_variant_aggregate()
Canonical way to construct a variant_aggregate.
Definition aggregate.hpp:446
Definition variant.hpp:44

Each Tag type must be unique within a variant_aggregate.

Member Typedef Documentation

◆ variant_t

template<typename VariantType, typename... Tags>
using mundy::variant_aggregate< VariantType, Tags >::variant_t = VariantType

◆ TagsTuple

template<typename VariantType, typename... Tags>
using mundy::variant_aggregate< VariantType, Tags >::TagsTuple = tuple<Tags...>

◆ tag_type

template<typename VariantType, typename... Tags>
template<size_t I>
using mundy::variant_aggregate< VariantType, Tags >::tag_type = tuple_element_t<I, TagsTuple>

Constructor & Destructor Documentation

◆ variant_aggregate() [1/4]

template<typename VariantType, typename... Tags>
mundy::variant_aggregate< VariantType, Tags >::variant_aggregate ( )
constexprdefault

◆ variant_aggregate() [2/4]

template<typename VariantType, typename... Tags>
mundy::variant_aggregate< VariantType, Tags >::variant_aggregate ( Kokkos::Array< variant_t, N > variants)
inlineconstexpr

◆ variant_aggregate() [3/4]

template<typename VariantType, typename... Tags>
mundy::variant_aggregate< VariantType, Tags >::variant_aggregate ( const variant_aggregate< VariantType, Tags > & )
constexprdefault

◆ variant_aggregate() [4/4]

template<typename VariantType, typename... Tags>
mundy::variant_aggregate< VariantType, Tags >::variant_aggregate ( variant_aggregate< VariantType, Tags > && )
constexprdefault

Member Function Documentation

◆ operator=() [1/2]

template<typename VariantType, typename... Tags>
variant_aggregate & mundy::variant_aggregate< VariantType, Tags >::operator= ( const variant_aggregate< VariantType, Tags > & )
constexprdefault

◆ operator=() [2/2]

template<typename VariantType, typename... Tags>
variant_aggregate & mundy::variant_aggregate< VariantType, Tags >::operator= ( variant_aggregate< VariantType, Tags > && )
constexprdefault

◆ append()

template<typename VariantType, typename... Tags>
template<typename Tag>
auto mundy::variant_aggregate< VariantType, Tags >::append ( variant_t new_variant) const
inlineconstexpr

◆ get() [1/6]

template<typename VariantType, typename... Tags>
template<size_t I>
const variant_t & mundy::variant_aggregate< VariantType, Tags >::get ( ) const
inlineconstexpr

◆ get() [2/6]

template<typename VariantType, typename... Tags>
template<size_t I>
variant_t & mundy::variant_aggregate< VariantType, Tags >::get ( )
inlineconstexpr

◆ get() [3/6]

template<typename VariantType, typename... Tags>
const variant_t & mundy::variant_aggregate< VariantType, Tags >::get ( size_t I) const
inlineconstexpr

◆ get() [4/6]

template<typename VariantType, typename... Tags>
variant_t & mundy::variant_aggregate< VariantType, Tags >::get ( size_t I)
inlineconstexpr

◆ get() [5/6]

template<typename VariantType, typename... Tags>
template<typename Tag>
const variant_t & mundy::variant_aggregate< VariantType, Tags >::get ( ) const
inlineconstexpr

◆ get() [6/6]

template<typename VariantType, typename... Tags>
template<typename Tag>
variant_t & mundy::variant_aggregate< VariantType, Tags >::get ( )
inlineconstexpr

◆ has()

template<typename VariantType, typename... Tags>
template<typename Tag>
constexpr bool mundy::variant_aggregate< VariantType, Tags >::has ( )
inlinestaticconstexpr

◆ size()

template<typename VariantType, typename... Tags>
constexpr size_t mundy::variant_aggregate< VariantType, Tags >::size ( )
inlinestaticconstexpr

Member Data Documentation

◆ N

template<typename VariantType, typename... Tags>
size_t mundy::variant_aggregate< VariantType, Tags >::N = sizeof...(Tags)
staticconstexpr