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_ASSIGN_KEY_ACTOR_HPP 9 #define BOOST_SPIRIT_ACTOR_ASSIGN_KEY_ACTOR_HPP 10 11 #include <boost/spirit/home/classic/namespace.hpp> 12 #include <boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp> 13 #include <boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp> 14 15 namespace boost { namespace spirit { 16 17 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN 18 19 struct assign_key_action 20 { 21 template< 22 typename T, 23 typename ValueT, 24 typename KeyT 25 > actboost::spirit::assign_key_action26 void act(T& ref_, ValueT const& value_, KeyT const& key_) const 27 { 28 ref_[ key_ ] = value_; 29 } 30 31 template< 32 typename T, 33 typename ValueT, 34 typename IteratorT 35 > actboost::spirit::assign_key_action36 void act( 37 T& ref_, 38 ValueT const& value_, 39 IteratorT const& first_, 40 IteratorT const& last_ 41 ) const 42 { 43 typedef typename T::key_type key_type; 44 key_type key(first_,last_); 45 46 ref_[key] = value_; 47 } 48 }; 49 50 template< 51 typename T, 52 typename ValueT 53 > 54 inline ref_const_ref_value_actor<T,ValueT,assign_key_action> assign_key_a(T & ref_,ValueT const & value_)55 assign_key_a(T& ref_, ValueT const& value_) 56 { 57 return ref_const_ref_value_actor<T,ValueT,assign_key_action>( 58 ref_, 59 value_ 60 ); 61 } 62 63 template< 64 typename T, 65 typename ValueT, 66 typename KeyT 67 > 68 inline ref_const_ref_const_ref_actor< 69 T, 70 ValueT, 71 KeyT, 72 assign_key_action 73 > assign_key_a(T & ref_,ValueT const & value_,KeyT const & key_)74 assign_key_a( 75 T& ref_, 76 ValueT const& value_, 77 KeyT const& key_ 78 ) 79 { 80 return ref_const_ref_const_ref_actor< 81 T, 82 ValueT, 83 KeyT, 84 assign_key_action 85 >( 86 ref_, 87 value_, 88 key_ 89 ); 90 } 91 92 BOOST_SPIRIT_CLASSIC_NAMESPACE_END 93 94 }} 95 96 #endif 97