35#ifndef G2O_CERES_PUBLIC_INTERNAL_INTEGER_SEQUENCE_ALGORITHM_H_
36#define G2O_CERES_PUBLIC_INTERNAL_INTEGER_SEQUENCE_ALGORITHM_H_
60template <
typename Seq>
64template <
typename T, T N, T... Ns>
66 static constexpr T Value =
67 N +
SumImpl<std::integer_sequence<T, Ns...>>::Value;
71template <
typename T, T N1, T N2, T... Ns>
73 static constexpr T Value =
74 N1 + N2 +
SumImpl<std::integer_sequence<T, Ns...>>::Value;
78template <
typename T, T N1, T N2, T N3, T N4, T... Ns>
79struct SumImpl<
std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
80 static constexpr T Value =
81 N1 + N2 + N3 + N4 +
SumImpl<std::integer_sequence<T, Ns...>>::Value;
85template <
typename T, T N>
87 static constexpr T Value = N;
93 static constexpr T Value = T(0);
98template <
typename Seq>
100 using T =
typename Seq::value_type;
130template <
typename T, T Sum,
typename SeqIn,
typename SeqOut>
133template <
typename T, T
Sum, T N, T... Ns, T... Rs>
135 std::integer_sequence<T, Rs...>> {
138 std::integer_sequence<T, Rs...,
Sum>>::Type;
142template <
typename T, T Sum,
typename SeqOut>
151template <
typename Seq>
153 using T =
typename Seq::value_type;
161template <
typename Seq>
typename ExclusiveScanImpl< T, T(0), Seq, std::integer_sequence< T > >::Type Type
typename Seq::value_type T
typename Seq::value_type T
typename ExclusiveScanT< Seq >::Type ExclusiveScan
typename ExclusiveScanImpl< T, Sum+N, std::integer_sequence< T, Ns... >, std::integer_sequence< T, Rs..., Sum > >::Type Type