File indexing completed on 2025-01-18 09:47:48
0001 #ifdef BOOST_MSVC
0002 #pragma warning(push)
0003 #pragma warning(disable: 4512)
0004 #pragma warning(disable: 4510)
0005 #pragma warning(disable: 4610)
0006 #endif
0007 #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
0008
0009 #ifndef BOOST_PHOENIX_SUPPORT_VECTOR_HPP
0010 #define BOOST_PHOENIX_SUPPORT_VECTOR_HPP
0011
0012 #include <boost/phoenix/core/limits.hpp>
0013 #include <boost/phoenix/support/iterate.hpp>
0014 #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
0015 #include <boost/fusion/adapted/struct/adapt_struct.hpp>
0016
0017 #define BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL BOOST_FUSION_ADAPT_TPL_STRUCT
0018
0019 #include <boost/phoenix/support/preprocessed/vector.hpp>
0020
0021 #endif
0022
0023 #else
0024
0025 #if !BOOST_PHOENIX_IS_ITERATING
0026
0027 #ifndef BOOST_PHOENIX_SUPPORT_VECTOR_HPP
0028 #define BOOST_PHOENIX_SUPPORT_VECTOR_HPP
0029
0030 #include <boost/phoenix/core/limits.hpp>
0031 #include <boost/phoenix/support/iterate.hpp>
0032 #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
0033 #include <boost/fusion/adapted/struct/adapt_struct.hpp>
0034
0035 #define BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL BOOST_FUSION_ADAPT_TPL_STRUCT
0036
0037 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
0038 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/vector_" BOOST_PHOENIX_LIMIT_STR ".hpp")
0039 #endif
0040
0041
0042
0043
0044
0045
0046
0047 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
0048 #pragma wave option(preserve: 1)
0049 #endif
0050
0051 #define M0(Z, N, D) \
0052 typedef BOOST_PP_CAT(A, N) BOOST_PP_CAT(member_type, N); \
0053 BOOST_PP_CAT(A, N) BOOST_PP_CAT(a, N); \
0054
0055 #define M1(Z, N, D) \
0056 (BOOST_PP_CAT(A, N)) \
0057
0058 #define M2(Z, N, D) \
0059 (BOOST_PP_CAT(T, N)) \
0060
0061 #define M3(Z, N, D) \
0062 (BOOST_PP_CAT(A, N), BOOST_PP_CAT(a, N)) \
0063
0064
0065 namespace boost { namespace phoenix
0066 {
0067 template <typename Dummy = void>
0068 struct vector0
0069 {
0070 typedef mpl::int_<0> size_type;
0071 static const int size_value = 0;
0072 };
0073
0074 template <int> struct vector_chooser;
0075
0076 template <>
0077 struct vector_chooser<0>
0078 {
0079 template <typename Dummy = void>
0080 struct apply
0081 {
0082 typedef vector0<> type;
0083 };
0084 };
0085 }}
0086
0087
0088 #define BOOST_PHOENIX_ITERATION_PARAMS \
0089 (3, (1, BOOST_PP_INC(BOOST_PHOENIX_LIMIT), \
0090 <boost/phoenix/support/vector.hpp>))
0091 #include BOOST_PHOENIX_ITERATE()
0092
0093 #undef M0
0094 #undef M1
0095 #undef M2
0096 #undef M3
0097
0098 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
0099 #pragma wave option(output: null)
0100 #endif
0101
0102 #endif
0103
0104 #else
0105
0106 namespace boost { namespace phoenix
0107 {
0108 template <BOOST_PHOENIX_typename_A>
0109 struct BOOST_PP_CAT(vector, BOOST_PHOENIX_ITERATION)
0110 {
0111 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M0, _)
0112
0113 typedef mpl::int_<BOOST_PHOENIX_ITERATION> size_type;
0114 static const int size_value = BOOST_PHOENIX_ITERATION;
0115
0116 typedef
0117 BOOST_PP_CAT(vector, BOOST_PP_DEC(BOOST_PHOENIX_ITERATION))<BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PHOENIX_ITERATION, A)>
0118 args_type;
0119
0120 args_type args() const
0121 {
0122 args_type r = {BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PHOENIX_ITERATION, a)};
0123 return r;
0124 }
0125 };
0126
0127 template <>
0128 struct vector_chooser<BOOST_PHOENIX_ITERATION>
0129 {
0130 template <BOOST_PHOENIX_typename_A>
0131 struct apply
0132 {
0133 typedef BOOST_PP_CAT(vector, BOOST_PHOENIX_ITERATION)<BOOST_PHOENIX_A> type;
0134 };
0135 };
0136 }}
0137
0138 #define BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM0 \
0139 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M1, _) \
0140
0141 #define BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM1 \
0142 ( \
0143 BOOST_PP_CAT( \
0144 boost::phoenix::vector \
0145 , BOOST_PHOENIX_ITERATION \
0146 ) \
0147 ) \
0148 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M1, _) \
0149
0150 #define BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM2 \
0151 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M3, _) \
0152
0153
0154 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
0155 BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM0
0156 , BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM1
0157 , BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM2
0158 )
0159
0160 #endif
0161
0162 #endif
0163
0164 #ifdef BOOST_MSVC
0165 #pragma warning(pop)
0166 #endif