sl@0: sl@0: #ifndef BOOST_MPL_EQUAL_HPP_INCLUDED sl@0: #define BOOST_MPL_EQUAL_HPP_INCLUDED sl@0: sl@0: // Copyright Aleksey Gurtovoy 2000-2004 sl@0: // sl@0: // Distributed under the Boost Software License, Version 1.0. sl@0: // (See accompanying file LICENSE_1_0.txt or copy at sl@0: // http://www.boost.org/LICENSE_1_0.txt) sl@0: // sl@0: // See http://www.boost.org/libs/mpl for documentation. sl@0: sl@0: // $Source: /cvsroot/boost/boost/boost/mpl/equal.hpp,v $ sl@0: // $Date: 2004/09/02 15:40:41 $ sl@0: // $Revision: 1.6 $ sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include sl@0: sl@0: namespace boost { namespace mpl { sl@0: sl@0: namespace aux { sl@0: sl@0: template< sl@0: typename Predicate sl@0: , typename LastIterator1 sl@0: , typename LastIterator2 sl@0: > sl@0: struct equal_pred sl@0: { sl@0: template< sl@0: typename Iterator2 sl@0: , typename Iterator1 sl@0: > sl@0: struct apply sl@0: { sl@0: typedef typename and_< sl@0: not_< is_same > sl@0: , not_< is_same > sl@0: , aux::iter_apply2 sl@0: >::type type; sl@0: }; sl@0: }; sl@0: sl@0: template< sl@0: typename Sequence1 sl@0: , typename Sequence2 sl@0: , typename Predicate sl@0: > sl@0: struct equal_impl sl@0: { sl@0: typedef typename begin::type first1_; sl@0: typedef typename begin::type first2_; sl@0: typedef typename end::type last1_; sl@0: typedef typename end::type last2_; sl@0: sl@0: typedef aux::iter_fold_if_impl< sl@0: first1_ sl@0: , first2_ sl@0: , next<> sl@0: , protect< aux::equal_pred > sl@0: , void_ sl@0: , always sl@0: > fold_; sl@0: sl@0: typedef typename fold_::iterator iter1_; sl@0: typedef typename fold_::state iter2_; sl@0: typedef and_< sl@0: is_same sl@0: , is_same sl@0: > result_; sl@0: sl@0: typedef typename result_::type type; sl@0: }; sl@0: sl@0: sl@0: } // namespace aux sl@0: sl@0: sl@0: template< sl@0: typename BOOST_MPL_AUX_NA_PARAM(Sequence1) sl@0: , typename BOOST_MPL_AUX_NA_PARAM(Sequence2) sl@0: , typename Predicate = is_same<_,_> sl@0: > sl@0: struct equal sl@0: : aux::msvc_eti_base< sl@0: typename aux::equal_impl::type sl@0: >::type sl@0: { sl@0: BOOST_MPL_AUX_LAMBDA_SUPPORT(2,equal,(Sequence1,Sequence2)) sl@0: }; sl@0: sl@0: BOOST_MPL_AUX_NA_SPEC(2, equal) sl@0: sl@0: }} sl@0: sl@0: #endif // BOOST_MPL_EQUAL_HPP_INCLUDED