/*=============================================================================
|
Copyright (c) 2007 Tobias Schwinger
|
Copyright (c) 2001-2011 Hartmut Kaiser
|
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_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM)
|
#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM
|
|
#include <cstddef>
|
#include <boost/spirit/home/support/multi_pass_wrapper.hpp>
|
#include <boost/swap.hpp>
|
|
namespace boost { namespace spirit {
|
|
namespace iterator_policies
|
{
|
// input policies
|
struct input_iterator;
|
struct buffering_input_iterator;
|
struct istream;
|
struct lex_input;
|
struct functor_input;
|
struct split_functor_input;
|
|
// ownership policies
|
struct ref_counted;
|
struct first_owner;
|
|
// checking policies
|
class illegal_backtracking;
|
struct buf_id_check;
|
struct no_check;
|
|
// storage policies
|
struct split_std_deque;
|
template<std::size_t N> struct fixed_size_queue;
|
|
// policy combiner
|
#if defined(BOOST_SPIRIT_DEBUG)
|
template<typename Ownership = ref_counted
|
, typename Checking = buf_id_check
|
, typename Input = buffering_input_iterator
|
, typename Storage = split_std_deque>
|
struct default_policy;
|
#else
|
template<typename Ownership = ref_counted
|
, typename Checking = no_check
|
, typename Input = buffering_input_iterator
|
, typename Storage = split_std_deque>
|
struct default_policy;
|
#endif
|
}
|
|
template <typename T
|
, typename Policies = iterator_policies::default_policy<> >
|
class multi_pass;
|
|
template <typename T, typename Policies>
|
void swap(multi_pass<T, Policies> &x, multi_pass<T, Policies> &y);
|
|
}} // namespace boost::spirit
|
|
namespace boost { namespace spirit { namespace traits
|
{
|
// declare special functions allowing to integrate any multi_pass iterator
|
// with expectation points
|
|
// multi_pass iterators require special handling (for the non-specialized
|
// versions of these functions see support/multi_pass_wrapper.hpp)
|
template <typename T, typename Policies>
|
void clear_queue(multi_pass<T, Policies>&
|
, BOOST_SCOPED_ENUM(clear_mode) mode = clear_mode::clear_if_enabled);
|
|
template <typename T, typename Policies>
|
void inhibit_clear_queue(multi_pass<T, Policies>&, bool);
|
|
template <typename T, typename Policies>
|
bool inhibit_clear_queue(multi_pass<T, Policies>&);
|
|
// Helper template to recognize a multi_pass iterator. This specialization
|
// will be instantiated for any multi_pass iterator.
|
template <typename T, typename Policies>
|
struct is_multi_pass<multi_pass<T, Policies> > : mpl::true_ {};
|
|
}}}
|
|
#endif
|