1 // Copyright (c) 2015-2018 Daniel Frey 2 // Please see LICENSE for license or visit https://github.com/taocpp/sequences/ 3 4 #ifndef TAO_SEQ_PARTIAL_SUM_HPP 5 #define TAO_SEQ_PARTIAL_SUM_HPP 6 7 #include <cstddef> 8 #include <utility> 9 10 #include "make_integer_sequence.hpp" 11 #include "sum.hpp" 12 13 namespace tao 14 { 15 namespace seq 16 { 17 namespace impl 18 { 19 template< std::size_t, typename S, typename = make_index_sequence< S::size() > > 20 struct partial_sum; 21 22 template< std::size_t I, typename T, T... Ns, std::size_t... Is > 23 struct partial_sum< I, integer_sequence< T, Ns... >, index_sequence< Is... > > 24 : seq::sum< T, ( ( Is < I ) ? Ns : 0 )... > 25 { 26 static_assert( I <= sizeof...( Is ), "tao::seq::partial_sum<I, S>: I is out of range" ); 27 }; 28 29 } // namespace impl 30 31 template< std::size_t I, typename T, T... Ns > 32 struct partial_sum 33 : impl::partial_sum< I, integer_sequence< T, Ns... > > 34 { 35 }; 36 37 template< std::size_t I, typename T, T... Ns > 38 struct partial_sum< I, integer_sequence< T, Ns... > > 39 : impl::partial_sum< I, integer_sequence< T, Ns... > > 40 { 41 }; 42 43 } // namespace seq 44 45 } // namespace tao 46 47 #endif 48