]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/proto/include/boost/proto/context/detail/preprocessed/default_eval.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / proto / include / boost / proto / context / detail / preprocessed / default_eval.hpp
CommitLineData
7c673cae
FG
1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file default_eval.hpp
3 /// Contains specializations of the default_eval\<\> class template.
4 //
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
6 // Software License, Version 1.0. (See accompanying file
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 template<typename Expr, typename Context>
9 struct default_eval<Expr, Context, proto::tag::function, 3>
10 {
11 typedef
12 typename proto::detail::result_of_fixup<
13 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
14 >::type
15 function_type;
16 typedef
17 typename BOOST_PROTO_RESULT_OF<
18 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type)
19 >::type
20 result_type;
21 result_type operator ()(Expr &expr, Context &context) const
22 {
23 return this->invoke(expr, context, is_member_function_pointer<function_type>());
24 }
25 private:
26 result_type invoke(Expr &expr, Context &context, mpl::false_) const
27 {
28 return proto::eval(proto::child_c< 0>( expr), context)(
29 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context)
30 );
31 }
32 result_type invoke(Expr &expr, Context &context, mpl::true_) const
33 {
34 BOOST_PROTO_USE_GET_POINTER();
35 typedef typename detail::class_member_traits<function_type>::class_type class_type;
36 return (
37 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
38 proto::eval(proto::child_c< 0>( expr), context)
39 )(proto::eval(proto::child_c< 2>( expr), context));
40 }
41 };
42 template<typename Expr, typename Context>
43 struct default_eval<Expr, Context, proto::tag::function, 4>
44 {
45 typedef
46 typename proto::detail::result_of_fixup<
47 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
48 >::type
49 function_type;
50 typedef
51 typename BOOST_PROTO_RESULT_OF<
52 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 3>::type >::type , Context >::type)
53 >::type
54 result_type;
55 result_type operator ()(Expr &expr, Context &context) const
56 {
57 return this->invoke(expr, context, is_member_function_pointer<function_type>());
58 }
59 private:
60 result_type invoke(Expr &expr, Context &context, mpl::false_) const
61 {
62 return proto::eval(proto::child_c< 0>( expr), context)(
63 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context)
64 );
65 }
66 result_type invoke(Expr &expr, Context &context, mpl::true_) const
67 {
68 BOOST_PROTO_USE_GET_POINTER();
69 typedef typename detail::class_member_traits<function_type>::class_type class_type;
70 return (
71 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
72 proto::eval(proto::child_c< 0>( expr), context)
73 )(proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context));
74 }
75 };
76 template<typename Expr, typename Context>
77 struct default_eval<Expr, Context, proto::tag::function, 5>
78 {
79 typedef
80 typename proto::detail::result_of_fixup<
81 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
82 >::type
83 function_type;
84 typedef
85 typename BOOST_PROTO_RESULT_OF<
86 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 3>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 4>::type >::type , Context >::type)
87 >::type
88 result_type;
89 result_type operator ()(Expr &expr, Context &context) const
90 {
91 return this->invoke(expr, context, is_member_function_pointer<function_type>());
92 }
93 private:
94 result_type invoke(Expr &expr, Context &context, mpl::false_) const
95 {
96 return proto::eval(proto::child_c< 0>( expr), context)(
97 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context)
98 );
99 }
100 result_type invoke(Expr &expr, Context &context, mpl::true_) const
101 {
102 BOOST_PROTO_USE_GET_POINTER();
103 typedef typename detail::class_member_traits<function_type>::class_type class_type;
104 return (
105 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
106 proto::eval(proto::child_c< 0>( expr), context)
107 )(proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context));
108 }
109 };
110 template<typename Expr, typename Context>
111 struct default_eval<Expr, Context, proto::tag::function, 6>
112 {
113 typedef
114 typename proto::detail::result_of_fixup<
115 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
116 >::type
117 function_type;
118 typedef
119 typename BOOST_PROTO_RESULT_OF<
120 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 3>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 4>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 5>::type >::type , Context >::type)
121 >::type
122 result_type;
123 result_type operator ()(Expr &expr, Context &context) const
124 {
125 return this->invoke(expr, context, is_member_function_pointer<function_type>());
126 }
127 private:
128 result_type invoke(Expr &expr, Context &context, mpl::false_) const
129 {
130 return proto::eval(proto::child_c< 0>( expr), context)(
131 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context)
132 );
133 }
134 result_type invoke(Expr &expr, Context &context, mpl::true_) const
135 {
136 BOOST_PROTO_USE_GET_POINTER();
137 typedef typename detail::class_member_traits<function_type>::class_type class_type;
138 return (
139 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
140 proto::eval(proto::child_c< 0>( expr), context)
141 )(proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context));
142 }
143 };
144 template<typename Expr, typename Context>
145 struct default_eval<Expr, Context, proto::tag::function, 7>
146 {
147 typedef
148 typename proto::detail::result_of_fixup<
149 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
150 >::type
151 function_type;
152 typedef
153 typename BOOST_PROTO_RESULT_OF<
154 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 3>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 4>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 5>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 6>::type >::type , Context >::type)
155 >::type
156 result_type;
157 result_type operator ()(Expr &expr, Context &context) const
158 {
159 return this->invoke(expr, context, is_member_function_pointer<function_type>());
160 }
161 private:
162 result_type invoke(Expr &expr, Context &context, mpl::false_) const
163 {
164 return proto::eval(proto::child_c< 0>( expr), context)(
165 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context)
166 );
167 }
168 result_type invoke(Expr &expr, Context &context, mpl::true_) const
169 {
170 BOOST_PROTO_USE_GET_POINTER();
171 typedef typename detail::class_member_traits<function_type>::class_type class_type;
172 return (
173 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
174 proto::eval(proto::child_c< 0>( expr), context)
175 )(proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context));
176 }
177 };
178 template<typename Expr, typename Context>
179 struct default_eval<Expr, Context, proto::tag::function, 8>
180 {
181 typedef
182 typename proto::detail::result_of_fixup<
183 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
184 >::type
185 function_type;
186 typedef
187 typename BOOST_PROTO_RESULT_OF<
188 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 3>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 4>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 5>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 6>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 7>::type >::type , Context >::type)
189 >::type
190 result_type;
191 result_type operator ()(Expr &expr, Context &context) const
192 {
193 return this->invoke(expr, context, is_member_function_pointer<function_type>());
194 }
195 private:
196 result_type invoke(Expr &expr, Context &context, mpl::false_) const
197 {
198 return proto::eval(proto::child_c< 0>( expr), context)(
199 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context) , proto::eval(proto::child_c< 7>( expr), context)
200 );
201 }
202 result_type invoke(Expr &expr, Context &context, mpl::true_) const
203 {
204 BOOST_PROTO_USE_GET_POINTER();
205 typedef typename detail::class_member_traits<function_type>::class_type class_type;
206 return (
207 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
208 proto::eval(proto::child_c< 0>( expr), context)
209 )(proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context) , proto::eval(proto::child_c< 7>( expr), context));
210 }
211 };
212 template<typename Expr, typename Context>
213 struct default_eval<Expr, Context, proto::tag::function, 9>
214 {
215 typedef
216 typename proto::detail::result_of_fixup<
217 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
218 >::type
219 function_type;
220 typedef
221 typename BOOST_PROTO_RESULT_OF<
222 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 3>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 4>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 5>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 6>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 7>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 8>::type >::type , Context >::type)
223 >::type
224 result_type;
225 result_type operator ()(Expr &expr, Context &context) const
226 {
227 return this->invoke(expr, context, is_member_function_pointer<function_type>());
228 }
229 private:
230 result_type invoke(Expr &expr, Context &context, mpl::false_) const
231 {
232 return proto::eval(proto::child_c< 0>( expr), context)(
233 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context) , proto::eval(proto::child_c< 7>( expr), context) , proto::eval(proto::child_c< 8>( expr), context)
234 );
235 }
236 result_type invoke(Expr &expr, Context &context, mpl::true_) const
237 {
238 BOOST_PROTO_USE_GET_POINTER();
239 typedef typename detail::class_member_traits<function_type>::class_type class_type;
240 return (
241 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
242 proto::eval(proto::child_c< 0>( expr), context)
243 )(proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context) , proto::eval(proto::child_c< 7>( expr), context) , proto::eval(proto::child_c< 8>( expr), context));
244 }
245 };
246 template<typename Expr, typename Context>
247 struct default_eval<Expr, Context, proto::tag::function, 10>
248 {
249 typedef
250 typename proto::detail::result_of_fixup<
251 typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 0>::type >::type , Context >::type
252 >::type
253 function_type;
254 typedef
255 typename BOOST_PROTO_RESULT_OF<
256 function_type(typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 1>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 2>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 3>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 4>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 5>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 6>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 7>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 8>::type >::type , Context >::type , typename proto::result_of::eval< typename remove_reference< typename proto::result_of::child_c< Expr, 9>::type >::type , Context >::type)
257 >::type
258 result_type;
259 result_type operator ()(Expr &expr, Context &context) const
260 {
261 return this->invoke(expr, context, is_member_function_pointer<function_type>());
262 }
263 private:
264 result_type invoke(Expr &expr, Context &context, mpl::false_) const
265 {
266 return proto::eval(proto::child_c< 0>( expr), context)(
267 proto::eval(proto::child_c< 1>( expr), context) , proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context) , proto::eval(proto::child_c< 7>( expr), context) , proto::eval(proto::child_c< 8>( expr), context) , proto::eval(proto::child_c< 9>( expr), context)
268 );
269 }
270 result_type invoke(Expr &expr, Context &context, mpl::true_) const
271 {
272 BOOST_PROTO_USE_GET_POINTER();
273 typedef typename detail::class_member_traits<function_type>::class_type class_type;
274 return (
275 BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->*
276 proto::eval(proto::child_c< 0>( expr), context)
277 )(proto::eval(proto::child_c< 2>( expr), context) , proto::eval(proto::child_c< 3>( expr), context) , proto::eval(proto::child_c< 4>( expr), context) , proto::eval(proto::child_c< 5>( expr), context) , proto::eval(proto::child_c< 6>( expr), context) , proto::eval(proto::child_c< 7>( expr), context) , proto::eval(proto::child_c< 8>( expr), context) , proto::eval(proto::child_c< 9>( expr), context));
278 }
279 };