Dune Core Modules (unstable)

A hybrid multi-index class that supports both compile time and run time indices. More...

#include <dune/common/hybridmultiindex.hh>

Public Types

using index_sequence = std::index_sequence_for< T... >
 An index_sequence for the entries in this HybridMultiIndex.
 

Public Member Functions

constexpr HybridMultiIndex (std::tuple< T... > t)
 Constructor from a std::tuple
 
template<typename... I>
requires ((sizeof...(T) > 0 && sizeof...(I) == sizeof...(T)) and ((std::is_integral_v<I> or Dune::IsIntegralConstant<I>::value) && ...))
constexpr HybridMultiIndex (I... i)
 Constructor from arguments.
 
template<std::size_t i>
requires (sizeof...(T) > i)
constexpr auto get () const
 Get the index value at position pos. More...
 
template<std::size_t i>
requires (sizeof...(T) > i)
constexpr auto operator[] (Dune::index_constant< i >) const
 Get the index value at position pos.
 
constexpr std::size_t operator[] (std::size_t pos) const
 Get the index value at position pos.
 
template<std::size_t n = sizeof...(T)>
requires (n > 0 && n == sizeof...(T))
constexpr auto front () const
 Get the first index value. Only available in non-empty multi-indices.
 
template<std::size_t n = sizeof...(T)>
requires (n > 0 && n == sizeof...(T))
constexpr auto back () const
 Get the last index value. Only available in non-empty multi-indices.
 

Static Public Member Functions

static constexpr index_sequence enumerate ()
 Returns an index_sequence for enumerating the components of this HybridMultiIndex.
 
static constexpr std::size_t size ()
 Get the size (length) of this multi-index.
 
static constexpr std::size_t max_size ()
 Get the size (length) of this multi-index.
 

Related Functions

(Note that these are not member functions.)

template<typename... T>
constexpr auto back (const HybridMultiIndex< T... > &tp) -> decltype(tp.back())
 Returns a copy of the last element of the HybridMultiIndex. More...
 
template<typename... T>
constexpr auto front (const HybridMultiIndex< T... > &tp) -> decltype(tp.front())
 Returns a copy of the first element of the HybridMultiIndex. More...
 
template<typename... T>
constexpr HybridMultiIndex< T..., std::size_t > push_back (const HybridMultiIndex< T... > &tp, std::size_t i)
 Appends a run time index to a HybridMultiIndex. More...
 
template<std::size_t i, typename... T>
constexpr HybridMultiIndex< T..., index_constant< i > > push_back (const HybridMultiIndex< T... > &tp, index_constant< i > iConstant={})
 Appends a compile time index to a HybridMultiIndex. More...
 
template<typename... T>
constexpr HybridMultiIndex< std::size_t, T... > push_front (const HybridMultiIndex< T... > &tp, std::size_t i)
 Prepends a run time index to a HybridMultiIndex. More...
 
template<std::size_t i, typename... T>
constexpr HybridMultiIndex< index_constant< i >, T... > push_front (const HybridMultiIndex< T... > &tp, index_constant< i > iConstant={})
 Prepends a compile time index to a HybridMultiIndex. More...
 
template<typename I , typename... T>
constexpr auto accumulate_back (const HybridMultiIndex< T... > &tp, I i)
 Hybrid utility that accumulates to the back of a multi-index. More...
 
template<typename I , typename... T>
constexpr auto accumulate_front (const HybridMultiIndex< T... > &tp, I i)
 Hybrid utility that accumulates to the front of a multi-index. More...
 
template<class... Head, class... Other>
constexpr auto join (const HybridMultiIndex< Head... > &head, const Other &... tail)
 Join two hybrid multi-indices into one.
 
template<class... T>
constexpr auto reverse (const HybridMultiIndex< T... > &tp)
 Reverses the order of the elements in the multi-index.
 
template<class... T>
constexpr auto pop_front (const HybridMultiIndex< T... > &tp)
 Removes first index on a HybridMultiIndex. More...
 
template<class... T>
constexpr auto pop_back (const HybridMultiIndex< T... > &tp)
 Removes last index on a HybridMultiIndex. More...
 
template<class... S, class... T>
constexpr bool operator== (const HybridMultiIndex< S... > &lhs, const HybridMultiIndex< T... > &rhs)
 Compare two HybridMultiIndexs for value equality. More...
 
template<class S , S... lhs, class T , T... rhs>
constexpr auto operator== (const HybridMultiIndex< std::integral_constant< S, lhs >... > &, const HybridMultiIndex< std::integral_constant< T, rhs >... > &)
 Overload for purely static HybridMultiIndexs. More...
 
template<class... S, class... T>
constexpr auto operator!= (const HybridMultiIndex< S... > &lhs, const HybridMultiIndex< T... > &rhs)
 Compare two HybridMultiIndexs for inequality.
 
template<class S , S... lhs, class T , T... rhs>
constexpr auto operator!= (const HybridMultiIndex< std::integral_constant< S, lhs >... > &, const HybridMultiIndex< std::integral_constant< T, rhs >... > &)
 Compare two static HybridMultiIndexs for inequality.
 
template<typename... T>
std::ostream & operator<< (std::ostream &os, const HybridMultiIndex< T... > &tp)
 Dumps a HybridMultiIndex to a stream.
 

Detailed Description

template<typename... T>
class Dune::HybridMultiIndex< T >

A hybrid multi-index class that supports both compile time and run time indices.

A HybridMultiIndex supports storing a combination of run time and compile time indices. This allows to construct multi-indices that provide sufficient information for accessing nested multi-type containers.

Note
Internally all indices are stored as std::size_t or std::integral_constant<std::size_t,v>. The latter is the same as Dune::index_constant<v>.

Member Function Documentation

◆ get()

template<typename... T>
template<std::size_t i>
requires (sizeof...(T) > i)
constexpr auto Dune::HybridMultiIndex< T >::get ( ) const
inlineconstexpr

Get the index value at position pos.

The get member function is required by the std-tuple-protocol which e.g. enables structured bindings.


The documentation for this class was generated from the following file:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Jun 2, 23:00, 2026)