You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
151 lines
4.1 KiB
151 lines
4.1 KiB
/*============================================================================= |
|
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 |
|
|
|
#ifndef BOOST_PHOENIX_BIND_DETAIL_FUNCTION_PTR_HPP |
|
#define BOOST_PHOENIX_BIND_DETAIL_FUNCTION_PTR_HPP |
|
|
|
#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/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/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 |
|
|
|
#endif |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
// |
|
// 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)
|
|
|