Merge c:/dyninst/pc_bluegene/dyninst into dyn_pc_integration
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / no_ctps / apply.hpp
1
2 // Copyright Aleksey Gurtovoy 2000-2004
3 //
4 // Distributed under the Boost Software License, Version 1.0. 
5 // (See accompanying file LICENSE_1_0.txt or copy at 
6 // http://www.boost.org/LICENSE_1_0.txt)
7 //
8
9 // Preprocessed version of "boost/mpl/apply.hpp" header
10 // -- DO NOT modify by hand!
11
12 namespace boost { namespace mpl {
13
14 template<
15       typename F
16     >
17 struct apply0
18
19     : apply_wrap0<
20           typename lambda<F>::type
21        
22         >
23 {
24     BOOST_MPL_AUX_LAMBDA_SUPPORT(
25           1
26         , apply0
27         , (F )
28         )
29 };
30
31 namespace aux {
32
33 template<>
34 struct apply_chooser<0>
35 {
36     template<
37           typename F, typename T1, typename T2, typename T3, typename T4
38         , typename T5
39         >
40     struct result_
41     {
42         typedef apply0<
43               F
44             > type;
45     };
46 };
47
48 } // namespace aux
49
50 template<
51       typename F, typename T1
52     >
53 struct apply1
54
55     : apply_wrap1<
56           typename lambda<F>::type
57         , T1
58         >
59 {
60     BOOST_MPL_AUX_LAMBDA_SUPPORT(
61           2
62         , apply1
63         , (F, T1)
64         )
65 };
66
67 namespace aux {
68
69 template<>
70 struct apply_chooser<1>
71 {
72     template<
73           typename F, typename T1, typename T2, typename T3, typename T4
74         , typename T5
75         >
76     struct result_
77     {
78         typedef apply1<
79               F, T1
80             > type;
81     };
82 };
83
84 } // namespace aux
85
86 template<
87       typename F, typename T1, typename T2
88     >
89 struct apply2
90
91     : apply_wrap2<
92           typename lambda<F>::type
93         , T1, T2
94         >
95 {
96     BOOST_MPL_AUX_LAMBDA_SUPPORT(
97           3
98         , apply2
99         , (F, T1, T2)
100         )
101 };
102
103 namespace aux {
104
105 template<>
106 struct apply_chooser<2>
107 {
108     template<
109           typename F, typename T1, typename T2, typename T3, typename T4
110         , typename T5
111         >
112     struct result_
113     {
114         typedef apply2<
115               F, T1, T2
116             > type;
117     };
118 };
119
120 } // namespace aux
121
122 template<
123       typename F, typename T1, typename T2, typename T3
124     >
125 struct apply3
126
127     : apply_wrap3<
128           typename lambda<F>::type
129         , T1, T2, T3
130         >
131 {
132     BOOST_MPL_AUX_LAMBDA_SUPPORT(
133           4
134         , apply3
135         , (F, T1, T2, T3)
136         )
137 };
138
139 namespace aux {
140
141 template<>
142 struct apply_chooser<3>
143 {
144     template<
145           typename F, typename T1, typename T2, typename T3, typename T4
146         , typename T5
147         >
148     struct result_
149     {
150         typedef apply3<
151               F, T1, T2, T3
152             > type;
153     };
154 };
155
156 } // namespace aux
157
158 template<
159       typename F, typename T1, typename T2, typename T3, typename T4
160     >
161 struct apply4
162
163     : apply_wrap4<
164           typename lambda<F>::type
165         , T1, T2, T3, T4
166         >
167 {
168     BOOST_MPL_AUX_LAMBDA_SUPPORT(
169           5
170         , apply4
171         , (F, T1, T2, T3, T4)
172         )
173 };
174
175 namespace aux {
176
177 template<>
178 struct apply_chooser<4>
179 {
180     template<
181           typename F, typename T1, typename T2, typename T3, typename T4
182         , typename T5
183         >
184     struct result_
185     {
186         typedef apply4<
187               F, T1, T2, T3, T4
188             > type;
189     };
190 };
191
192 } // namespace aux
193
194 template<
195       typename F, typename T1, typename T2, typename T3, typename T4
196     , typename T5
197     >
198 struct apply5
199
200     : apply_wrap5<
201           typename lambda<F>::type
202         , T1, T2, T3, T4, T5
203         >
204 {
205     BOOST_MPL_AUX_LAMBDA_SUPPORT(
206           6
207         , apply5
208         , (F, T1, T2, T3, T4, T5)
209         )
210 };
211
212 namespace aux {
213
214 template<>
215 struct apply_chooser<5>
216 {
217     template<
218           typename F, typename T1, typename T2, typename T3, typename T4
219         , typename T5
220         >
221     struct result_
222     {
223         typedef apply5<
224               F, T1, T2, T3, T4, T5
225             > type;
226     };
227 };
228
229 } // namespace aux
230
231 namespace aux {
232
233 template< typename T >
234 struct is_apply_arg
235 {
236     static bool const value  = true;
237 };
238
239 template<>
240 struct is_apply_arg<na>
241 {
242     static bool const value  = false;
243 };
244
245 template<
246       typename T1, typename T2, typename T3, typename T4, typename T5
247     >
248 struct apply_count_args
249 {
250     static int const value  = is_apply_arg<T1>::value + is_apply_arg<T2>::value + is_apply_arg<T3>::value + is_apply_arg<T4>::value + is_apply_arg<T5>::value;
251
252 };
253
254 }
255
256 template<
257       typename F, typename T1 = na, typename T2 = na, typename T3 = na
258     , typename T4 = na, typename T5 = na
259     >
260 struct apply
261     : aux::apply_chooser<
262           aux::apply_count_args< T1,T2,T3,T4,T5 >::value
263         >::template result_< F,T1,T2,T3,T4,T5 >::type
264 {
265 };
266
267 }}
268