Chris@16
|
1 // Copyright (c) 2001-2011 Hartmut Kaiser
|
Chris@16
|
2 //
|
Chris@16
|
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 #if !defined(BOOST_SPIRIT_ISTREAM_ITERATOR_JAN_03_2010_0522PM)
|
Chris@16
|
7 #define BOOST_SPIRIT_ISTREAM_ITERATOR_JAN_03_2010_0522PM
|
Chris@16
|
8
|
Chris@16
|
9 #include <boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp>
|
Chris@16
|
10 #if defined(BOOST_SPIRIT_DEBUG)
|
Chris@16
|
11 #include <boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp>
|
Chris@16
|
12 #else
|
Chris@16
|
13 #include <boost/spirit/home/support/iterators/detail/no_check_policy.hpp>
|
Chris@16
|
14 #endif
|
Chris@16
|
15 #include <boost/spirit/home/support/iterators/detail/istream_policy.hpp>
|
Chris@16
|
16 #include <boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp>
|
Chris@16
|
17 #include <boost/spirit/home/support/iterators/detail/combine_policies.hpp>
|
Chris@16
|
18 #include <boost/spirit/home/support/iterators/multi_pass.hpp>
|
Chris@16
|
19
|
Chris@16
|
20 namespace boost { namespace spirit
|
Chris@16
|
21 {
|
Chris@16
|
22 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
23 template <typename Elem, typename Traits = std::char_traits<Elem> >
|
Chris@16
|
24 class basic_istream_iterator :
|
Chris@16
|
25 public multi_pass<
|
Chris@16
|
26 std::basic_istream<Elem, Traits>
|
Chris@16
|
27 , iterator_policies::default_policy<
|
Chris@16
|
28 iterator_policies::ref_counted
|
Chris@16
|
29 #if defined(BOOST_SPIRIT_DEBUG)
|
Chris@16
|
30 , iterator_policies::buf_id_check
|
Chris@16
|
31 #else
|
Chris@16
|
32 , iterator_policies::no_check
|
Chris@16
|
33 #endif
|
Chris@16
|
34 , iterator_policies::istream
|
Chris@16
|
35 , iterator_policies::split_std_deque>
|
Chris@16
|
36 >
|
Chris@16
|
37 {
|
Chris@16
|
38 private:
|
Chris@16
|
39 typedef multi_pass<
|
Chris@16
|
40 std::basic_istream<Elem, Traits>
|
Chris@16
|
41 , iterator_policies::default_policy<
|
Chris@16
|
42 iterator_policies::ref_counted
|
Chris@16
|
43 #if defined(BOOST_SPIRIT_DEBUG)
|
Chris@16
|
44 , iterator_policies::buf_id_check
|
Chris@16
|
45 #else
|
Chris@16
|
46 , iterator_policies::no_check
|
Chris@16
|
47 #endif
|
Chris@16
|
48 , iterator_policies::istream
|
Chris@16
|
49 , iterator_policies::split_std_deque>
|
Chris@16
|
50 > base_type;
|
Chris@16
|
51
|
Chris@16
|
52 public:
|
Chris@16
|
53 basic_istream_iterator()
|
Chris@16
|
54 : base_type() {}
|
Chris@16
|
55
|
Chris@16
|
56 explicit basic_istream_iterator(std::basic_istream<Elem, Traits>& x)
|
Chris@16
|
57 : base_type(x) {}
|
Chris@16
|
58
|
Chris@16
|
59 basic_istream_iterator(basic_istream_iterator const& x)
|
Chris@16
|
60 : base_type(x) {}
|
Chris@16
|
61
|
Chris@16
|
62 #if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
|
Chris@16
|
63 basic_istream_iterator(int) // workaround for a bug in the library
|
Chris@16
|
64 : base_type() {} // shipped with gcc 3.1
|
Chris@16
|
65 #endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
|
Chris@16
|
66
|
Chris@16
|
67 basic_istream_iterator operator= (base_type const& rhs)
|
Chris@16
|
68 {
|
Chris@16
|
69 this->base_type::operator=(rhs);
|
Chris@16
|
70 return *this;
|
Chris@16
|
71 }
|
Chris@16
|
72
|
Chris@16
|
73 // default generated operators, destructor and assignment operator are ok.
|
Chris@16
|
74 };
|
Chris@16
|
75
|
Chris@16
|
76 typedef basic_istream_iterator<char> istream_iterator;
|
Chris@16
|
77
|
Chris@16
|
78 }}
|
Chris@16
|
79
|
Chris@16
|
80 #endif
|