Publishing R3
[platform/upstream/dldt.git] / inference-engine / thirdparty / clDNN / common / boost / 1.64.0 / include / boost-1_64 / boost / proto / context / detail / preprocessed / default_eval.hpp
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     };