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_REF_ACTOR_HPP
9 #define BOOST_SPIRIT_ACTOR_REF_ACTOR_HPP
10 
11 #include <boost/spirit/home/classic/namespace.hpp>
12 
13 namespace boost { namespace spirit {
14 
15 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
16 
17     ///////////////////////////////////////////////////////////////////////////
18     //  Summary:
19     //  A semantic action policy holder. This holder stores a reference to ref,
20     //  act methods are fead with this reference. The parse result is not used
21     //  by this holder.
22     //
23     //  (This doc uses convention available in actors.hpp)
24     //
25     //  Constructor:
26     //      ...(T& ref_);
27     //      where ref_ is stored.
28     //
29     //  Action calls:
30     //      act(ref);
31     //
32     //  () operators: both
33     //
34     ///////////////////////////////////////////////////////////////////////////
35     template<
36         typename T,
37         typename ActionT
38     >
39     class ref_actor : public ActionT
40     {
41     private:
42         T& ref;
43     public:
44         explicit
ref_actor(T & ref_)45         ref_actor(T& ref_)
46         : ref(ref_){}
47 
48 
49         template<typename T2>
operator ()(T2 const &) const50         void operator()(T2 const& /*val*/) const
51         {
52             this->act(ref); // defined in ActionT
53         }
54 
55 
56         template<typename IteratorT>
operator ()(IteratorT const &,IteratorT const &) const57         void operator()(
58             IteratorT const& /*first*/,
59             IteratorT const& /*last*/
60             ) const
61         {
62             this->act(ref); // defined in ActionT
63         }
64     };
65 
66 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
67 
68 }}
69 
70 #endif
71