From 1f3174baa786be8d246e09acfac1daf50939f5f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sat, 12 Nov 2016 19:07:34 +0100 Subject: [PATCH] Make build_number_seq with O(logN) instantiations instead of O(N) --- .../detail/variadic_templates_tools.hpp | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/include/boost/container/detail/variadic_templates_tools.hpp b/include/boost/container/detail/variadic_templates_tools.hpp index f5101c5..e9fa9cd 100644 --- a/include/boost/container/detail/variadic_templates_tools.hpp +++ b/include/boost/container/detail/variadic_templates_tools.hpp @@ -136,21 +136,25 @@ typename get_impl >::const_type get(const tuple& // in a function call. //////////////////////////////////////////////////// -template -struct index_tuple{}; +template struct index_tuple{ typedef index_tuple type; }; -template > -struct build_number_seq; +template struct concat_index_tuple; -template -struct build_number_seq > - : build_number_seq > +template +struct concat_index_tuple, index_tuple> + : index_tuple{}; + +template struct build_number_seq; + +template +struct build_number_seq + : concat_index_tuple::type + ,typename build_number_seq::type + >::type {}; -template -struct build_number_seq<0, index_tuple > -{ typedef index_tuple type; }; - +template<> struct build_number_seq<0> : index_tuple<>{}; +template<> struct build_number_seq<1> : index_tuple<0>{}; }}} //namespace boost { namespace container { namespace container_detail {