AMDiS  0.1
The Adaptive Multi-Dimensional Simulation Toolbox
Index.hpp
1 #pragma once
2 
3 // std c++ headers
4 #include <tuple>
5 #include <type_traits>
6 #include <utility>
7 
8 namespace AMDiS
9 {
10  // introduce some shortcuts for integral constants
11  // ---------------------------------------------------------------------------
12 
14  template <int I>
15  using int_t = std::integral_constant<int, I>;
16 
18  template <int I>
19  constexpr int_t<I> int_ = {};
20 
22  template <int... I>
23  using Ints = std::integer_sequence<int, I...>;
24 
25  template <std::size_t I, int... J>
26  auto get(Ints<J...>) { return std::get<I>(std::make_tuple(int_<J>...)); }
27 
28 
30  template <std::size_t I>
31  using index_t = std::integral_constant<std::size_t, I>;
32 
34  template <std::size_t I>
35  constexpr index_t<I> index_ = {};
36 
37 
39  template <std::size_t... I>
40  using Indices = std::index_sequence<I...>;
41 
42  template <std::size_t I, std::size_t... J>
43  auto get(Indices<J...>) { return std::get<I>(std::make_tuple(index_<J>...)); }
44 
45 } // end namespace AMDiS
std::index_sequence< I... > Indices
class that represents a sequence of indices
Definition: Index.hpp:40
constexpr int_t< I > int_
Variable template to generate int-type.
Definition: Index.hpp:19
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
std::integral_constant< int, I > int_t
A wrapper for int type.
Definition: Index.hpp:15
constexpr index_t< I > index_
Variable template to generate std::size_t-type.
Definition: Index.hpp:35
std::integral_constant< std::size_t, I > index_t
A wrapper for std::size_t type.
Definition: Index.hpp:31
std::integer_sequence< int, I... > Ints
class that represents a sequence of integers
Definition: Index.hpp:23