gpu-enable functions

This commit is contained in:
Eric Niebler
2014-01-09 17:58:06 -08:00
committed by Eric Niebler
parent 867c7e5dfb
commit c4f9f0d1b6
840 changed files with 7409 additions and 116 deletions

View File

@ -9,6 +9,7 @@
#if !defined(BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_THAT_PTR_HPP_INCLUDED)
#define BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_THAT_PTR_HPP_INCLUDED
#include <boost/fusion/support/config.hpp>
#include <boost/get_pointer.hpp>
#include <boost/utility/addressof.hpp>
#include <boost/type_traits/config.hpp>
@ -24,11 +25,13 @@ namespace boost { namespace fusion { namespace detail
typedef typename remove_reference<Wanted>::type pointee;
template <typename T>
BOOST_FUSION_GPU_ENABLED
static inline pointee * do_get_pointer(T &, pointee * x)
{
return x;
}
template <typename T>
BOOST_FUSION_GPU_ENABLED
static inline pointee * do_get_pointer(T & x, void const *)
{
return get_pointer(x);
@ -36,17 +39,21 @@ namespace boost { namespace fusion { namespace detail
public:
BOOST_FUSION_GPU_ENABLED
static inline pointee * get(pointee * x)
{
return x;
}
BOOST_FUSION_GPU_ENABLED
static inline pointee * get(pointee & x)
{
return boost::addressof(x);
}
template <typename T> static inline pointee * get(T & x)
template <typename T>
BOOST_FUSION_GPU_ENABLED
static inline pointee * get(T & x)
{
return do_get_pointer(x, boost::addressof(x));
}

View File

@ -145,6 +145,7 @@ namespace boost { namespace fusion
typedef typename boost::add_reference<qualified_type>::type
result_type;
BOOST_FUSION_GPU_ENABLED
static inline result_type call(T C::* f, Sequence & s)
{
typename result_of::front<Sequence>::type c = fusion::front(s);
@ -164,6 +165,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<Function,Sequence>::type
invoke(Function f, Sequence & s)
{
@ -173,6 +175,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke<Function,Sequence const>::type
invoke(Function f, Sequence const & s)
{
@ -205,6 +208,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@ -214,6 +218,7 @@ namespace boost { namespace fusion
#else
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@ -234,6 +239,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@ -243,6 +249,7 @@ namespace boost { namespace fusion
#else
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@ -263,6 +270,7 @@ namespace boost { namespace fusion
typedef typename ft::result_type<Function>::type result_type;
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@ -293,6 +301,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@ -304,6 +313,7 @@ namespace boost { namespace fusion
#else
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@ -326,6 +336,7 @@ namespace boost { namespace fusion
#if N > 0
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@ -337,6 +348,7 @@ namespace boost { namespace fusion
#else
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@ -358,6 +370,7 @@ namespace boost { namespace fusion
typedef typename ft::result_type<Function>::type result_type;
template <typename F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{

View File

@ -40,10 +40,12 @@ namespace boost { namespace fusion
}
template <class Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function, Sequence>::type
invoke_function_object(Function, Sequence &);
template <class Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function, Sequence const
>::type invoke_function_object(Function, Sequence const &);
@ -79,6 +81,7 @@ namespace boost { namespace fusion
}
template <class Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function,Sequence>::type
invoke_function_object(Function f, Sequence & s)
{
@ -88,6 +91,7 @@ namespace boost { namespace fusion
}
template <class Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline typename result_of::invoke_function_object<Function,Sequence const>::type
invoke_function_object(Function f, Sequence const & s)
{
@ -121,6 +125,7 @@ namespace boost { namespace fusion
#if N > 0
template <class F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@ -132,6 +137,7 @@ namespace boost { namespace fusion
#else
template <class F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{
@ -155,6 +161,7 @@ namespace boost { namespace fusion
#if N > 0
template <class F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & s)
{
@ -170,6 +177,7 @@ namespace boost { namespace fusion
#else
template <class F>
BOOST_FUSION_GPU_ENABLED
static inline result_type
call(F & f, Sequence & /*s*/)
{

View File

@ -47,9 +47,11 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function, Sequence &);
template <typename Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function, Sequence const &);
//----- ---- --- -- - - - -
@ -75,6 +77,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function f, Sequence & s)
{
detail::invoke_procedure_impl<
@ -83,6 +86,7 @@ namespace boost { namespace fusion
}
template <typename Function, class Sequence>
BOOST_FUSION_GPU_ENABLED
inline void invoke_procedure(Function f, Sequence const & s)
{
detail::invoke_procedure_impl<
@ -109,6 +113,7 @@ namespace boost { namespace fusion
#if N > 0
BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
f(BOOST_PP_ENUM(N,M,~));
@ -116,6 +121,7 @@ namespace boost { namespace fusion
#else
BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & /*s*/)
{
f();
@ -129,6 +135,7 @@ namespace boost { namespace fusion
template <typename Function, class Sequence>
struct invoke_procedure_impl<Function,Sequence,N,true,true>
{
BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
(that_ptr<typename mpl::front<
@ -151,6 +158,7 @@ namespace boost { namespace fusion
#if N > 0
BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
typedef typename result_of::begin<Sequence>::type I0;
@ -160,6 +168,7 @@ namespace boost { namespace fusion
}
#else
BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & /*s*/)
{
f();
@ -173,6 +182,7 @@ namespace boost { namespace fusion
template <typename Function, class Sequence>
struct invoke_procedure_impl<Function,Sequence,N,true,false>
{
BOOST_FUSION_GPU_ENABLED
static inline void call(Function & f, Sequence & s)
{
typedef typename result_of::begin<Sequence>::type I0;