PageRenderTime 45ms CodeModel.GetById 40ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/spirit/home/classic/actor/insert_key_actor.hpp

http://hadesmem.googlecode.com/
C++ Header | 97 lines | 60 code | 10 blank | 27 comment | 0 complexity | 2b8b8f8c8f0af64b00cc43e9e52310a6 MD5 | raw file
 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_INSERT_KEY_ACTOR_HPP
 9#define BOOST_SPIRIT_ACTOR_INSERT_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
14namespace boost { namespace spirit {
15
16BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
17
18    ///////////////////////////////////////////////////////////////////////////
19    //  Summary:
20    //  A semantic action policy that insert data into an associative
21    //  container using a const reference to data.
22    //  (This doc uses convention available in actors.hpp)
23    //
24    //  Actions (what it does):
25    //      ref.insert( T::value_type(value,value_ref) );
26    //      ref.insert( T::value_type(T::key_type(first,last), value_ref));;
27    //
28    //  Policy name:
29    //      insert_key_action
30    //
31    //  Policy holder, corresponding helper method:
32    //      ref_const_ref_value_actor, insert_key_a( ref, value_ref );
33    //
34    //  () operators: both
35    //
36    //  See also ref_const_ref_value_actor for more details.
37    ///////////////////////////////////////////////////////////////////////////
38    struct insert_key_action
39    {
40        template<
41            typename T,
42            typename ValueT,
43            typename ReferentT
44        >
45        void act(
46            T& ref_,
47            ValueT const& value_,
48            ReferentT const& key_
49            ) const
50        {
51            typedef typename T::value_type value_type;
52            value_type key_value(key_, value_);
53            ref_.insert( key_value );
54        }
55
56        template<
57            typename T,
58            typename ValueT,
59            typename IteratorT
60        >
61        void act(
62            T& ref_,
63            ValueT const& value_,
64            IteratorT const& first_,
65            IteratorT const& last_
66            ) const
67        {
68            typedef typename T::key_type key_type;
69            typedef typename T::value_type value_type;
70
71            key_type key(first_,last_);
72            value_type key_value(key, value_);
73            ref_.insert( key_value );
74        }
75    };
76
77    template<
78        typename T,
79        typename ValueT
80        >
81    inline ref_const_ref_value_actor<T,ValueT,insert_key_action> insert_key_a(
82        T& ref_,
83        ValueT const& value_
84        )
85    {
86        return ref_const_ref_value_actor<
87            T,
88            ValueT,
89            insert_key_action
90            >(ref_,value_);
91    }
92
93BOOST_SPIRIT_CLASSIC_NAMESPACE_END
94
95}}
96
97#endif