diff --git a/include/boost/mpl/aux_/find_if_pred.hpp b/include/boost/mpl/aux_/find_if_pred.hpp new file mode 100644 index 0000000..4bf5348 --- /dev/null +++ b/include/boost/mpl/aux_/find_if_pred.hpp @@ -0,0 +1,47 @@ +//----------------------------------------------------------------------------- +// boost mpl/aux_/find_if_pred.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2000-02 +// Aleksey Gurtovoy +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appears in all copies and +// that both the copyright notice and this permission notice appear in +// supporting documentation. No representations are made about the +// suitability of this software for any purpose. It is provided "as is" +// without express or implied warranty. + +#ifndef BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED +#define BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED + +#include "boost/mpl/aux_/iter_apply.hpp" +#include "boost/mpl/apply.hpp" +#include "boost/mpl/not.hpp" +#include "boost/mpl/or.hpp" +#include "boost/type_traits/is_same.hpp" + +namespace boost { +namespace mpl { +namespace aux { + +template< typename Predicate, typename LastIterator > +struct find_if_pred +{ + template< typename State, typename Iterator > + struct apply + { + typedef not_< or_< + is_same + , aux::iter_apply1 + > > type; + }; +}; + +} // namespace aux +} // namespace mpl +} // namespace boost + +#endif // BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED diff --git a/include/boost/mpl/find_if.hpp b/include/boost/mpl/find_if.hpp index 35d181d..ea2fbae 100644 --- a/include/boost/mpl/find_if.hpp +++ b/include/boost/mpl/find_if.hpp @@ -17,25 +17,19 @@ #ifndef BOOST_MPL_FIND_IF_HPP_INCLUDED #define BOOST_MPL_FIND_IF_HPP_INCLUDED +#include "boost/mpl/aux_/find_if_pred.hpp" #include "boost/mpl/aux_/iter_fold_if_impl.hpp" -#include "boost/mpl/aux_/iter_apply.hpp" -#include "boost/mpl/or.hpp" -#include "boost/mpl/not.hpp" #include "boost/mpl/begin_end.hpp" #include "boost/mpl/always.hpp" #include "boost/mpl/lambda.hpp" -#include "boost/mpl/bind.hpp" -#include "boost/mpl/apply.hpp" -#include "boost/mpl/void.hpp" #include "boost/mpl/aux_/void_spec.hpp" #include "boost/mpl/aux_/lambda_support.hpp" -#include "boost/type_traits/is_same.hpp" namespace boost { namespace mpl { namespace aux { - +/* template< typename LastIterator > struct find_if_pred { @@ -51,7 +45,7 @@ struct find_if_pred > >::type type; }; }; - +*/ } // namespace aux BOOST_MPL_AUX_AGLORITHM_NAMESPACE_BEGIN @@ -70,9 +64,9 @@ struct find_if public: typedef typename aux::iter_fold_if_impl< first_ - , pred_ + , void , mpl::arg<1> - , aux::find_if_pred + , aux::find_if_pred< pred_, last_ > , void , always >::iterator type;