1 /*============================================================================= 2 Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com) 3 http://spirit.sourceforge.net/ 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 =============================================================================*/ 8 #ifndef BOOST_SPIRIT_ACTOR_ERASE_ACTOR_HPP 9 #define BOOST_SPIRIT_ACTOR_ERASE_ACTOR_HPP 10 11 #include <boost/spirit/home/classic/namespace.hpp> 12 #include <boost/spirit/home/classic/actor/ref_value_actor.hpp> 13 #include <boost/spirit/home/classic/actor/ref_const_ref_actor.hpp> 14 15 namespace boost { namespace spirit { 16 17 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN 18 19 /////////////////////////////////////////////////////////////////////////// 20 // Summary: 21 // A semantic action policy that calss the erase method. 22 // (This doc uses convention available in actors.hpp) 23 // 24 // Actions (what it does): 25 // ref.erase( value ); 26 // ref.erase( T::key_type(first,last) ); 27 // ref.erase( key_ref ); 28 // 29 // Policy name: 30 // erase_action 31 // 32 // Policy holder, corresponding helper method: 33 // ref_value_actor, erase_a( ref ); 34 // ref_const_ref_actor, erase_a( ref, key_ref ); 35 // 36 // () operators: both 37 // 38 // See also ref_value_actor and ref_const_ref_actor for more details. 39 /////////////////////////////////////////////////////////////////////////// 40 struct erase_action 41 { 42 template< 43 typename T, 44 typename KeyT 45 > actboost::spirit::erase_action46 void act(T& ref_, KeyT const& key_) const 47 { 48 ref_.erase(key_); 49 } 50 template< 51 typename T, 52 typename IteratorT 53 > actboost::spirit::erase_action54 void act( 55 T& ref_, 56 IteratorT const& first_, 57 IteratorT const& last_ 58 ) const 59 { 60 typedef typename T::key_type key_type; 61 key_type key(first_,last_); 62 63 ref_.erase(key); 64 } 65 }; 66 67 template<typename T> erase_a(T & ref_)68 inline ref_value_actor<T,erase_action> erase_a(T& ref_) 69 { 70 return ref_value_actor<T,erase_action>(ref_); 71 } 72 73 template< 74 typename T, 75 typename KeyT 76 > erase_a(T & ref_,KeyT const & key_)77 inline ref_const_ref_actor<T,KeyT,erase_action> erase_a( 78 T& ref_, 79 KeyT const& key_ 80 ) 81 { 82 return ref_const_ref_actor<T,KeyT,erase_action>(ref_,key_); 83 } 84 85 BOOST_SPIRIT_CLASSIC_NAMESPACE_END 86 87 }} 88 89 #endif 90