full_lambda.hpp
Go to the documentation of this file.
1 
2 #if !defined(BOOST_PP_IS_ITERATING)
3 
5 
6 #ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
7 #define BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
8 
9 // Copyright Aleksey Gurtovoy 2001-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/lambda_fwd.hpp>
23 # include <boost/mpl/bind_fwd.hpp>
24 # include <boost/mpl/protect.hpp>
25 # include <boost/mpl/quote.hpp>
26 # include <boost/mpl/arg.hpp>
27 # include <boost/mpl/bool.hpp>
28 # include <boost/mpl/int_fwd.hpp>
32 # if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
33 # include <boost/mpl/if.hpp>
34 # endif
35 #endif
36 
39 
40 #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
41  && !defined(BOOST_MPL_PREPROCESSING_MODE)
42 
43 # define BOOST_MPL_PREPROCESSED_HEADER full_lambda.hpp
45 
46 #else
47 
52 # include <boost/mpl/aux_/preprocessor/repeat.hpp>
53 # include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
54 
59 
60 namespace boost { namespace mpl {
61 
62 // local macros, #undef-ined at the end of the header
63 # define AUX778076_LAMBDA_PARAMS(i_, param) \
64  BOOST_MPL_PP_PARAMS(i_, param) \
65 
66 
67 # define AUX778076_BIND_PARAMS(param) \
68  BOOST_MPL_PP_PARAMS( \
69  BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
70  , param \
71  ) \
72 
73 
74 # define AUX778076_BIND_N_PARAMS(i_, param) \
75  BOOST_PP_COMMA_IF(i_) \
76  BOOST_MPL_PP_PARAMS(i_, param) \
77 
78 
79 # define AUX778076_ARITY_PARAM(param) \
80  BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) \
81 
82 
83 
84 #define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
85 namespace aux {
86 
87 template<
88  BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)
89  >
90 struct lambda_or
91  : true_
92 {
93 };
94 
95 template<>
96 struct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >
97  : false_
98 {
99 };
100 
101 } // namespace aux
102 #undef n_
103 
104 template<
105  typename T
106  , typename Tag
107  AUX778076_ARITY_PARAM(typename Arity)
108  >
109 struct lambda
110 {
111  typedef false_ is_le;
112  typedef T result_;
113  typedef T type;
114 };
115 
116 template<
117  typename T
118  >
119 struct is_lambda_expression
120  : lambda<T>::is_le
121 {
122 };
123 
124 
125 template< int N, typename Tag >
126 struct lambda< arg<N>,Tag AUX778076_ARITY_PARAM(int_<-1>) >
127 {
128  typedef true_ is_le;
129  typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
130  typedef mpl::protect<result_> type;
131 };
132 
133 
134 #define BOOST_PP_ITERATION_PARAMS_1 \
135  (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/full_lambda.hpp>))
136 #include BOOST_PP_ITERATE()
137 
139 template< typename T, typename Tag >
140 struct lambda< mpl::protect<T>,Tag AUX778076_ARITY_PARAM(int_<1>) >
141 {
142  typedef false_ is_le;
143  typedef mpl::protect<T> result_;
144  typedef result_ type;
145 };
146 
148 template<
149  typename F, AUX778076_BIND_PARAMS(typename T)
150  , typename Tag
151  >
152 struct lambda<
153  bind<F,AUX778076_BIND_PARAMS(T)>
154  , Tag
155  AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)>)
156  >
157 {
158  typedef false_ is_le;
159  typedef bind<F, AUX778076_BIND_PARAMS(T)> result_;
160  typedef result_ type;
161 };
162 
163 
164 #if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
165 
166 template<
167  typename F
168  , typename Tag1
169  , typename Tag2
170  , typename Arity
171  >
172 struct lambda<
173  lambda<F,Tag1,Arity>
174  , Tag2
175  , int_<3>
176  >
177 {
178  typedef lambda< F,Tag2 > l1;
179  typedef lambda< Tag1,Tag2 > l2;
180 
181  typedef typename l1::is_le is_le;
182  typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
184 
185  typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
186  typedef typename le_result_::result_ result_;
187  typedef typename le_result_::type type;
188 };
189 
190 #elif !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
191 
193 template<
194  typename F, typename Tag1, typename Tag2
195  >
196 struct lambda<
197  lambda< F,Tag1 >
198  , Tag2
199  >
200 {
201  typedef lambda< F,Tag2 > l1;
202  typedef lambda< Tag1,Tag2 > l2;
203 
204  typedef typename l1::is_le is_le;
205  typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
206  typedef typename le_result_::result_ result_;
207  typedef typename le_result_::type type;
208 };
209 
210 #endif
211 
212 # undef AUX778076_ARITY_PARAM
213 # undef AUX778076_BIND_N_PARAMS
214 # undef AUX778076_BIND_PARAMS
215 # undef AUX778076_LAMBDA_PARAMS
216 
217 #if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
218 BOOST_MPL_AUX_NA_SPEC(2, lambda)
219 #else
220 BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
221 #endif
222 
223 }}
224 
225 #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
226 #endif // BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
227 
229 
230 // For gcc 4.4 compatability, we must include the
231 // BOOST_PP_ITERATION_DEPTH test inside an #else clause.
232 #else // BOOST_PP_IS_ITERATING
233 #if BOOST_PP_ITERATION_DEPTH() == 1
234 #define i_ BOOST_PP_FRAME_ITERATION(1)
235 
236 #if i_ > 0
237 
238 namespace aux {
239 
240 # define AUX778076_RESULT(unused, i_, T) \
241  BOOST_PP_COMMA_IF(i_) \
242  typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::result_ \
243 
244 
245 # define AUX778076_TYPE(unused, i_, T) \
246  BOOST_PP_COMMA_IF(i_) \
247  typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::type \
248 
249 
250 template<
251  typename IsLE, typename Tag
252  , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
253  , AUX778076_LAMBDA_PARAMS(i_, typename L)
254  >
255 struct BOOST_PP_CAT(le_result,i_)
256 {
257  typedef F<
258  BOOST_MPL_PP_REPEAT(i_, AUX778076_TYPE, L)
259  > result_;
260 
261  typedef result_ type;
262 };
263 
264 template<
265  typename Tag
266  , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
267  , AUX778076_LAMBDA_PARAMS(i_, typename L)
268  >
269 struct BOOST_PP_CAT(le_result,i_)< true_,Tag,F,AUX778076_LAMBDA_PARAMS(i_, L) >
270 {
271  typedef BOOST_PP_CAT(bind,i_)<
272  BOOST_PP_CAT(quote,i_)<F,Tag>
273  , BOOST_MPL_PP_REPEAT(i_, AUX778076_RESULT, L)
274  > result_;
275 
276  typedef mpl::protect<result_> type;
277 };
278 
279 # undef AUX778076_TYPE
280 # undef AUX778076_RESULT
281 
282 } // namespace aux
283 
284 
285 # define AUX778076_LAMBDA_TYPEDEF(unused, i_, T) \
286  typedef lambda< BOOST_PP_CAT(T, BOOST_PP_INC(i_)), Tag > \
287  BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \
288 
289 
290 # define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \
291  typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \
292  BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \
293 
294 
295 # define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \
296  BOOST_PP_COMMA_IF(i_) \
297  BOOST_PP_CAT(is_le,BOOST_PP_INC(i_))::value \
298 
299 
300 template<
301  template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
302  , AUX778076_LAMBDA_PARAMS(i_, typename T)
303  , typename Tag
304  >
305 struct lambda<
306  F<AUX778076_LAMBDA_PARAMS(i_, T)>
307  , Tag
308  AUX778076_ARITY_PARAM(int_<i_>)
309  >
310 {
311  BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, T)
312  BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)
313 
314  typedef typename aux::lambda_or<
315  BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)
316  >::type is_le;
317 
318  typedef aux::BOOST_PP_CAT(le_result,i_)<
319  is_le, Tag, F, AUX778076_LAMBDA_PARAMS(i_, l)
320  > le_result_;
321 
322  typedef typename le_result_::result_ result_;
323  typedef typename le_result_::type type;
324 };
325 
326 
327 # undef AUX778076_IS_LAMBDA_EXPR
328 # undef AUX778076_IS_LE_TYPEDEF
329 # undef AUX778076_LAMBDA_TYPEDEF
330 
331 #endif // i_ > 0
332 
333 template<
334  typename F AUX778076_BIND_N_PARAMS(i_, typename T)
335  , typename Tag
336  >
337 struct lambda<
338  BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_, T)>
339  , Tag
340  AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(i_)>)
341  >
342 {
343  typedef false_ is_le;
344  typedef BOOST_PP_CAT(bind,i_)<
345  F
346  AUX778076_BIND_N_PARAMS(i_, T)
347  > result_;
348 
349  typedef result_ type;
350 };
351 
352 #undef i_
353 #endif // BOOST_PP_ITERATION_DEPTH()
354 #endif // BOOST_PP_IS_ITERATING
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
#define BOOST_MPL_AUX_NA_SPEC(i, name)
Definition: na_spec.hpp:161
#define BOOST_MPL_AUX_NA_SPEC2(i, j, name)
Definition: na_spec.hpp:166
#define BOOST_MPL_PP_DEFAULT_PARAMS(n, p, v)
#define BOOST_PP_CAT(a, b)
Definition: cat.hpp:22
GLenum type


librealsense2
Author(s): Sergey Dorodnicov , Doron Hirshberg , Mark Horn , Reagan Lopez , Itay Carpis
autogenerated on Mon May 3 2021 02:47:15