mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-30 20:47:31 +02:00
Merge pull request #190 from boostorg/cleanup/filter_view
Cleanup filter_view to improve performance
This commit is contained in:
@ -2,6 +2,7 @@
|
|||||||
Copyright (c) 2001-2011 Joel de Guzman
|
Copyright (c) 2001-2011 Joel de Guzman
|
||||||
Copyright (c) 2007 Dan Marsden
|
Copyright (c) 2007 Dan Marsden
|
||||||
Copyright (c) 2009 Christopher Schmidt
|
Copyright (c) 2009 Christopher Schmidt
|
||||||
|
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)
|
||||||
@ -13,7 +14,6 @@
|
|||||||
#include <boost/mpl/apply.hpp>
|
#include <boost/mpl/apply.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/or.hpp>
|
#include <boost/mpl/or.hpp>
|
||||||
#include <boost/fusion/iterator/advance.hpp>
|
#include <boost/fusion/iterator/advance.hpp>
|
||||||
#include <boost/fusion/iterator/distance.hpp>
|
#include <boost/fusion/iterator/distance.hpp>
|
||||||
@ -22,10 +22,9 @@
|
|||||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||||
#include <boost/fusion/support/category_of.hpp>
|
#include <boost/fusion/support/category_of.hpp>
|
||||||
|
#include <boost/core/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion {
|
namespace boost { namespace fusion { namespace detail
|
||||||
struct random_access_traversal_tag;
|
|
||||||
namespace detail
|
|
||||||
{
|
{
|
||||||
template <typename Iterator, typename Pred>
|
template <typename Iterator, typename Pred>
|
||||||
struct apply_filter
|
struct apply_filter
|
||||||
@ -178,8 +177,8 @@ namespace detail
|
|||||||
choose_find_if<
|
choose_find_if<
|
||||||
First
|
First
|
||||||
, Last
|
, Last
|
||||||
, typename mpl::lambda<Pred>::type
|
, Pred
|
||||||
, is_base_of<random_access_traversal_tag, typename traits::category_of<First>::type>::value
|
, traits::is_random_access<First>::value
|
||||||
>::type
|
>::type
|
||||||
type;
|
type;
|
||||||
|
|
||||||
@ -208,31 +207,23 @@ namespace detail
|
|||||||
return recursive_call(iter, found());
|
return recursive_call(iter, found());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Iterator, typename Tag>
|
template <typename Iterator>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
static type
|
static typename boost::disable_if<traits::is_random_access<Iterator>, type>::type
|
||||||
choose_call(Iterator const& iter, Tag)
|
iter_call(Iterator const& iter)
|
||||||
{
|
{
|
||||||
return recursive_call(iter);
|
return recursive_call(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Iterator>
|
template <typename Iterator>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
static type
|
static typename boost::enable_if<traits::is_random_access<Iterator>, type>::type
|
||||||
choose_call(Iterator const& iter, random_access_traversal_tag)
|
iter_call(Iterator const& iter)
|
||||||
{
|
{
|
||||||
typedef typename result_of::distance<Iterator, type>::type N;
|
typedef typename result_of::distance<Iterator, type>::type N;
|
||||||
return fusion::advance<N>(iter);
|
return fusion::advance<N>(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
|
||||||
static type
|
|
||||||
iter_call(Iterator const& iter)
|
|
||||||
{
|
|
||||||
return choose_call(iter, typename traits::category_of<Iterator>::type());
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
static type
|
static type
|
||||||
|
@ -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)
|
||||||
@ -10,7 +11,6 @@
|
|||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
#include <boost/fusion/view/filter_view/filter_view.hpp>
|
#include <boost/fusion/view/filter_view/filter_view.hpp>
|
||||||
#include <boost/mpl/not.hpp>
|
#include <boost/mpl/not.hpp>
|
||||||
#include <boost/type_traits/is_same.hpp>
|
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -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)
|
||||||
@ -9,7 +10,6 @@
|
|||||||
|
|
||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
|
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
|
||||||
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
|
|
||||||
#include <boost/fusion/iterator/value_of.hpp>
|
#include <boost/fusion/iterator/value_of.hpp>
|
||||||
#include <boost/fusion/support/iterator_base.hpp>
|
#include <boost/fusion/support/iterator_base.hpp>
|
||||||
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
|
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
|
||||||
|
Reference in New Issue
Block a user