diff --git a/include/boost/fusion/sequence/view/transform_view/detail/at_impl.hpp b/include/boost/fusion/sequence/view/transform_view/detail/at_impl.hpp new file mode 100644 index 00000000..3d935c26 --- /dev/null +++ b/include/boost/fusion/sequence/view/transform_view/detail/at_impl.hpp @@ -0,0 +1,64 @@ +/*============================================================================= + Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2006 Dan Marsden + + Use, modification and distribution is subject to 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_AT_IMPL_20061029_1946) +#define BOOST_FUSION_AT_IMPL_20061029_1946 + +#include +#include +#include + +namespace boost { namespace fusion { + struct transform_view_tag; + struct transform_view2_tag; + + namespace extension + { + template + struct at_impl; + + template<> + struct at_impl + { + template + struct apply + { + typedef typename Seq::transform_type F; + typedef detail::apply_transform_result transform_type; + typedef typename boost::fusion::result_of::at::type value_type; + typedef typename mpl::apply::type type; + + static type call(Seq& seq) + { + return seq.f(boost::fusion::at(seq.seq)); + } + }; + }; + + template<> + struct at_impl + { + template + struct apply + { + typedef typename Seq::transform_type F; + typedef detail::apply_transform_result transform_type; + typedef typename boost::fusion::result_of::at::type value1_type; + typedef typename boost::fusion::result_of::at::type value2_type; + typedef typename mpl::apply::type type; + + static type call(Seq& seq) + { + return seq.f(boost::fusion::at(seq.seq1), boost::fusion::at(seq.seq2)); + } + }; + }; + } +}} + +#endif diff --git a/include/boost/fusion/sequence/view/transform_view/transform_view.hpp b/include/boost/fusion/sequence/view/transform_view/transform_view.hpp index 1209b0c2..a506c9f9 100644 --- a/include/boost/fusion/sequence/view/transform_view/transform_view.hpp +++ b/include/boost/fusion/sequence/view/transform_view/transform_view.hpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -46,6 +47,8 @@ namespace boost { namespace fusion typedef typename result_of::end::type last1_type; typedef typename result_of::end::type last2_type; typedef typename result_of::size::type size; + typedef Sequence1 sequence1_type; + typedef Sequence2 sequence2_type; typedef F transform_type; transform_view(Sequence1& seq1, Sequence2& seq2, F const& binop) @@ -76,6 +79,7 @@ namespace boost { namespace fusion typedef typename result_of::begin::type first_type; typedef typename result_of::end::type last_type; typedef typename result_of::size::type size; + typedef Sequence sequence_type; typedef F transform_type; transform_view(Sequence& seq, F const& f)