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();
61 const __ctype_type& __ct = __check_facet(__in._M_ctype);
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>
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>
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>
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>
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);
379 while (!traits_type::eq_int_type(__c, __eof)
380 && !traits_type::eq_int_type(__c, __idelim)
381 && !traits_type::eq_int_type(__sb.
sputc(__c2), __eof))
384 __c = __this_sb->
snextc();
385 __c2 = traits_type::to_char_type(__c);
387 if (traits_type::eq_int_type(__c, __eof))
393 __throw_exception_again;
401 this->setstate(__err);
405 template<
typename _CharT,
typename _Traits>
412 sentry __cerb(*
this,
true);
417 const int_type __idelim = traits_type::to_int_type(__delim);
418 const int_type __eof = traits_type::eof();
420 int_type __c = __sb->
sgetc();
423 && !traits_type::eq_int_type(__c, __eof)
424 && !traits_type::eq_int_type(__c, __idelim))
426 *__s++ = traits_type::to_char_type(__c);
430 if (traits_type::eq_int_type(__c, __eof))
434 if (traits_type::eq_int_type(__c, __idelim))
446 __throw_exception_again;
458 this->setstate(__err);
465 template<
typename _CharT,
typename _Traits>
471 sentry __cerb(*
this,
true);
477 const int_type __eof = traits_type::eof();
480 if (traits_type::eq_int_type(__sb->
sbumpc(), __eof))
488 __throw_exception_again;
493 this->setstate(__err);
498 template<
typename _CharT,
typename _Traits>
504 sentry __cerb(*
this,
true);
505 if (__cerb && __n > 0)
510 const int_type __eof = traits_type::eof();
512 int_type __c = __sb->
sgetc();
521 bool __large_ignore =
false;
525 && !traits_type::eq_int_type(__c, __eof))
530 if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
531 && !traits_type::eq_int_type(__c, __eof))
534 __gnu_cxx::__numeric_traits<streamsize>::__min;
535 __large_ignore =
true;
542 _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
544 if (traits_type::eq_int_type(__c, __eof))
550 __throw_exception_again;
555 this->setstate(__err);
560 template<
typename _CharT,
typename _Traits>
566 sentry __cerb(*
this,
true);
567 if (__cerb && __n > 0)
572 const int_type __eof = traits_type::eof();
574 int_type __c = __sb->
sgetc();
577 bool __large_ignore =
false;
581 && !traits_type::eq_int_type(__c, __eof)
582 && !traits_type::eq_int_type(__c, __delim))
587 if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
588 && !traits_type::eq_int_type(__c, __eof)
589 && !traits_type::eq_int_type(__c, __delim))
592 __gnu_cxx::__numeric_traits<streamsize>::__min;
593 __large_ignore =
true;
600 _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
602 if (traits_type::eq_int_type(__c, __eof))
604 else if (traits_type::eq_int_type(__c, __delim))
607 < __gnu_cxx::__numeric_traits<streamsize>::__max)
615 __throw_exception_again;
620 this->setstate(__err);
625 template<
typename _CharT,
typename _Traits>
626 typename basic_istream<_CharT, _Traits>::int_type
630 int_type __c = traits_type::eof();
632 sentry __cerb(*
this,
true);
638 __c = this->rdbuf()->sgetc();
639 if (traits_type::eq_int_type(__c, traits_type::eof()))
645 __throw_exception_again;
650 this->setstate(__err);
655 template<
typename _CharT,
typename _Traits>
661 sentry __cerb(*
this,
true);
667 _M_gcount = this->rdbuf()->sgetn(__s, __n);
674 __throw_exception_again;
679 this->setstate(__err);
684 template<
typename _CharT,
typename _Traits>
690 sentry __cerb(*
this,
true);
697 const streamsize __num = this->rdbuf()->in_avail();
700 else if (__num == -1)
706 __throw_exception_again;
711 this->setstate(__err);
716 template<
typename _CharT,
typename _Traits>
726 sentry __cerb(*
this,
true);
732 const int_type __eof = traits_type::eof();
735 || traits_type::eq_int_type(__sb->
sputbackc(__c), __eof))
741 __throw_exception_again;
746 this->setstate(__err);
751 template<
typename _CharT,
typename _Traits>
761 sentry __cerb(*
this,
true);
767 const int_type __eof = traits_type::eof();
770 || traits_type::eq_int_type(__sb->
sungetc(), __eof))
776 __throw_exception_again;
781 this->setstate(__err);
786 template<
typename _CharT,
typename _Traits>
794 sentry __cerb(*
this,
true);
812 __throw_exception_again;
817 this->setstate(__err);
822 template<
typename _CharT,
typename _Traits>
823 typename basic_istream<_CharT, _Traits>::pos_type
829 pos_type __ret = pos_type(-1);
830 sentry __cerb(*
this,
true);
842 __throw_exception_again;
850 template<
typename _CharT,
typename _Traits>
859 sentry __cerb(*
this,
true);
868 const pos_type __p = this->rdbuf()->pubseekpos(__pos,
872 if (__p == pos_type(off_type(-1)))
879 __throw_exception_again;
884 this->setstate(__err);
889 template<
typename _CharT,
typename _Traits>
892 seekg(off_type __off, ios_base::seekdir __dir)
898 sentry __cerb(*
this,
true);
907 const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
911 if (__p == pos_type(off_type(-1)))
918 __throw_exception_again;
923 this->setstate(__err);
929 template<
typename _CharT,
typename _Traits>
934 typedef typename __istream_type::int_type __int_type;
936 typename __istream_type::sentry __cerb(__in,
false);
942 const __int_type __cb = __in.rdbuf()->sbumpc();
943 if (!_Traits::eq_int_type(__cb, _Traits::eof()))
944 __c = _Traits::to_char_type(__cb);
951 __throw_exception_again;
956 __in.setstate(__err);
961 template<
typename _CharT,
typename _Traits>
962 basic_istream<_CharT, _Traits>&
967 typedef typename _Traits::int_type int_type;
968 typedef _CharT char_type;
973 typename __istream_type::sentry __cerb(__in,
false);
981 __num = __gnu_cxx::__numeric_traits<streamsize>::__max;
983 const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
985 const int_type __eof = _Traits::eof();
986 __streambuf_type* __sb = __in.rdbuf();
987 int_type __c = __sb->sgetc();
989 while (__extracted < __num - 1
990 && !_Traits::eq_int_type(__c, __eof)
991 && !__ct.is(ctype_base::space,
992 _Traits::to_char_type(__c)))
994 *__s++ = _Traits::to_char_type(__c);
996 __c = __sb->snextc();
998 if (_Traits::eq_int_type(__c, __eof))
1009 __throw_exception_again;
1017 __in.setstate(__err);
1022 template<
typename _CharT,
typename _Traits>
1023 basic_istream<_CharT, _Traits>&
1028 typedef typename __istream_type::int_type __int_type;
1031 const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
1032 const __int_type __eof = _Traits::eof();
1033 __streambuf_type* __sb = __in.rdbuf();
1034 __int_type __c = __sb->sgetc();
1036 while (!_Traits::eq_int_type(__c, __eof)
1037 && __ct.is(ctype_base::space, _Traits::to_char_type(__c)))
1038 __c = __sb->snextc();
1040 if (_Traits::eq_int_type(__c, __eof))
1047 #if _GLIBCXX_EXTERN_TEMPLATE
1048 extern template class basic_istream<char>;
1062 #ifdef _GLIBCXX_USE_LONG_LONG
1071 extern template class basic_iostream<char>;
1073 #ifdef _GLIBCXX_USE_WCHAR_T
1074 extern template class basic_istream<wchar_t>;
1084 #ifdef _GLIBCXX_USE_LONG_LONG
1093 extern template class basic_iostream<wchar_t>;
1097 _GLIBCXX_END_NAMESPACE_VERSION