/usr/include/boost/compute/lambda
Edit: /usr/include/boost/compute/lambda/placeholders.hpp (2496B)
//---------------------------------------------------------------------------//
// Copyright (c) 2013 Kyle Lutz
//
// 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
//
// See http://boostorg.github.com/compute for more information.
//---------------------------------------------------------------------------//
#ifndef BOOST_COMPUTE_LAMBDA_PLACEHOLDERS_HPP
#define BOOST_COMPUTE_LAMBDA_PLACEHOLDERS_HPP
#include
#include
#include
namespace boost {
namespace compute {
namespace lambda {
namespace mpl = boost::mpl;
namespace proto = boost::proto;
// lambda placeholders
expression >::type> const _1;
expression >::type> const _2;
expression >::type> const _3;
namespace detail {
BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
template
struct terminal_type_impl;
template
struct terminal_type_impl
{
typedef typename T::result_type type;
};
template
struct terminal_type_impl
{
typedef T type;
};
template
struct terminal_type
{
typedef typename terminal_type_impl::value>::type type;
};
} // end detail namespace
// result_of placeholders
template
struct result_of >::type>, Args, proto::tag::terminal>
{
typedef typename boost::tuples::element<0, Args>::type arg_type;
typedef typename detail::terminal_type::type type;
};
template
struct result_of >::type>, Args, proto::tag::terminal>
{
typedef typename boost::tuples::element<1, Args>::type arg_type;
typedef typename detail::terminal_type::type type;
};
template
struct result_of >::type>, Args, proto::tag::terminal>
{
typedef typename boost::tuples::element<2, Args>::type arg_type;
typedef typename detail::terminal_type::type type;
};
} // end lambda namespace
// lift lambda placeholders up to the boost::compute namespace
using lambda::_1;
using lambda::_2;
using lambda::_3;
} // end compute namespace
} // end boost namespace
#endif // BOOST_COMPUTE_LAMBDA_PLACEHOLDERS_HPP