/*============================================================================= Copyright (c) 2001-2003 Joel de Guzman Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_BUILDER_HPP) #define FUSION_SEQUENCE_DETAIL_TUPLE_BUILDER_HPP #include #include // include tuple0..N where N is FUSION_MAX_TUPLE_SIZE #include #if (FUSION_MAX_TUPLE_SIZE > 10) #include #endif #if (FUSION_MAX_TUPLE_SIZE > 20) #include #endif #if (FUSION_MAX_TUPLE_SIZE > 30) #include #endif #if (FUSION_MAX_TUPLE_SIZE > 40) #include #endif #include #include #include #include #include #include #include namespace boost { namespace fusion { struct void_t; }} namespace boost { namespace fusion { namespace detail { template struct get_tuple_n; template <> struct get_tuple_n<0> { template struct call { typedef tuple0 type; }; }; #define FUSION_GET_TUPLE_N(z, n, _) \ template <> \ struct get_tuple_n \ { \ template \ struct call \ { \ typedef BOOST_PP_CAT(tuple, n) type; \ }; \ }; BOOST_PP_REPEAT_FROM_TO(1, FUSION_MAX_TUPLE_SIZE, FUSION_GET_TUPLE_N, _) #undef FUSION_GET_TUPLE_N template struct tuple_builder { typedef mpl::BOOST_PP_CAT(vector, FUSION_MAX_TUPLE_SIZE) input; typedef typename mpl::begin::type begin; typedef typename mpl::find::type end; typedef typename mpl::distance::type size; typedef typename get_tuple_n::template call::type type; }; }}} #endif