istream_iterator.hpp 2.7 KB

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