1 /*=============================================================================
2     Copyright (c) 2001-2011 Joel de Guzman
3 
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #if !defined(FUSION_REPLACE_IF_08182005_0939)
8 #define FUSION_REPLACE_IF_08182005_0939
9 
10 #include <boost/fusion/support/config.hpp>
11 #include <boost/fusion/view/transform_view/transform_view.hpp>
12 #include <boost/fusion/algorithm/transformation/detail/replace_if.hpp>
13 #include <boost/fusion/support/is_sequence.hpp>
14 #include <boost/utility/enable_if.hpp>
15 #include <boost/type_traits/is_same.hpp>
16 
17 namespace boost { namespace fusion
18 {
19     namespace result_of
20     {
21         template <typename Sequence, typename F, typename T>
22         struct replace_if
23         {
24             typedef transform_view<Sequence, detail::replacer_if<F, T> > type;
25         };
26     }
27 
28     template <typename Sequence, typename F, typename T>
29     BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
30     inline typename
31         enable_if<
32             traits::is_sequence<Sequence>
33           , typename result_of::replace_if<Sequence const, F, T>::type
replace(Sequence const & seq,T const & old_value,T const & new_value)34         >::type
35     replace_if(Sequence const& seq, F pred, T const& new_value)
36     {
37         typedef typename result_of::replace_if<Sequence const, F, T>::type result;
38         detail::replacer_if<F, T> f(pred, new_value);
39         return result(seq, f);
40     }
41 }}
42 
43 #endif
44 
45