Initial Commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
|
||||
//
|
||||
// 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_DETAIL_MPL_VECTOR_TO_TUPLE_HPP
|
||||
#define BOOST_COMPUTE_DETAIL_MPL_VECTOR_TO_TUPLE_HPP
|
||||
|
||||
#include <boost/mpl/copy.hpp>
|
||||
#include <boost/mpl/vector.hpp>
|
||||
#include <boost/tuple/tuple.hpp>
|
||||
#include <boost/fusion/include/mpl.hpp>
|
||||
#include <boost/fusion/adapted/boost_tuple.hpp>
|
||||
#include <boost/preprocessor/repetition.hpp>
|
||||
|
||||
#include <boost/compute/config.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace compute {
|
||||
namespace detail {
|
||||
|
||||
namespace mpl = boost::mpl;
|
||||
|
||||
template<class Vector, size_t N>
|
||||
struct mpl_vector_to_tuple_impl;
|
||||
|
||||
#define BOOST_COMPUTE_PRINT_ELEM(z, n, unused) \
|
||||
typename mpl::at_c<Vector, n>::type
|
||||
|
||||
#define BOOST_COMPUTE_VEC2TUP(z, n, unused) \
|
||||
template<class Vector> \
|
||||
struct mpl_vector_to_tuple_impl<Vector, n> \
|
||||
{ \
|
||||
typedef typename \
|
||||
boost::tuple< \
|
||||
BOOST_PP_ENUM(n, BOOST_COMPUTE_PRINT_ELEM, ~) \
|
||||
> type; \
|
||||
};
|
||||
|
||||
BOOST_PP_REPEAT_FROM_TO(1, BOOST_COMPUTE_MAX_ARITY, BOOST_COMPUTE_VEC2TUP, ~)
|
||||
|
||||
#undef BOOST_COMPUTE_VEC2TUP
|
||||
#undef BOOST_COMPUTE_PRINT_ELEM
|
||||
|
||||
// meta-function which converts a mpl::vector to a boost::tuple
|
||||
template<class Vector>
|
||||
struct mpl_vector_to_tuple
|
||||
{
|
||||
typedef typename
|
||||
mpl_vector_to_tuple_impl<
|
||||
Vector,
|
||||
mpl::size<Vector>::value
|
||||
>::type type;
|
||||
};
|
||||
|
||||
} // end detail namespace
|
||||
} // end compute namespace
|
||||
} // end boost namespace
|
||||
|
||||
#endif // BOOST_COMPUTE_DETAIL_MPL_VECTOR_TO_TUPLE_HPP
|
||||
Reference in New Issue
Block a user