17 #ifndef V_TRANSFORM_HPP
18 #define V_TRANSFORM_HPP
20 #include <boost/fusion/container/vector.hpp>
21 #include <boost/mpl/int.hpp>
22 #include <boost/mpl/reverse.hpp>
23 #include <boost/mpl/vector.hpp>
24 #include <boost/fusion/sequence/intrinsic/at_c.hpp>
25 #include <boost/fusion/include/at_c.hpp>
38 template<
typename F,
typename L>
39 struct exit_impl : boost::mpl::equal_to<typename boost::mpl::distance<F,L>::type,boost::mpl::int_<0>>
49 template<
template<
typename>
class H,
typename F,
typename L,
bool exit,
typename ...Args>
52 typedef typename boost::mpl::deref<F>::type front_;
53 typedef typename boost::mpl::next<F>::type next_;
60 template<
template<
typename>
class H,
typename F,
typename L,
typename ...Args>
63 typedef boost::fusion::vector<Args...> type;
66 template<
typename Seq>
69 typedef typename boost::mpl::begin<Seq>::type first_;
70 typedef typename boost::mpl::end<Seq>::type last_;
90 template<
template<
typename>
class H,
typename L>
94 typedef typename boost::mpl::reverse<L>::type
reversed_;
97 typedef typename seq_traits_impl<reversed_>::first_
first;
100 typedef typename seq_traits_impl<reversed_>::last_
last;
106 typedef typename v_transform_impl<H,first,last,exit_::value >::type
type;
121 template<
template<
typename,
typename>
class H,
typename arg0,
typename F,
typename L,
bool exit,
typename ...Args>
124 typedef typename boost::mpl::deref<F>::type front_;
125 typedef typename boost::mpl::next<F>::type next_;
132 template<
template<
typename,
typename>
class H,
typename arg0,
typename F,
typename L,
typename ...Args>
135 typedef boost::fusion::vector<Args...> type;
154 template<
template<
typename,
typename>
class H,
typename arg0,
typename L>
158 typedef typename boost::mpl::reverse<L>::type
reversed_;
161 typedef typename seq_traits_impl<reversed_>::first_
first;
164 typedef typename seq_traits_impl<reversed_>::last_
last;
170 typedef typename v_transform_two_impl<H,arg0,first,last,exit_::value >::type
type;
176 template <
int a,
int...
id>
187 typedef boost::mpl::vector<boost::mpl::int_<a>>
type;
212 typedef typename boost::mpl::vector<>::type type;
boost::mpl::push_front< typename to_boost_vmpl_impl< id...>::type, boost::mpl::int_< a > >::type type
push in front the next number
[v_transform metafunction]