/src/contrib/boost/spirit/home/classic/utility/flush_multi_pass.hpp
http://pythonocc.googlecode.com/ · C++ Header · 77 lines · 35 code · 14 blank · 28 comment · 0 complexity · f43e2f3d8f4fca04640f64d0dd9f7a91 MD5 · raw file
- /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- 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)
- =============================================================================*/
- #ifndef BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
- #define BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
- ///////////////////////////////////////////////////////////////////////////////
- #include <boost/spirit/home/classic/namespace.hpp>
- #include <boost/spirit/home/classic/core.hpp>
- #include <boost/spirit/home/classic/iterator/multi_pass.hpp>
- ///////////////////////////////////////////////////////////////////////////////
- namespace boost { namespace spirit {
- BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
- namespace impl {
- template <typename T>
- void flush_iterator(T &) {}
- template <typename T1, typename T2, typename T3, typename T4>
- void flush_iterator(BOOST_SPIRIT_CLASSIC_NS::multi_pass<
- T1, T2, T3, T4, BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::std_deque> &i)
- {
- i.clear_queue();
- }
- } // namespace impl
- ///////////////////////////////////////////////////////////////////////////
- //
- // flush_multi_pass_parser
- //
- // The flush_multi_pass_parser flushes an underlying
- // multi_pass_iterator during the normal parsing process. This may
- // be used at certain points during the parsing process, when it is
- // clear, that no backtracking is needed anymore and the input
- // gathered so far may be discarded.
- //
- ///////////////////////////////////////////////////////////////////////////
- class flush_multi_pass_parser
- : public parser<flush_multi_pass_parser>
- {
- public:
- typedef flush_multi_pass_parser this_t;
- template <typename ScannerT>
- typename parser_result<this_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- impl::flush_iterator(scan.first);
- return scan.empty_match();
- }
- };
- ///////////////////////////////////////////////////////////////////////////
- //
- // predefined flush_multi_pass_p object
- //
- // This object should may used to flush a multi_pass_iterator along
- // the way during the normal parsing process.
- //
- ///////////////////////////////////////////////////////////////////////////
- flush_multi_pass_parser const
- flush_multi_pass_p = flush_multi_pass_parser();
- BOOST_SPIRIT_CLASSIC_NAMESPACE_END
- }} // namespace BOOST_SPIRIT_CLASSIC_NS
- #endif // BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP