00001
00002
00003 #ifndef DUNE_COMMON_TUPLEVECTOR_HH
00004 #define DUNE_COMMON_TUPLEVECTOR_HH
00005
00006 #include <tuple>
00007 #include <utility>
00008
00009 #include <dune/common/indices.hh>
00010
00011
00012
00019 namespace Dune
00020 {
00021
00022
00023
00029 template<class... T>
00030 class TupleVector : public std::tuple<T...>
00031 {
00032 using Base = std::tuple<T...>;
00033
00034 public:
00035
00038 template<class... TT>
00039 constexpr TupleVector(TT&&... tt) :
00040 Base(std::forward<TT>(tt)...)
00041 {}
00042
00045 constexpr TupleVector()
00046 {}
00047
00050 template<std::size_t i>
00051 constexpr decltype(auto) operator[](const Dune::index_constant<i>&) const
00052 {
00053 return std::get<i>(*this);
00054 }
00055
00058 template<std::size_t i>
00059 decltype(auto) operator[](const Dune::index_constant<i>&)
00060 {
00061 return std::get<i>(*this);
00062 }
00063
00065 static constexpr std::size_t size()
00066 {
00067 return std::tuple_size<Base>::value;
00068 }
00069 };
00070
00071
00072
00073 template<class... T>
00074 constexpr auto makeTupleVector(T&&... t)
00075 {
00076
00077
00078 return TupleVector<std::decay_t<T>...>(std::forward<T>(t)...);
00079 }
00080
00081
00082
00083 }
00084
00085 #endif // DUNE_COMMON_TUPLEVECTOR_HH