index.h File Reference

CPP API: index.h File Reference
index.h File Reference
#include "memilio/io/io.h"
#include "memilio/utils/compiler_diagnostics.h"
#include "memilio/utils/metaprogramming.h"
#include "memilio/utils/type_safe.h"
#include <cstddef>
#include <tuple>
#include <type_traits>
#include <utility>
Include dependency graph for index.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  mio::Index< CategoryTag >
 An Index with more than one template parameter combines several Index objects. More...
 
class  mio::Index< CategoryTag >
 An Index with a single template parameter is a typesafe wrapper for size_t that is associated with a Tag. More...
 
struct  mio::index_of_type< Index< CategoryTags... >, Index< CategoryTags... > >
 Specialization of index_of_type for Index. Resolves ambiguity when using Indexs as items. More...
 
struct  mio::index_of_type< Tag, ::mio::Index< CategoryTags... > >
 Specialization of index_of_type for Index. More...
 
struct  mio::type_at_index< Tag, ::mio::Index< CategoryTags... > >
 Specialization of type_at_index for Index. More...
 

Namespaces

 mio
 A collection of classes to simplify handling of matrix shapes in meta programming.
 
 mio::details
 

Functions

template<class... IndexArgs>
decltype(auto) mio::concatenate_indices (IndexArgs &&... args)
 Combine several Indexs into one MultiIndex. More...
 
template<class SuperIndex , class SubIndex >
SuperIndex mio::extend_index (const SubIndex &index, size_t fill_value=0)
 Create a SuperIndex by copying values from SubIndex, filling new categories with fill_value. More...
 
template<class... CategoryTags, class... Subset>
Index< CategoryTags... > mio::details::extend_index_impl (const Index< Subset... > &i, const size_t fill_value, mio::Tag< Index< CategoryTags... >>)
 Creates and returns a SuperIndex from SubIndex, using entries from the given SubIndex or fill_value. More...
 
template<size_t I, typename... CategoryTags>
constexpr std::tuple_element< I, std::tuple< Index< CategoryTags >... > >::type & mio::get (Index< CategoryTags... > &i) noexcept
 Retrieves the Index (by reference) at the Ith position of a MultiIndex. More...
 
template<typename Tag , typename... CategoryTags>
constexpr Index< Tag > & mio::get (Index< CategoryTags... > &i) noexcept
 Retrieves the Index (by reference) by its Tag in a MultiIndex. Requires unique tags. More...
 
template<size_t I, typename... CategoryTags>
constexpr std::tuple_element< I, std::tuple< Index< CategoryTags >... > >::type const & mio::get (Index< CategoryTags... > const &i) noexcept
 Retrieves the Index (by const reference) at the Ith position of a MultiIndex. More...
 
template<typename Tag , typename... CategoryTags>
constexpr Index< Tag > const & mio::get (Index< CategoryTags... > const &i) noexcept
 Retrieves the Index (by const reference) by its Tag in a MultiIndex. Requires unique tags. More...
 
template<class... Tags>
std::tuple< Index< Tags >... > mio::details::get_tuple (const Index< Tags... > &i)
 Obtain a tuple of single-category indices from a Index or MultiIndex. More...
 
template<class Enum >
std::tuple< Index< Enum > > mio::details::get_tuple (Enum i) requires std
 Obtain a tuple of one single-category index from an enum value. More...
 
template<class... T>
void mio::details::is_multi_index_impl (Index< T... >)
 Function definition that accepts a MultiIndex, used for the definition of IsMultiIndex. More...
 
template<class... CategoryTags, class SuperIndex >
Index< CategoryTags... > mio::details::reduce_index_impl (const SuperIndex &i, mio::Tag< Index< CategoryTags... >>)
 Extracts CategoryTags from the tagged Index and returns a subindex of SuperIndex with the given categories. More...
 
template<class... T>
Index< T... > mio::details::tuple_to_index (std::tuple< Index< T >... >)
 Function declaration that allows type conversion from a tuple of single-category indices to MultiIndex. More...
 
template<class SubIndex , class SuperIndex >
decltype(auto) mio::reduce_index (const SuperIndex &index)
 Create a SubIndex by copying values from SuperIndex. More...
 
template<class Enum , class SuperIndex >
requires std::is_enum_v< Enum > Index< Enum > mio::reduce_index (const SuperIndex &index)
 Create a SubIndex by copying values from SuperIndex. More...
 

Variables

template<typename... CategoryTags>
concept mio::IsMultiIndex = requires(Index<CategoryTags...> i) { details::is_multi_index_impl(i); }
 A MultiIndex is an Index with any number of categories. Does accept empty or single category indices. More...