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_08182005_0830)
8 #define FUSION_REPLACE_08182005_0830
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.hpp>
13 #include <boost/fusion/support/is_sequence.hpp>
14 #include <boost/utility/enable_if.hpp>
15 
16 namespace boost { namespace fusion
17 {
18     namespace result_of
19     {
20         template <typename Sequence, typename T>
21         struct replace
22         {
23             typedef transform_view<Sequence, detail::replacer<T> > type;
24         };
25     }
26 
27     template <typename Sequence, typename T>
28     BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
29     inline typename
30         enable_if<
31             traits::is_sequence<Sequence>
32           , typename result_of::replace<Sequence const, T>::type
33         >::type
replace(Sequence const & seq,T const & old_value,T const & new_value)34     replace(Sequence const& seq, T const& old_value, T const& new_value)
35     {
36         typedef typename result_of::replace<Sequence const, T>::type result;
37         detail::replacer<T> f(old_value, new_value);
38         return result(seq, f);
39     }
40 }}
41 
42 #endif
43 
44