• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifdef BOOST_MSVC
2 #pragma warning(push)
3 #pragma warning(disable: 4512) // assignment operator could not be generated
4 #pragma warning(disable: 4510) // default constructor could not be generated
5 #pragma warning(disable: 4610) // can never be instantiated - user defined constructor required
6 #endif
7 #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
8 
9 #ifndef BOOST_PHOENIX_SUPPORT_VECTOR_HPP
10 #define BOOST_PHOENIX_SUPPORT_VECTOR_HPP
11 
12 #include <boost/phoenix/core/limits.hpp>
13 #include <boost/phoenix/support/iterate.hpp>
14 #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
15 #include <boost/fusion/adapted/struct/adapt_struct.hpp>
16 
17 #define BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL BOOST_FUSION_ADAPT_TPL_STRUCT
18 
19 #include <boost/phoenix/support/preprocessed/vector.hpp>
20 
21 #endif
22 
23 #else
24 
25 #if !BOOST_PHOENIX_IS_ITERATING
26 
27 #ifndef BOOST_PHOENIX_SUPPORT_VECTOR_HPP
28 #define BOOST_PHOENIX_SUPPORT_VECTOR_HPP
29 
30 #include <boost/phoenix/core/limits.hpp>
31 #include <boost/phoenix/support/iterate.hpp>
32 #include <boost/preprocessor/repetition/enum_shifted_params.hpp>
33 #include <boost/fusion/adapted/struct/adapt_struct.hpp>
34 
35 #define BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL BOOST_FUSION_ADAPT_TPL_STRUCT
36 
37 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
38 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/vector_" BOOST_PHOENIX_LIMIT_STR ".hpp")
39 #endif
40 /*==============================================================================
41     Copyright (c) 2005-2010 Joel de Guzman
42     Copyright (c) 2010 Thomas Heller
43 
44     Distributed under the Boost Software License, Version 1.0. (See accompanying
45     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
46 ==============================================================================*/
47 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
48 #pragma wave option(preserve: 1)
49 #endif
50 
51 #define M0(Z, N, D)                                                             \
52     typedef BOOST_PP_CAT(A, N) BOOST_PP_CAT(member_type, N);                    \
53     BOOST_PP_CAT(A, N) BOOST_PP_CAT(a, N);                                      \
54 /**/
55 #define M1(Z, N, D)                                                             \
56     (BOOST_PP_CAT(A, N))                                                        \
57 /**/
58 #define M2(Z, N, D)                                                             \
59     (BOOST_PP_CAT(T, N))                                                        \
60 /**/
61 #define M3(Z, N, D)                                                             \
62     (BOOST_PP_CAT(A, N), BOOST_PP_CAT(a, N))                                    \
63 /**/
64 
65 namespace boost { namespace phoenix
66 {
67     template <typename Dummy = void>
68     struct vector0
69     {
70         typedef mpl::int_<0> size_type;
71         static const int size_value = 0;
72     };
73 
74     template <int> struct vector_chooser;
75 
76     template <>
77     struct vector_chooser<0>
78     {
79         template <typename Dummy = void>
80         struct apply
81         {
82             typedef vector0<> type;
83         };
84     };
85 }}
86 
87 
88 #define BOOST_PHOENIX_ITERATION_PARAMS                                          \
89         (3, (1, BOOST_PP_INC(BOOST_PHOENIX_LIMIT),                              \
90         <boost/phoenix/support/vector.hpp>))
91 #include BOOST_PHOENIX_ITERATE()
92 
93 #undef M0
94 #undef M1
95 #undef M2
96 #undef M3
97 
98 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
99 #pragma wave option(output: null)
100 #endif
101 
102 #endif
103 
104 #else
105 
106 namespace boost { namespace phoenix
107 {
108     template <BOOST_PHOENIX_typename_A>
BOOST_PP_CAT(vector,BOOST_PHOENIX_ITERATION)109     struct BOOST_PP_CAT(vector, BOOST_PHOENIX_ITERATION)
110     {
111         BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M0, _)
112 
113         typedef mpl::int_<BOOST_PHOENIX_ITERATION> size_type;
114         static const int size_value = BOOST_PHOENIX_ITERATION;
115 
116         typedef
117             BOOST_PP_CAT(vector, BOOST_PP_DEC(BOOST_PHOENIX_ITERATION))<BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PHOENIX_ITERATION, A)>
118             args_type;
119 
120         args_type args() const
121         {
122             args_type r = {BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PHOENIX_ITERATION, a)};
123             return r;
124         }
125     };
126 
127     template <>
128     struct vector_chooser<BOOST_PHOENIX_ITERATION>
129     {
130         template <BOOST_PHOENIX_typename_A>
131         struct apply
132         {
133             typedef BOOST_PP_CAT(vector, BOOST_PHOENIX_ITERATION)<BOOST_PHOENIX_A> type;
134         };
135     };
136 }}
137 
138 #define BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM0                                \
139     BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M1, _)                             \
140 /**/
141 #define BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM1                                \
142    (                                                                            \
143         BOOST_PP_CAT(                                                           \
144             boost::phoenix::vector                                              \
145           , BOOST_PHOENIX_ITERATION                                             \
146         )                                                                       \
147     )                                                                           \
148     BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M1, _)                             \
149 /**/
150 #define BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM2                                \
151     BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M3, _)                             \
152 /**/
153 
154 BOOST_FUSION_ADAPT_TPL_STRUCT_NO_PARTIAL(
155     BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM0
156   , BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM1
157   , BOOST_PHOENIX_SUPPORT_VECTOR_ADAT_PARAM2
158 )
159 
160 #endif
161 
162 #endif
163 
164 #ifdef BOOST_MSVC
165 #pragma warning(pop)
166 #endif
167