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