1 /*=============================================================================
2     Copyright (c) 2003 Joel de Guzman
3 
4     Use, modification and distribution is subject to the Boost Software
5     License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6     http://www.boost.org/LICENSE_1_0.txt)
7 ==============================================================================*/
8 #if !defined(FUSION_ALGORITHM_FILTER_HPP)
9 #define FUSION_ALGORITHM_FILTER_HPP
10 
11 #include <boost/spirit/fusion/sequence/filter_view.hpp>
12 
13 namespace boost { namespace fusion
14 {
15     namespace meta
16     {
17         template <typename Sequence, typename Pred>
18         struct filter
19         {
20             typedef filter_view<Sequence, Pred> type;
21         };
22     }
23 
24     namespace function
25     {
26         struct filter
27         {
28             template <typename Sequence, typename Pred>
29             struct apply : meta::filter<Sequence, Pred> {};
30 
31             template <typename Sequence, typename Pred>
32             typename apply<Sequence const, Pred>::type
operator ()boost::fusion::function::filter33             operator()(Sequence const& seq, Pred) const
34             {
35                 return filter_view<Sequence const, Pred>(seq);
36             }
37 
38             template <typename Sequence, typename Pred>
39             typename apply<Sequence, Pred>::type
operator ()boost::fusion::function::filter40             operator()(Sequence& seq, Pred) const
41             {
42                 return filter_view<Sequence, Pred>(seq);
43             }
44         };
45     }
46 
47     function::filter const filter = function::filter();
48 }}
49 
50 #endif
51 
52