30 #ifndef _STREAM_ITERATOR_H 31 #define _STREAM_ITERATOR_H 1 33 #pragma GCC system_header 37 namespace std _GLIBCXX_VISIBILITY(default)
39 _GLIBCXX_BEGIN_NAMESPACE_VERSION
47 template<
typename _Tp,
typename _CharT = char,
48 typename _Traits = char_traits<_CharT>,
typename _Dist = ptrdiff_t>
50 :
public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
53 typedef _CharT char_type;
54 typedef _Traits traits_type;
65 : _M_stream(0), _M_value(), _M_ok(false) {}
73 : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
77 #if __cplusplus >= 201103L 84 __glibcxx_requires_cond(_M_ok,
85 _M_message(__gnu_debug::__msg_deref_istream)
96 __glibcxx_requires_cond(_M_ok,
97 _M_message(__gnu_debug::__msg_inc_istream)
106 __glibcxx_requires_cond(_M_ok,
107 _M_message(__gnu_debug::__msg_inc_istream)
108 ._M_iterator(*
this));
116 {
return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); }
122 _M_ok = (_M_stream && *_M_stream) ?
true :
false;
125 *_M_stream >> _M_value;
126 _M_ok = *_M_stream ? true :
false;
132 template<
typename _Tp,
typename _CharT,
typename _Traits,
typename _Dist>
136 {
return __x._M_equal(__y); }
139 template <
class _Tp,
class _CharT,
class _Traits,
class _Dist>
143 {
return !__x._M_equal(__y); }
156 template<
typename _Tp,
typename _CharT = char,
157 typename _Traits = char_traits<_CharT> >
159 :
public iterator<output_iterator_tag, void, void, void, void>
171 const _CharT* _M_string;
189 : _M_stream(&__s), _M_string(__c) { }
193 : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
195 #if __cplusplus >= 201103L 204 __glibcxx_requires_cond(_M_stream != 0,
205 _M_message(__gnu_debug::__msg_output_ostream)
206 ._M_iterator(*
this));
207 *_M_stream << __value;
208 if (_M_string) *_M_stream << _M_string;
227 _GLIBCXX_END_NAMESPACE_VERSION
constexpr istream_iterator()
Construct end of input stream iterator.
Provides output iterator semantics for streams.
_CharT char_type
Public typedef.
ISO C++ entities toplevel namespace is std.
Provides input iterator semantics for streams.
ostream_iterator(const ostream_iterator &__obj)
Copy constructor.
Template class basic_ostream.
istream_iterator(istream_type &__s)
Construct start of input stream iterator.
ostream_iterator & operator=(const _Tp &__value)
Writes value to underlying ostream using operator<<. If constructed with delimiter string...
Template class basic_istream.
_Traits traits_type
Public typedef.
ostream_iterator(ostream_type &__s)
Construct from an ostream.
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
basic_ostream< _CharT, _Traits > ostream_type
Public typedef.
ostream_iterator(ostream_type &__s, const _CharT *__c)