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_PUSH_BACK_HPP) 9 #define FUSION_ALGORITHM_PUSH_BACK_HPP 10 11 #include <boost/spirit/fusion/sequence/append_view.hpp> 12 13 namespace boost { namespace fusion 14 { 15 namespace meta 16 { 17 template <typename Sequence, typename T> 18 struct push_back 19 { 20 typedef append_view<Sequence, T> type; 21 }; 22 } 23 24 namespace function 25 { 26 struct push_back 27 { 28 template <typename Sequence, typename T> 29 struct apply : meta::push_back<Sequence, T> {}; 30 31 template <typename Sequence, typename T> 32 inline typename apply<Sequence const, T>::type operator ()boost::fusion::function::push_back33 operator()(Sequence const& seq, T const& x) const 34 { 35 typedef append_view<Sequence const, T> result; 36 return result(seq, x); 37 } 38 39 template <typename Sequence, typename T> 40 inline typename apply<Sequence, T>::type operator ()boost::fusion::function::push_back41 operator()(Sequence& seq, T const& x) const 42 { 43 typedef append_view<Sequence, T> result; 44 return result(seq, x); 45 } 46 }; 47 } 48 49 function::push_back const push_back = function::push_back(); 50 }} 51 52 #endif 53 54