35 #define _ISTREAM_TCC 1
37 #pragma GCC system_header
41 namespace std _GLIBCXX_VISIBILITY(default)
43 _GLIBCXX_BEGIN_NAMESPACE_VERSION
45 template<
typename _CharT,
typename _Traits>
57 const __int_type __eof = traits_type::eof();
59 __int_type __c = __sb->
sgetc();
62 while (!traits_type::eq_int_type(__c, __eof)
63 && __ct.
is(ctype_base::space,
64 traits_type::to_char_type(__c)))
70 if (traits_type::eq_int_type(__c, __eof))
77 __throw_exception_again;
91 template<
typename _CharT,
typename _Traits>
92 template<
typename _ValueT>
97 sentry __cerb(*
this,
false);
104 __ng.
get(*
this, 0, *
this, __err, __v);
109 __throw_exception_again;
114 this->setstate(__err);
119 template<
typename _CharT,
typename _Traits>
120 basic_istream<_CharT, _Traits>&
126 sentry __cerb(*
this,
false);
134 __ng.
get(*
this, 0, *
this, __err, __l);
138 if (__l < __gnu_cxx::__numeric_traits<short>::__min)
141 __n = __gnu_cxx::__numeric_traits<short>::__min;
143 else if (__l > __gnu_cxx::__numeric_traits<short>::__max)
146 __n = __gnu_cxx::__numeric_traits<short>::__max;
154 __throw_exception_again;
159 this->setstate(__err);
164 template<
typename _CharT,
typename _Traits>
171 sentry __cerb(*
this,
false);
179 __ng.
get(*
this, 0, *
this, __err, __l);
183 if (__l < __gnu_cxx::__numeric_traits<int>::__min)
186 __n = __gnu_cxx::__numeric_traits<int>::__min;
188 else if (__l > __gnu_cxx::__numeric_traits<int>::__max)
191 __n = __gnu_cxx::__numeric_traits<int>::__max;
199 __throw_exception_again;
204 this->setstate(__err);
209 template<
typename _CharT,
typename _Traits>
210 basic_istream<_CharT, _Traits>&
215 sentry __cerb(*
this,
false);
216 if (__cerb && __sbout)
221 if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof))
229 __throw_exception_again;
237 this->setstate(__err);
241 template<
typename _CharT,
typename _Traits>
242 typename basic_istream<_CharT, _Traits>::int_type
246 const int_type __eof = traits_type::eof();
247 int_type __c = __eof;
250 sentry __cerb(*
this,
true);
255 __c = this->rdbuf()->sbumpc();
257 if (!traits_type::eq_int_type(__c, __eof))
265 __throw_exception_again;
273 this->setstate(__err);
277 template<
typename _CharT,
typename _Traits>
278 basic_istream<_CharT, _Traits>&
284 sentry __cerb(*
this,
true);
289 const int_type __cb = this->rdbuf()->sbumpc();
291 if (!traits_type::eq_int_type(__cb, traits_type::eof()))
294 __c = traits_type::to_char_type(__cb);
302 __throw_exception_again;
310 this->setstate(__err);
314 template<
typename _CharT,
typename _Traits>
315 basic_istream<_CharT, _Traits>&
321 sentry __cerb(*
this,
true);
326 const int_type __idelim = traits_type::to_int_type(__delim);
327 const int_type __eof = traits_type::eof();
329 int_type __c = __sb->
sgetc();
332 && !traits_type::eq_int_type(__c, __eof)
333 && !traits_type::eq_int_type(__c, __idelim))
335 *__s++ = traits_type::to_char_type(__c);
339 if (traits_type::eq_int_type(__c, __eof))
345 __throw_exception_again;
357 this->setstate(__err);
361 template<
typename _CharT,
typename _Traits>
362 basic_istream<_CharT, _Traits>&
368 sentry __cerb(*
this,
true);
373 const int_type __idelim = traits_type::to_int_type(__delim);
374 const int_type __eof = traits_type::eof();
376 int_type __c = __this_sb->
sgetc();
377 char_type __c2 = traits_type::to_char_type(__c);
378 unsigned long long __gcount = 0;
380 while (!traits_type::eq_int_type(__c, __eof)
381 && !traits_type::eq_int_type(__c, __idelim)
382 && !traits_type::eq_int_type(__sb.
sputc(__c2), __eof))
385 __c = __this_sb->
snextc();
386 __c2 = traits_type::to_char_type(__c);
388 if (traits_type::eq_int_type(__c, __eof))
392 if (__gcount <= __gnu_cxx::__numeric_traits<streamsize>::__max)
395 _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
400 __throw_exception_again;
408 this->setstate(__err);
412 template<
typename _CharT,
typename _Traits>
413 basic_istream<_CharT, _Traits>&
419 sentry __cerb(*
this,
true);
424 const int_type __idelim = traits_type::to_int_type(__delim);
425 const int_type __eof = traits_type::eof();
427 int_type __c = __sb->
sgetc();
430 && !traits_type::eq_int_type(__c, __eof)
431 && !traits_type::eq_int_type(__c, __idelim))
433 *__s++ = traits_type::to_char_type(__c);
437 if (traits_type::eq_int_type(__c, __eof))
441 if (traits_type::eq_int_type(__c, __idelim))
453 __throw_exception_again;
465 this->setstate(__err);
472 template<
typename _CharT,
typename _Traits>
478 sentry __cerb(*
this,
true);
484 const int_type __eof = traits_type::eof();
487 if (traits_type::eq_int_type(__sb->
sbumpc(), __eof))
495 __throw_exception_again;
500 this->setstate(__err);
505 template<
typename _CharT,
typename _Traits>
511 sentry __cerb(*
this,
true);
512 if (__cerb && __n > 0)
517 const int_type __eof = traits_type::eof();
519 int_type __c = __sb->
sgetc();
528 bool __large_ignore =
false;
532 && !traits_type::eq_int_type(__c, __eof))
537 if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
538 && !traits_type::eq_int_type(__c, __eof))
541 __gnu_cxx::__numeric_traits<streamsize>::__min;
542 __large_ignore =
true;
548 if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max)
551 _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
553 if (traits_type::eq_int_type(__c, __eof))
558 if (traits_type::eq_int_type(__c, __eof))
565 __throw_exception_again;
570 this->setstate(__err);
575 template<
typename _CharT,
typename _Traits>
576 basic_istream<_CharT, _Traits>&
581 sentry __cerb(*
this,
true);
582 if (__cerb && __n > 0)
587 const int_type __eof = traits_type::eof();
589 int_type __c = __sb->
sgetc();
592 bool __large_ignore =
false;
596 && !traits_type::eq_int_type(__c, __eof)
597 && !traits_type::eq_int_type(__c, __delim))
602 if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
603 && !traits_type::eq_int_type(__c, __eof)
604 && !traits_type::eq_int_type(__c, __delim))
607 __gnu_cxx::__numeric_traits<streamsize>::__min;
608 __large_ignore =
true;
614 if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max)
617 _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
619 if (traits_type::eq_int_type(__c, __eof))
630 if (traits_type::eq_int_type(__c, __eof))
642 __throw_exception_again;
647 this->setstate(__err);
652 template<
typename _CharT,
typename _Traits>
653 typename basic_istream<_CharT, _Traits>::int_type
657 int_type __c = traits_type::eof();
659 sentry __cerb(*
this,
true);
665 __c = this->rdbuf()->sgetc();
666 if (traits_type::eq_int_type(__c, traits_type::eof()))
672 __throw_exception_again;
677 this->setstate(__err);
682 template<
typename _CharT,
typename _Traits>
688 sentry __cerb(*
this,
true);
694 _M_gcount = this->rdbuf()->sgetn(__s, __n);
701 __throw_exception_again;
706 this->setstate(__err);
711 template<
typename _CharT,
typename _Traits>
717 sentry __cerb(*
this,
true);
724 const streamsize __num = this->rdbuf()->in_avail();
727 else if (__num == -1)
733 __throw_exception_again;
738 this->setstate(__err);
743 template<
typename _CharT,
typename _Traits>
753 sentry __cerb(*
this,
true);
759 const int_type __eof = traits_type::eof();
762 || traits_type::eq_int_type(__sb->
sputbackc(__c), __eof))
768 __throw_exception_again;
773 this->setstate(__err);
778 template<
typename _CharT,
typename _Traits>
788 sentry __cerb(*
this,
true);
794 const int_type __eof = traits_type::eof();
797 || traits_type::eq_int_type(__sb->
sungetc(), __eof))
803 __throw_exception_again;
808 this->setstate(__err);
813 template<
typename _CharT,
typename _Traits>
821 sentry __cerb(*
this,
true);
839 __throw_exception_again;
844 this->setstate(__err);
849 template<
typename _CharT,
typename _Traits>
850 typename basic_istream<_CharT, _Traits>::pos_type
856 pos_type __ret = pos_type(-1);
857 sentry __cerb(*
this,
true);
869 __throw_exception_again;
877 template<
typename _CharT,
typename _Traits>
880 seekg(pos_type __pos)
886 sentry __cerb(*
this,
true);
895 const pos_type __p = this->rdbuf()->pubseekpos(__pos,
899 if (__p == pos_type(off_type(-1)))
906 __throw_exception_again;
911 this->setstate(__err);
916 template<
typename _CharT,
typename _Traits>
919 seekg(off_type __off, ios_base::seekdir __dir)
925 sentry __cerb(*
this,
true);
934 const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
938 if (__p == pos_type(off_type(-1)))
945 __throw_exception_again;
950 this->setstate(__err);
956 template<
typename _CharT,
typename _Traits>
961 typedef typename __istream_type::int_type __int_type;
963 typename __istream_type::sentry __cerb(__in,
false);
969 const __int_type __cb = __in.rdbuf()->sbumpc();
970 if (!_Traits::eq_int_type(__cb, _Traits::eof()))
971 __c = _Traits::to_char_type(__cb);
978 __throw_exception_again;
983 __in.setstate(__err);
988 template<
typename _CharT,
typename _Traits>
990 __istream_extract(basic_istream<_CharT, _Traits>& __in, _CharT* __s,
993 typedef basic_istream<_CharT, _Traits> __istream_type;
994 typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
995 typedef typename _Traits::int_type int_type;
996 typedef _CharT char_type;
997 typedef ctype<_CharT> __ctype_type;
1001 typename __istream_type::sentry __cerb(__in,
false);
1008 if (0 < __width && __width < __num)
1011 const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
1013 const int_type __eof = _Traits::eof();
1014 __streambuf_type* __sb = __in.rdbuf();
1015 int_type __c = __sb->
sgetc();
1017 while (__extracted < __num - 1
1018 && !_Traits::eq_int_type(__c, __eof)
1019 && !__ct.is(ctype_base::space,
1020 _Traits::to_char_type(__c)))
1022 *__s++ = _Traits::to_char_type(__c);
1024 __c = __sb->snextc();
1027 if (__extracted < __num - 1
1028 && _Traits::eq_int_type(__c, __eof))
1039 __throw_exception_again;
1047 __in.setstate(__err);
1051 template<
typename _CharT,
typename _Traits>
1052 basic_istream<_CharT, _Traits>&
1057 typedef typename __istream_type::int_type __int_type;
1060 const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
1061 const __int_type __eof = _Traits::eof();
1062 __streambuf_type* __sb = __in.rdbuf();
1063 __int_type __c = __sb->sgetc();
1065 while (!_Traits::eq_int_type(__c, __eof)
1066 && __ct.is(ctype_base::space, _Traits::to_char_type(__c)))
1067 __c = __sb->snextc();
1069 if (_Traits::eq_int_type(__c, __eof))
1076 #if _GLIBCXX_EXTERN_TEMPLATE
1077 extern template class basic_istream<char>;
1088 #ifdef _GLIBCXX_USE_LONG_LONG
1097 extern template class basic_iostream<char>;
1099 #ifdef _GLIBCXX_USE_WCHAR_T
1100 extern template class basic_istream<wchar_t>;
1110 #ifdef _GLIBCXX_USE_LONG_LONG
1119 extern template class basic_iostream<wchar_t>;
1123 _GLIBCXX_END_NAMESPACE_VERSION