]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /*============================================================================== |
2 | Copyright (c) 2005-2010 Joel de Guzman | |
3 | Copyright (c) 2011 Thomas Heller | |
4 | ||
5 | Distributed under the Boost Software License, Version 1.0. (See accompanying | |
6 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
7 | ==============================================================================*/ | |
8 | #ifndef BOOST_PHOENIX_FUNCTION_ADAPT_CALLABLE_HPP | |
9 | #define BOOST_PHOENIX_FUNCTION_ADAPT_CALLABLE_HPP | |
10 | ||
11 | #include <boost/phoenix/core/limits.hpp> | |
12 | #include <boost/phoenix/core/detail/function_eval.hpp> | |
13 | #include <boost/preprocessor/repetition/repeat.hpp> | |
14 | ||
15 | #define BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY(NAME, FUNC) \ | |
16 | inline \ | |
17 | boost::phoenix::detail::expression::function_eval<FUNC>::type const \ | |
18 | NAME() \ | |
19 | { \ | |
20 | return boost::phoenix::detail::expression:: \ | |
21 | function_eval<FUNC>::make(FUNC()); \ | |
22 | } \ | |
23 | /**/ | |
24 | ||
25 | ||
26 | #define BOOST_PHOENIX_ADAPT_CALLABLE(NAME, FUNC, N) \ | |
27 | template <BOOST_PHOENIX_typename_A(N)> \ | |
28 | inline \ | |
29 | typename \ | |
30 | boost::phoenix::detail::expression::function_eval< \ | |
31 | FUNC \ | |
32 | , BOOST_PHOENIX_A(N)>::type const \ | |
33 | NAME(BOOST_PHOENIX_A_const_ref_a(N)) \ | |
34 | { \ | |
35 | return boost::phoenix::detail::expression:: \ | |
36 | function_eval<FUNC, BOOST_PHOENIX_A(N)>:: \ | |
37 | make(FUNC(), BOOST_PHOENIX_a(N)); \ | |
38 | } \ | |
39 | /**/ | |
40 | ||
41 | ||
42 | #define BOOST_PHOENIX_ADAPT_CALLABLE_VARARG(NAME, FUNC) \ | |
43 | BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY(NAME, FUNC) \ | |
44 | BOOST_PP_REPEAT_FROM_TO( \ | |
45 | 1 \ | |
46 | , BOOST_PHOENIX_LIMIT \ | |
47 | , BOOST_PHOENIX_ADAPT_CALLABLE_VARARG_R \ | |
48 | , (NAME, FUNC) \ | |
49 | ) \ | |
50 | /**/ | |
51 | ||
52 | #define BOOST_PHOENIX_ADAPT_CALLABLE_VARARG_R(Z, N, D) \ | |
53 | BOOST_PHOENIX_ADAPT_CALLABLE( \ | |
54 | BOOST_PP_TUPLE_ELEM(2, 0, D) \ | |
55 | , BOOST_PP_TUPLE_ELEM(2, 1, D) \ | |
56 | , N \ | |
57 | ) \ | |
58 | /**/ | |
59 | ||
60 | #endif |