mirror of
https://github.com/boostorg/mp11.git
synced 2025-08-03 14:34:27 +02:00
Improve compilation performance of mp_with_index<N> for large N
This commit is contained in:
@@ -40,27 +40,14 @@ template<std::size_t N> struct mp_with_index_impl_
|
|||||||
{
|
{
|
||||||
template<std::size_t K, class F> static BOOST_MP11_CONSTEXPR14 decltype(std::declval<F>()(std::declval<mp_size_t<0>>())) call( std::size_t i, F && f )
|
template<std::size_t K, class F> static BOOST_MP11_CONSTEXPR14 decltype(std::declval<F>()(std::declval<mp_size_t<0>>())) call( std::size_t i, F && f )
|
||||||
{
|
{
|
||||||
switch( i )
|
if( i < N / 2 )
|
||||||
{
|
{
|
||||||
case 0: return std::forward<F>(f)( mp_size_t<K+0>() );
|
return mp_with_index_impl_<N/2>::template call<K>( i, std::forward<F>(f) );
|
||||||
case 1: return std::forward<F>(f)( mp_size_t<K+1>() );
|
}
|
||||||
case 2: return std::forward<F>(f)( mp_size_t<K+2>() );
|
else
|
||||||
case 3: return std::forward<F>(f)( mp_size_t<K+3>() );
|
{
|
||||||
case 4: return std::forward<F>(f)( mp_size_t<K+4>() );
|
return mp_with_index_impl_<N-N/2>::template call<K+N/2>( i - N/2, std::forward<F>(f) );
|
||||||
case 5: return std::forward<F>(f)( mp_size_t<K+5>() );
|
|
||||||
case 6: return std::forward<F>(f)( mp_size_t<K+6>() );
|
|
||||||
case 7: return std::forward<F>(f)( mp_size_t<K+7>() );
|
|
||||||
case 8: return std::forward<F>(f)( mp_size_t<K+8>() );
|
|
||||||
case 9: return std::forward<F>(f)( mp_size_t<K+9>() );
|
|
||||||
case 10: return std::forward<F>(f)( mp_size_t<K+10>() );
|
|
||||||
case 11: return std::forward<F>(f)( mp_size_t<K+11>() );
|
|
||||||
case 12: return std::forward<F>(f)( mp_size_t<K+12>() );
|
|
||||||
case 13: return std::forward<F>(f)( mp_size_t<K+13>() );
|
|
||||||
case 14: return std::forward<F>(f)( mp_size_t<K+14>() );
|
|
||||||
case 15: return std::forward<F>(f)( mp_size_t<K+15>() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mp_with_index_impl_<N-16>::template call<K+16>( i-16, std::forward<F>(f) );
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user