File indexing completed on 2025-02-23 09:35:12
0001
0002
0003
0004
0005
0006
0007
0008 #if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330)
0009 #define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330
0010
0011 #if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
0012 #error "C++03 only! This file should not have been included"
0013 #endif
0014
0015 #include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
0016 #include <boost/fusion/container/deque/detail/keyed_element.hpp>
0017
0018 #include <boost/preprocessor/iterate.hpp>
0019 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
0020 #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
0021 #include <boost/preprocessor/repetition/enum.hpp>
0022 #include <boost/preprocessor/repetition/enum_params.hpp>
0023 #include <boost/type_traits/add_reference.hpp>
0024
0025 #include <boost/mpl/plus.hpp>
0026 #include <boost/mpl/int.hpp>
0027
0028 #define FUSION_VOID(z, n, _) void_
0029
0030 namespace boost { namespace fusion
0031 {
0032 struct void_;
0033 }}
0034
0035 #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
0036 #include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp>
0037 #else
0038 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
0039 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_keyed_values" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
0040 #endif
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
0052 #pragma wave option(preserve: 1)
0053 #endif
0054
0055 namespace boost { namespace fusion { namespace detail
0056 {
0057 template<typename Key, typename Value, typename Rest>
0058 struct keyed_element;
0059
0060 struct nil_keyed_element;
0061
0062 template<typename N, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
0063 struct deque_keyed_values_impl;
0064
0065 template<typename N>
0066 struct deque_keyed_values_impl<N, BOOST_PP_ENUM(FUSION_MAX_DEQUE_SIZE, FUSION_VOID, _)>
0067 {
0068 typedef nil_keyed_element type;
0069
0070 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0071 static type construct()
0072 {
0073 return type();
0074 }
0075
0076 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0077 static type forward_()
0078 {
0079 return type();
0080 }
0081 };
0082
0083 template<typename N, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
0084 struct deque_keyed_values_impl
0085 {
0086 typedef mpl::int_<mpl::plus<N, mpl::int_<1> >::value> next_index;
0087
0088 typedef typename deque_keyed_values_impl<
0089 next_index,
0090 BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail;
0091 typedef keyed_element<N, T0, tail> type;
0092
0093 #include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp>
0094
0095 };
0096
0097 template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_DEQUE_SIZE, typename T, void_)>
0098 struct deque_keyed_values
0099 : deque_keyed_values_impl<mpl::int_<0>, BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>
0100 {};
0101
0102 }}}
0103
0104 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
0105 #pragma wave option(output: null)
0106 #endif
0107
0108 #endif
0109
0110 #undef FUSION_VOID
0111
0112 #endif