/*============================================================================= Copyright (c) 2001-2011 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) ==============================================================================*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct square { template struct result; template struct result { typedef int type; }; template int operator()(T x) const { return x * x; } }; struct add { template struct result; template struct result { typedef int type; }; template int operator()(A a, B b) const { return a + b; } }; int main() { using namespace boost::fusion; std::cout << tuple_open('['); std::cout << tuple_close(']'); std::cout << tuple_delimiter(", "); /// Testing the transform_view { typedef boost::mpl::range_c sequence_type; sequence_type sequence; square sq; typedef transform_view xform_type; xform_type xform(sequence, sq); std::cout << xform << std::endl; BOOST_TEST((xform == make_vector(25, 36, 49, 64))); typedef boost::fusion::result_of::begin::type first_type; first_type first_it(boost::fusion::begin(xform)); typedef boost::fusion::result_of::next::type next_type; next_type next_it(boost::fusion::next(first_it)); BOOST_TEST((*next_it == 36)); BOOST_TEST((*boost::fusion::prior(next_it) == 25)); BOOST_TEST((boost::fusion::distance(first_it, next_it) == 1)); BOOST_TEST((*boost::fusion::advance_c<3>(boost::fusion::begin(xform)) == 64)); BOOST_TEST((boost::fusion::at_c<2>(xform) == 49)); BOOST_MPL_ASSERT((boost::is_same::type, int>)); } { typedef boost::mpl::range_c sequence1_type; typedef boost::mpl::range_c sequence2_type; sequence1_type sequence1; sequence2_type sequence2; add f; typedef transform_view xform_type; xform_type xform(sequence1, sequence2, f); std::cout << xform << std::endl; BOOST_TEST((xform == make_vector(15, 17, 19, 21))); BOOST_TEST((boost::fusion::at_c<2>(xform) == 19)); BOOST_MPL_ASSERT((boost::is_same::type, int>)); } return boost::report_errors(); }