apply.hpp
Go to the documentation of this file.
1 
2 #if !defined(BOOST_PP_IS_ITERATING)
3 
5 
6 #ifndef BOOST_MPL_APPLY_HPP_INCLUDED
7 #define BOOST_MPL_APPLY_HPP_INCLUDED
8 
9 // Copyright Aleksey Gurtovoy 2000-2004
10 //
11 // Distributed under the Boost Software License, Version 1.0.
12 // (See accompanying file LICENSE_1_0.txt or copy at
13 // http://www.boost.org/LICENSE_1_0.txt)
14 //
15 // See http://www.boost.org/libs/mpl for documentation.
16 
17 // $Id$
18 // $Date$
19 // $Revision$
20 
21 #if !defined(BOOST_MPL_PREPROCESSING_MODE)
22 # include <boost/mpl/apply_fwd.hpp>
23 # include <boost/mpl/apply_wrap.hpp>
25 # include <boost/mpl/lambda.hpp>
26 # include <boost/mpl/aux_/na.hpp>
28 #endif
29 
31 
32 #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
33  && !defined(BOOST_MPL_PREPROCESSING_MODE)
34 
35 # define BOOST_MPL_PREPROCESSED_HEADER apply.hpp
37 
38 #else
39 
43 # include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
51 
56 
57 namespace boost { namespace mpl {
58 
59 // local macros, #undef-ined at the end of the header
60 # define AUX778076_APPLY_PARAMS(param) \
61  BOOST_MPL_PP_PARAMS( \
62  BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
63  , param \
64  ) \
65 
66 
67 # define AUX778076_APPLY_DEF_PARAMS(param, value) \
68  BOOST_MPL_PP_DEFAULT_PARAMS( \
69  BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
70  , param \
71  , value \
72  ) \
73 
74 
75 # define AUX778076_APPLY_N_PARAMS(n, param) \
76  BOOST_MPL_PP_PARAMS(n, param) \
77 
78 
79 # define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \
80  BOOST_PP_COMMA_IF(n) \
81  BOOST_MPL_PP_PARAMS(n, param) \
82 
83 
84 # define AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(n, param, def) \
85  BOOST_PP_COMMA_IF(n) \
86  BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
87 
88 
89 # define AUX778076_APPLY_N_SPEC_PARAMS(n, param) \
90  BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \
91 
92 
93 
94 #define BOOST_PP_ITERATION_PARAMS_1 \
95  (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply.hpp>))
96 #include BOOST_PP_ITERATE()
97 
98 # if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
99 // real C++ version is already taken care of
100 # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
101 
102 namespace aux {
103 // apply_count_args
104 #define AUX778076_COUNT_ARGS_PREFIX apply
105 #define AUX778076_COUNT_ARGS_DEFAULT na
106 #define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
107 #include <boost/mpl/aux_/count_args.hpp>
108 }
109 
110 
111 template<
112  typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)
113  >
114 struct apply
115  : aux::apply_chooser<
116  aux::apply_count_args< AUX778076_APPLY_PARAMS(T) >::value
117  >::template result_< F, AUX778076_APPLY_PARAMS(T) >::type
118 {
119 };
120 
121 # endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
122 # endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
123 
124 # undef AUX778076_APPLY_N_SPEC_PARAMS
125 # undef AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS
126 # undef AUX778076_APPLY_N_COMMA_PARAMS
127 # undef AUX778076_APPLY_N_PARAMS
128 # undef AUX778076_APPLY_DEF_PARAMS
129 # undef AUX778076_APPLY_PARAMS
130 
131 }}
132 
133 #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
134 #endif // BOOST_MPL_APPLY_HPP_INCLUDED
135 
137 
138 // For gcc 4.4 compatability, we must include the
139 // BOOST_PP_ITERATION_DEPTH test inside an #else clause.
140 #else // BOOST_PP_IS_ITERATING
141 #if BOOST_PP_ITERATION_DEPTH() == 1
142 
143 # define i_ BOOST_PP_FRAME_ITERATION(1)
144 
145 template<
146  typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
147  >
148 struct BOOST_PP_CAT(apply,i_)
149 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
150  : BOOST_PP_CAT(apply_wrap,i_)<
151  typename lambda<F>::type
152  AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
153  >
154 {
155 #else
156 {
157  typedef typename BOOST_PP_CAT(apply_wrap,i_)<
158  typename lambda<F>::type
159  AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
160  >::type type;
161 #endif
163  BOOST_PP_INC(i_)
164  , BOOST_PP_CAT(apply,i_)
165  , (F AUX778076_APPLY_N_COMMA_PARAMS(i_,T))
166  )
167 };
168 
169 
170 #if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
171 template<>
173 struct BOOST_PP_CAT(apply,i_)<AUX778076_APPLY_N_SPEC_PARAMS(i_, int)>
174 {
175  typedef int type;
176 };
177 #endif
178 
179 # if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
180 # if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
181 
182 #if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
183 template<
185  typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
186  >
187 struct apply
188  : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >
189 {
190 };
191 #else
192 template<
193  typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
194  >
195 struct apply< F AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(i_, T, na) >
196  : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >
197 {
198 };
199 #endif
200 
201 # else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
202 
203 #if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
204 namespace aux {
205 
206 template<>
207 struct apply_chooser<i_>
208 {
209  template<
210  typename F, AUX778076_APPLY_PARAMS(typename T)
211  >
212  struct result_
213  {
214  typedef BOOST_PP_CAT(apply,i_)<
215  F AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
216  > type;
217  };
218 };
219 
220 } // namespace aux
221 #endif
222 
223 # endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
224 # endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
225 
226 # undef i_
227 
228 #endif // BOOST_PP_ITERATION_DEPTH()
229 #endif // BOOST_PP_IS_ITERATING
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
#define BOOST_WORKAROUND(symbol, test)
#define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params)
#define BOOST_MSVC
Definition: visualc.hpp:23
#define BOOST_PP_CAT(a, b)
Definition: cat.hpp:22
#define BOOST_PP_INC(x)
GLenum type
Definition: na_fwd.hpp:22


librealsense2
Author(s): LibRealSense ROS Team
autogenerated on Thu Dec 22 2022 03:41:42