]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/unpack_args.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
f78509793e817b574c82475e8b5f0ea49b6a9f12
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / unpack_args.hpp
1 \r
2 #if !defined(BOOST_PP_IS_ITERATING)\r
3 \r
4 ///// header body\r
5 \r
6 #ifndef BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED\r
7 #define BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED\r
8 \r
9 // Copyright Aleksey Gurtovoy 2002-2004\r
10 //\r
11 // Distributed under the Boost Software License, Version 1.0. \r
12 // (See accompanying file LICENSE_1_0.txt or copy at \r
13 // http://www.boost.org/LICENSE_1_0.txt)\r
14 //\r
15 // See http://www.boost.org/libs/mpl for documentation.\r
16 \r
17 // $Id: unpack_args.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\r
18 // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $\r
19 // $Revision: 49267 $\r
20 \r
21 #if !defined(BOOST_MPL_PREPROCESSING_MODE)\r
22 #   include <boost/mpl/apply.hpp>\r
23 #   include <boost/mpl/at.hpp>\r
24 #   include <boost/mpl/size.hpp>\r
25 #   include <boost/mpl/aux_/nttp_decl.hpp>\r
26 #   include <boost/mpl/aux_/lambda_spec.hpp>\r
27 #endif\r
28 \r
29 #include <boost/mpl/aux_/config/use_preprocessed.hpp>\r
30 \r
31 #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\r
32     && !defined(BOOST_MPL_PREPROCESSING_MODE)\r
33 \r
34 #   define BOOST_MPL_PREPROCESSED_HEADER unpack_args.hpp\r
35 #   include <boost/mpl/aux_/include_preprocessed.hpp>\r
36 \r
37 #else\r
38 \r
39 #   include <boost/mpl/limits/arity.hpp>\r
40 #   include <boost/mpl/aux_/preprocessor/repeat.hpp>\r
41 #   include <boost/mpl/aux_/config/ctps.hpp>\r
42 #   include <boost/mpl/aux_/config/forwarding.hpp>\r
43 #   include <boost/preprocessor/iterate.hpp>\r
44 #   include <boost/preprocessor/cat.hpp>\r
45 \r
46 \r
47 namespace boost { namespace mpl {\r
48 \r
49 // local macros, #undef-ined at the end of the header\r
50 \r
51 #   define AUX778076_UNPACK(unused, i, Args) \\r
52     , typename at_c<Args,i>::type \\r
53     /**/\r
54 \r
55 #   define AUX778076_UNPACKED_ARGS(n, Args) \\r
56     BOOST_MPL_PP_REPEAT(n, AUX778076_UNPACK, Args) \\r
57     /**/\r
58 \r
59 namespace aux {\r
60 \r
61 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
62 template< int size, typename F, typename Args >\r
63 struct unpack_args_impl;\r
64 #else\r
65 template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl\r
66 {\r
67     template< typename F, typename Args > struct apply;\r
68 };\r
69 #endif\r
70 \r
71 #define BOOST_PP_ITERATION_PARAMS_1 \\r
72     (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/unpack_args.hpp>))\r
73 #include BOOST_PP_ITERATE()\r
74 \r
75 }\r
76 \r
77 template<\r
78       typename F\r
79     >\r
80 struct unpack_args\r
81 {\r
82     template< typename Args > struct apply\r
83 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\r
84 #   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
85         : aux::unpack_args_impl< size<Args>::value,F,Args >\r
86 #   else\r
87         : aux::unpack_args_impl< size<Args>::value >\r
88             ::template apply< F,Args >\r
89 #   endif\r
90     {\r
91 #else // BOOST_MPL_CFG_NO_NESTED_FORWARDING\r
92     {\r
93         typedef typename aux::unpack_args_impl< \r
94               size<Args>::value\r
95             , F\r
96             , Args\r
97             >::type type;\r
98 #endif\r
99     };\r
100 };\r
101 \r
102 BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)\r
103 \r
104 #   undef AUX778076_UNPACK\r
105 #   undef AUX778076_UNPACKED_ARGS\r
106 \r
107 }}\r
108 \r
109 #endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS\r
110 #endif // BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED\r
111 \r
112 ///// iteration, depth == 1\r
113 \r
114 // For gcc 4.4 compatability, we must include the\r
115 // BOOST_PP_ITERATION_DEPTH test inside an #else clause.\r
116 #else // BOOST_PP_IS_ITERATING\r
117 #if BOOST_PP_ITERATION_DEPTH() == 1\r
118 \r
119 #   define i_ BOOST_PP_FRAME_ITERATION(1)\r
120 \r
121 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
122 \r
123 template< typename F, typename Args >\r
124 struct unpack_args_impl<i_,F,Args>\r
125     : BOOST_PP_CAT(apply,i_)<\r
126           F\r
127         AUX778076_UNPACKED_ARGS(i_, Args)\r
128         >\r
129 {\r
130 };\r
131 \r
132 #else\r
133 \r
134 template<> struct unpack_args_impl<i_>\r
135 {\r
136     template< typename F, typename Args > struct apply\r
137         : BOOST_PP_CAT(apply,i_)<\r
138               F\r
139             AUX778076_UNPACKED_ARGS(i_, Args)\r
140             >\r
141     {\r
142     };\r
143 };\r
144 \r
145 #endif\r
146 \r
147 #   undef i_\r
148 \r
149 #endif // BOOST_PP_ITERATION_DEPTH()\r
150 #endif // BOOST_PP_IS_ITERATING\r