filter_view: Removed redundant filter operation

Iterator constructor always filters and determines right position.
This commit is contained in:
Kohei Takahashi
2018-07-07 08:17:26 +09:00
parent cc3fbc4f5d
commit 48f8af3e73

View File

@ -1,5 +1,6 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -8,14 +9,10 @@
#define FUSION_NEXT_IMPL_06052005_0900 #define FUSION_NEXT_IMPL_06052005_0900
#include <boost/fusion/support/config.hpp> #include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/detail/find_if.hpp> #include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/value_of.hpp> #include <boost/fusion/iterator/equal_to.hpp>
#include <boost/mpl/eval_if.hpp> #include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp> #include <boost/mpl/identity.hpp>
#include <boost/mpl/lambda.hpp>
#include <boost/mpl/quote.hpp>
#include <boost/mpl/bind.hpp>
#include <boost/mpl/placeholders.hpp>
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
@ -48,26 +45,13 @@ namespace boost { namespace fusion
>::type >::type
next_type; next_type;
typedef typename typedef filter_iterator<category, next_type, last_type, pred_type> type;
detail::static_find_if<
next_type
, last_type
, mpl::bind1<
typename mpl::lambda<pred_type>::type
, mpl::bind1<mpl::quote1<result_of::value_of>,mpl::_1>
>
>
filter;
typedef filter_iterator<
category, typename filter::type, last_type, pred_type>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type static type
call(Iterator const& i) call(Iterator const& i)
{ {
return type(filter::iter_call(i.first)); return type(fusion::next(i.first));
} }
}; };
}; };