166 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*=============================================================================
 | 
						|
    Copyright (c) 1998-2003 Joel de Guzman
 | 
						|
    Copyright (c) 2003 Vaclav Vesely
 | 
						|
    http://spirit.sourceforge.net/
 | 
						|
 | 
						|
  Distributed under the Boost Software License, Version 1.0. (See accompanying
 | 
						|
  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
						|
=============================================================================*/
 | 
						|
#if !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
 | 
						|
#define BOOST_SPIRIT_NO_ACTIONS_HPP
 | 
						|
 | 
						|
#include <boost/spirit/home/classic/core/parser.hpp>
 | 
						|
#include <boost/spirit/home/classic/core/composite/composite.hpp>
 | 
						|
#include <boost/spirit/home/classic/core/non_terminal/rule.hpp>
 | 
						|
 | 
						|
namespace boost {
 | 
						|
namespace spirit {
 | 
						|
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// no_actions_action_policy
 | 
						|
 | 
						|
template<typename BaseT = action_policy>
 | 
						|
struct no_actions_action_policy:
 | 
						|
    public BaseT
 | 
						|
{
 | 
						|
    typedef BaseT base_t;
 | 
						|
 | 
						|
    no_actions_action_policy():
 | 
						|
        BaseT()
 | 
						|
    {}
 | 
						|
 | 
						|
    template<typename PolicyT>
 | 
						|
    no_actions_action_policy(PolicyT const& other):
 | 
						|
        BaseT(other)
 | 
						|
    {}
 | 
						|
 | 
						|
    template<typename ActorT, typename AttrT, typename IteratorT>
 | 
						|
    void
 | 
						|
    do_action(
 | 
						|
        ActorT const&       actor,
 | 
						|
        AttrT&              val,
 | 
						|
        IteratorT const&    first,
 | 
						|
        IteratorT const&    last) const
 | 
						|
    {}
 | 
						|
};
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// no_actions_scanner
 | 
						|
 | 
						|
 | 
						|
namespace detail
 | 
						|
{
 | 
						|
    template <typename ActionPolicy>
 | 
						|
    struct compute_no_actions_action_policy
 | 
						|
    {
 | 
						|
        typedef no_actions_action_policy<ActionPolicy> type;
 | 
						|
    };
 | 
						|
 | 
						|
    template <typename ActionPolicy>
 | 
						|
    struct compute_no_actions_action_policy<no_actions_action_policy<ActionPolicy> >
 | 
						|
    {
 | 
						|
        typedef no_actions_action_policy<ActionPolicy> type;
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
template<typename ScannerT = scanner<> >
 | 
						|
struct no_actions_scanner
 | 
						|
{
 | 
						|
    typedef scanner_policies<
 | 
						|
        typename ScannerT::iteration_policy_t,
 | 
						|
        typename ScannerT::match_policy_t,
 | 
						|
        typename detail::compute_no_actions_action_policy<typename ScannerT::action_policy_t>::type
 | 
						|
    > policies_t;
 | 
						|
 | 
						|
    typedef typename
 | 
						|
        rebind_scanner_policies<ScannerT, policies_t>::type type;
 | 
						|
};
 | 
						|
 | 
						|
#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
 | 
						|
 | 
						|
template<typename ScannerT = scanner<> >
 | 
						|
struct no_actions_scanner_list
 | 
						|
{
 | 
						|
    typedef
 | 
						|
        scanner_list<
 | 
						|
            ScannerT,
 | 
						|
            typename no_actions_scanner<ScannerT>::type
 | 
						|
        >
 | 
						|
            type;
 | 
						|
};
 | 
						|
 | 
						|
#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// no_actions_parser
 | 
						|
 | 
						|
struct no_actions_parser_gen;
 | 
						|
 | 
						|
template<typename ParserT>
 | 
						|
struct no_actions_parser:
 | 
						|
    public unary<ParserT, parser<no_actions_parser<ParserT> > >
 | 
						|
{
 | 
						|
    typedef no_actions_parser<ParserT>      self_t;
 | 
						|
    typedef unary_parser_category           parser_category_t;
 | 
						|
    typedef no_actions_parser_gen           parser_generator_t;
 | 
						|
    typedef unary<ParserT, parser<self_t> > base_t;
 | 
						|
 | 
						|
    template<typename ScannerT>
 | 
						|
    struct result
 | 
						|
    {
 | 
						|
        typedef typename parser_result<ParserT, ScannerT>::type type;
 | 
						|
    };
 | 
						|
 | 
						|
    no_actions_parser(ParserT const& p)
 | 
						|
    :   base_t(p)
 | 
						|
    {}
 | 
						|
 | 
						|
    template<typename ScannerT>
 | 
						|
    typename result<ScannerT>::type
 | 
						|
    parse(ScannerT const& scan) const
 | 
						|
    {
 | 
						|
        typedef typename no_actions_scanner<ScannerT>::policies_t policies_t;
 | 
						|
 | 
						|
        return this->subject().parse(scan.change_policies(policies_t(scan)));
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// no_actions_parser_gen
 | 
						|
 | 
						|
struct no_actions_parser_gen
 | 
						|
{
 | 
						|
    template<typename ParserT>
 | 
						|
    struct result
 | 
						|
    {
 | 
						|
        typedef no_actions_parser<ParserT> type;
 | 
						|
    };
 | 
						|
 | 
						|
    template<typename ParserT>
 | 
						|
    static no_actions_parser<ParserT>
 | 
						|
    generate(parser<ParserT> const& subject)
 | 
						|
    {
 | 
						|
        return no_actions_parser<ParserT>(subject.derived());
 | 
						|
    }
 | 
						|
 | 
						|
    template<typename ParserT>
 | 
						|
    no_actions_parser<ParserT>
 | 
						|
    operator[](parser<ParserT> const& subject) const
 | 
						|
    {
 | 
						|
        return no_actions_parser<ParserT>(subject.derived());
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// no_actions_d
 | 
						|
 | 
						|
const no_actions_parser_gen no_actions_d = no_actions_parser_gen();
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
 | 
						|
} // namespace spirit
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
#endif // !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
 |