annotate DEPENDENCIES/generic/include/boost/phoenix/function/adapt_function.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*==============================================================================
Chris@16 2 Copyright (c) 2005-2010 Joel de Guzman
Chris@16 3 Copyright (c) 2010 Thomas Heller
Chris@16 4
Chris@16 5 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 ==============================================================================*/
Chris@16 8 #ifndef BOOST_PHOENIX_FUNCTION_ADAPT_FUNCTION_HPP
Chris@16 9 #define BOOST_PHOENIX_FUNCTION_ADAPT_FUNCTION_HPP
Chris@16 10
Chris@16 11 #include <boost/phoenix/core/limits.hpp>
Chris@16 12 #include <boost/phoenix/core/detail/function_eval.hpp>
Chris@16 13 #include <boost/preprocessor/repetition/repeat.hpp>
Chris@16 14
Chris@16 15 #define BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY(RESULT, NAME, FUNC) \
Chris@101 16 namespace detail0 \
Chris@16 17 { \
Chris@16 18 struct BOOST_PP_CAT(NAME, _impl_nullary) \
Chris@16 19 { \
Chris@16 20 typedef RESULT result_type; \
Chris@16 21 \
Chris@16 22 result_type \
Chris@16 23 operator()() const \
Chris@16 24 { \
Chris@16 25 return FUNC(); \
Chris@16 26 } \
Chris@16 27 }; \
Chris@16 28 } \
Chris@16 29 \
Chris@101 30 inline \
Chris@16 31 boost::phoenix::detail::expression::function_eval< \
Chris@101 32 detail0:: BOOST_PP_CAT(NAME, _impl_nullary) \
Chris@16 33 >::type const \
Chris@101 34 NAME() \
Chris@16 35 { \
Chris@16 36 return boost::phoenix::detail::expression:: \
Chris@101 37 function_eval<detail0:: BOOST_PP_CAT(NAME, _impl_nullary)> \
Chris@101 38 ::make(detail0:: BOOST_PP_CAT(NAME, _impl_nullary)()); \
Chris@16 39 } \
Chris@16 40 /**/
Chris@16 41
Chris@16 42 #define BOOST_PHOENIX_ADAPT_FUNCTION(RESULT, NAME, FUNC, N) \
Chris@101 43 namespace detail1 \
Chris@16 44 { \
Chris@16 45 struct BOOST_PP_CAT(BOOST_PP_CAT(NAME, _impl_), N) \
Chris@16 46 { \
Chris@16 47 template <typename Sig> \
Chris@16 48 struct result; \
Chris@16 49 \
Chris@16 50 template <typename This, BOOST_PHOENIX_typename_A(N)> \
Chris@16 51 struct result<This(BOOST_PHOENIX_A(N))> \
Chris@101 52 {typedef RESULT type;}; \
Chris@16 53 \
Chris@16 54 template <BOOST_PHOENIX_typename_A(N)> \
Chris@16 55 RESULT \
Chris@16 56 operator()(BOOST_PHOENIX_A_ref_a(N)) const \
Chris@16 57 { \
Chris@16 58 return FUNC(BOOST_PHOENIX_a(N)); \
Chris@16 59 } \
Chris@16 60 }; \
Chris@16 61 } \
Chris@16 62 \
Chris@16 63 template <BOOST_PHOENIX_typename_A(N)> \
Chris@101 64 inline \
Chris@16 65 typename \
Chris@16 66 boost::phoenix::detail::expression::function_eval< \
Chris@101 67 detail1:: BOOST_PP_CAT(BOOST_PP_CAT(NAME, _impl_), N) \
Chris@16 68 , BOOST_PHOENIX_A(N)>::type const \
Chris@101 69 NAME(BOOST_PHOENIX_A_const_ref_a(N)) \
Chris@16 70 { \
Chris@16 71 return boost::phoenix::detail::expression:: \
Chris@16 72 function_eval< \
Chris@101 73 detail1:: BOOST_PP_CAT(BOOST_PP_CAT(NAME, _impl_), N) \
Chris@16 74 , BOOST_PHOENIX_A(N) \
Chris@16 75 >::make( \
Chris@101 76 detail1:: BOOST_PP_CAT(BOOST_PP_CAT(NAME, _impl_), N)() \
Chris@16 77 , BOOST_PHOENIX_a(N) \
Chris@16 78 ); \
Chris@16 79 } \
Chris@16 80 /**/
Chris@16 81
Chris@16 82 #define BOOST_PHOENIX_ADAPT_FUNCTION_VARARG(RESULT, NAME, FUNC) \
Chris@16 83 BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY(NAME, FUNC) \
Chris@16 84 BOOST_PP_REPEAT_FROM_TO( \
Chris@16 85 1 \
Chris@16 86 , BOOST_PHOENIX_LIMIT \
Chris@16 87 , BOOST_PHOENIX_ADAPT_FUNCTION_VARARG_R \
Chris@16 88 , (RESULT, NAME, FUNC) \
Chris@16 89 ) \
Chris@16 90 /**/
Chris@16 91
Chris@16 92 #define BOOST_PHOENIX_ADAPT_FUNCTION_VARARG_R(Z, N, D) \
Chris@16 93 BOOST_PHOENIX_ADAPT_FUNCTION( \
Chris@16 94 BOOST_PP_TUPLE_ELEM(3, 0, D) \
Chris@16 95 , BOOST_PP_TUPLE_ELEM(3, 1, D) \
Chris@16 96 , BOOST_PP_TUPLE_ELEM(3, 2, D) \
Chris@16 97 , N \
Chris@16 98 ) \
Chris@16 99 /**/
Chris@16 100
Chris@16 101 #endif