123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- ==============================================================================*/
- #if !BOOST_PHOENIX_IS_ITERATING
- #include <boost/phoenix/core/limits.hpp>
- #include <boost/phoenix/support/iterate.hpp>
- namespace boost { namespace phoenix { namespace detail
- {
- template <int N, typename Dummy = void>
- struct function_ptr_impl
- {
- template <typename RT, typename FP>
- struct impl;
- };
- template <int N, typename RT, typename FP>
- struct function_ptr : function_ptr_impl<N>::template impl<RT, FP>
- {
- typedef typename function_ptr_impl<N>::template impl<RT, FP> base;
- function_ptr(FP fp_)
- : base(fp_) {}
-
- using base::fp;
- bool operator==(function_ptr const & rhs) const
- {
- return fp == rhs.fp;
- }
- template <int M, typename RhsRT, typename RhsFP>
- bool operator==(function_ptr<M, RhsRT, RhsFP> const & /*rhs*/) const
- {
- return false;
- }
- };
- template <typename Dummy>
- struct function_ptr_impl<0, Dummy>
- {
- template <typename RT, typename FP>
- struct impl
- {
- typedef RT result_type;
- impl(FP fp_)
- : fp(fp_) {}
- RT operator()() const
- {
- return fp();
- }
- FP fp;
- };
- };
- template <typename Dummy>
- struct function_ptr_impl<1, Dummy>
- {
- template <typename RT, typename FP>
- struct impl
- {
- typedef RT result_type;
- impl(FP fp_)
- : fp(fp_) {}
- template <typename A>
- RT operator()(A &a) const
- {
- return fp(a);
- }
- FP fp;
- };
- };
- #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- #include <boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr.hpp>
- #else
- #if defined(__WAVE__) && defined (BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
- #pragma wave option(preserve: 2, line: 0, output: "preprocessed/function_ptr_" BOOST_PHOENIX_LIMIT_STR ".hpp")
- #endif
- /*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- ==============================================================================*/
- #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
- #pragma wave option(preserve: 1)
- #endif
- #define BOOST_PHOENIX_ITERATION_PARAMS \
- (3, (2, BOOST_PHOENIX_COMPOSITE_LIMIT, \
- <boost/phoenix/bind/detail/cpp03/function_ptr.hpp>))
- #include BOOST_PHOENIX_ITERATE()
- #if defined(__WAVE__) && defined (BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
- #pragma wave option(output: null)
- #endif
- #endif
- }}} // namespace boost::phoenix::detail
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Preprocessor vertical repetition code
- //
- ///////////////////////////////////////////////////////////////////////////////
- #else // defined(BOOST_PP_IS_ITERATING)
- template <typename Dummy>
- struct function_ptr_impl<BOOST_PHOENIX_ITERATION, Dummy>
- {
- template <typename RT, typename FP>
- struct impl
- {
- typedef RT result_type;
- impl(FP fp_)
- : fp(fp_) {}
- template <BOOST_PHOENIX_typename_A>
- RT operator()(BOOST_PHOENIX_A_ref_a) const
- {
- return fp(BOOST_PHOENIX_a);
- }
- FP fp;
- };
- };
- #endif // defined(BOOST_PP_IS_ITERATING)
|