williamr@4: williamr@4: #ifndef BOOST_MPL_TRANSFORM_HPP_INCLUDED williamr@4: #define BOOST_MPL_TRANSFORM_HPP_INCLUDED williamr@4: williamr@4: // Copyright Aleksey Gurtovoy 2000-2004 williamr@4: // Copyright David Abrahams 2003-2004 williamr@4: // williamr@4: // Distributed under the Boost Software License, Version 1.0. williamr@4: // (See accompanying file LICENSE_1_0.txt or copy at williamr@4: // http://www.boost.org/LICENSE_1_0.txt) williamr@4: // williamr@4: // See http://www.boost.org/libs/mpl for documentation. williamr@4: williamr@4: // $Source: /cvsroot/boost/boost/boost/mpl/transform.hpp,v $ williamr@4: // $Date: 2004/12/20 17:18:17 $ williamr@4: // $Revision: 1.10 $ williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: namespace boost { namespace mpl { williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename Seq williamr@4: , typename Op williamr@4: , typename In williamr@4: > williamr@4: struct transform1_impl williamr@4: : fold< williamr@4: Seq williamr@4: , typename In::state williamr@4: , bind2< typename lambda< typename In::operation >::type williamr@4: , _1 williamr@4: , bind1< typename lambda::type, _2> williamr@4: > williamr@4: > williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename Seq williamr@4: , typename Op williamr@4: , typename In williamr@4: > williamr@4: struct reverse_transform1_impl williamr@4: : reverse_fold< williamr@4: Seq williamr@4: , typename In::state williamr@4: , bind2< typename lambda< typename In::operation >::type williamr@4: , _1 williamr@4: , bind1< typename lambda::type, _2> williamr@4: > williamr@4: > williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename Seq1 williamr@4: , typename Seq2 williamr@4: , typename Op williamr@4: , typename In williamr@4: > williamr@4: struct transform2_impl williamr@4: : fold< williamr@4: pair_view williamr@4: , typename In::state williamr@4: , bind2< typename lambda< typename In::operation >::type williamr@4: , _1 williamr@4: , bind2< williamr@4: typename lambda::type williamr@4: , bind1,_2> williamr@4: , bind1,_2> williamr@4: > williamr@4: > williamr@4: > williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename Seq1 williamr@4: , typename Seq2 williamr@4: , typename Op williamr@4: , typename In williamr@4: > williamr@4: struct reverse_transform2_impl williamr@4: : reverse_fold< williamr@4: pair_view williamr@4: , typename In::state williamr@4: , bind2< typename lambda< typename In::operation >::type williamr@4: , _1 williamr@4: , bind2< typename lambda< Op >::type williamr@4: , bind1,_2> williamr@4: , bind1,_2> williamr@4: > williamr@4: > williamr@4: > williamr@4: { williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, transform1) williamr@4: BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, transform2) williamr@4: williamr@4: #define AUX778076_TRANSFORM_DEF(name) \ williamr@4: template< \ williamr@4: typename BOOST_MPL_AUX_NA_PARAM(Seq1) \ williamr@4: , typename BOOST_MPL_AUX_NA_PARAM(Seq2OrOperation) \ williamr@4: , typename BOOST_MPL_AUX_NA_PARAM(OperationOrInserter) \ williamr@4: , typename BOOST_MPL_AUX_NA_PARAM(Inserter) \ williamr@4: > \ williamr@4: struct name \ williamr@4: { \ williamr@4: typedef typename eval_if< \ williamr@4: or_< \ williamr@4: is_na \ williamr@4: , is_lambda_expression< Seq2OrOperation > \ williamr@4: , not_< is_sequence > \ williamr@4: > \ williamr@4: , name##1 \ williamr@4: , name##2 \ williamr@4: >::type type; \ williamr@4: }; \ williamr@4: BOOST_MPL_AUX_NA_SPEC(4, name) \ williamr@4: /**/ williamr@4: williamr@4: AUX778076_TRANSFORM_DEF(transform) williamr@4: AUX778076_TRANSFORM_DEF(reverse_transform) williamr@4: williamr@4: #undef AUX778076_TRANSFORM_DEF williamr@4: williamr@4: }} williamr@4: williamr@4: #endif // BOOST_MPL_TRANSFORM_HPP_INCLUDED