1 #ifndef _INTSEQTRANSPOSE_HPP 2 #define _INTSEQTRANSPOSE_HPP 8 #include <ints/IntSeq.hpp> 9 #include <ints/Ranges.hpp> 10 #include <tuple/TupleClass.hpp> 22 static_assert(Sl>=0
and ((Sl<Is::size) && ...),
"Sl must be between 0 and the maximal size of the IntSeq");
24 return IntSeq<Is::
template element<Sl>()...>{};
33 decltype(_IntSeqsSlice<Sl>(Tp{}));
43 DECLAUTO _IntSeqsSlices(IntSeq<Sl...> listOfSlices,
44 Tuple<Is...> tupleOfIntSeqs)
48 Tuple<IntSeqsSlice<Sl,Tuple<Is...>>...>;
59 template<
typename...Is>
60 DECLAUTO _IntSeqsTranspose(Tuple<Is...> tupleOfIntSeqs)
62 if constexpr(
sizeof...(Is)!=0)
70 TupleElementType<0,Tp>::size;
73 static_assert(((Is::size==size0) && ...),
"All IntSeq must have ths same size");
77 decltype(_IntSeqsSlices(IntsUpTo<size0>{},
90 using IntSeqsTranspose=
91 decltype(_IntSeqsTranspose(Tp{}));
decltype(auto) _IntSeqsSlice(Tuple< Is... > tupleOfIntSeqs)
#define DECLAUTO
Short name for decltype(auto)