| /*============================================================================= |
| Copyright (c) 2001-2006 Joel de Guzman |
| Copyright (c) 2005-2006 Dan Marsden |
| |
| Distributed under 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(BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330) |
| #define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330 |
| |
| #include <boost/fusion/container/deque/limits.hpp> |
| #include <boost/fusion/container/deque/detail/keyed_element.hpp> |
| |
| #include <boost/preprocessor/iterate.hpp> |
| #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> |
| #include <boost/preprocessor/repetition/enum_shifted_params.hpp> |
| #include <boost/preprocessor/repetition/enum.hpp> |
| #include <boost/preprocessor/repetition/enum_params.hpp> |
| #include <boost/type_traits/add_reference.hpp> |
| |
| #include <boost/mpl/plus.hpp> |
| #include <boost/mpl/int.hpp> |
| #include <boost/mpl/print.hpp> |
| |
| #define FUSION_VOID(z, n, _) void_ |
| |
| namespace boost { namespace fusion { |
| |
| struct void_; |
| |
| namespace detail { |
| |
| template<typename Key, typename Value, typename Rest> |
| struct keyed_element; |
| |
| struct nil_keyed_element; |
| |
| template<typename N, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)> |
| struct deque_keyed_values_impl; |
| |
| template<typename N> |
| struct deque_keyed_values_impl<N, BOOST_PP_ENUM(FUSION_MAX_DEQUE_SIZE, FUSION_VOID, _)> |
| { |
| typedef nil_keyed_element type; |
| |
| static type call() |
| { |
| return type(); |
| } |
| }; |
| |
| template<typename N, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)> |
| struct deque_keyed_values_impl |
| { |
| typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index; |
| |
| typedef typename deque_keyed_values_impl< |
| next_index, |
| BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail; |
| typedef keyed_element<N, T0, tail> type; |
| |
| #include <boost/fusion/container/deque/detail/deque_keyed_values_call.hpp> |
| |
| }; |
| |
| template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)> |
| struct deque_keyed_values |
| : deque_keyed_values_impl<mpl::int_<0>, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)> |
| {}; |
| |
| }}} |
| |
| #undef FUSION_VOID |
| |
| #endif |