blob: c5816d123fc4575e68bda7ef2ef0f79b89b6a497 [file] [log] [blame]
// Copyright (c) 2001, Daniel C. Nuffer
// 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_LOOK_AHEAD_MAR_16_2007_1253PM)
#define BOOST_SPIRIT_ITERATOR_LOOK_AHEAD_MAR_16_2007_1253PM
#include <boost/spirit/home/support/iterators/detail/first_owner_policy.hpp>
#include <boost/spirit/home/support/iterators/detail/no_check_policy.hpp>
#include <boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp>
#include <boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp>
#include <boost/spirit/home/support/iterators/detail/combine_policies.hpp>
#include <boost/spirit/home/support/iterators/multi_pass.hpp>
namespace boost { namespace spirit
{
///////////////////////////////////////////////////////////////////////////
// this could be a template typedef, since such a thing doesn't
// exist in C++, we'll use inheritance to accomplish the same thing.
///////////////////////////////////////////////////////////////////////////
template <typename T, std::size_t N>
class look_ahead :
public multi_pass<T
, iterator_policies::default_policy<
iterator_policies::first_owner
, iterator_policies::no_check
, iterator_policies::input_iterator
, iterator_policies::fixed_size_queue<N> >
>
{
private:
typedef multi_pass<T
, iterator_policies::default_policy<
iterator_policies::first_owner
, iterator_policies::no_check
, iterator_policies::input_iterator
, iterator_policies::fixed_size_queue<N> >
> base_type;
public:
look_ahead()
: base_type() {}
explicit look_ahead(T x)
: base_type(x) {}
look_ahead(look_ahead const& x)
: base_type(x) {}
#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
look_ahead(int) // workaround for a bug in the library
: base_type() {} // shipped with gcc 3.1
#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
look_ahead operator= (base_type const& rhs)
{
this->base_type::operator=(rhs);
return *this;
}
// default generated operators destructor and assignment operator are ok.
};
}}
#endif