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;
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;
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;
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;
241 template<
typename _CharT,
typename _Traits>
242 typename basic_istream<_CharT, _Traits>::int_type
246 const int_type __eof = traits_type::eof();
250 sentry __cerb(*
this,
true);
255 __c = this->
rdbuf()->sbumpc();
257 if (!traits_type::eq_int_type(__c, __eof))
265 __throw_exception_again;
277 template<
typename _CharT,
typename _Traits>
284 sentry __cerb(*
this,
true);
291 if (!traits_type::eq_int_type(__cb, traits_type::eof()))
294 __c = traits_type::to_char_type(__cb);
302 __throw_exception_again;
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();
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;
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();
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;
412 template<
typename _CharT,
typename _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();
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;
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;
505 template<
typename _CharT,
typename _Traits>
511 sentry __cerb(*
this,
true);
512 if (__cerb && __n > 0)
517 const int_type __eof = traits_type::eof();
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;
575 template<
typename _CharT,
typename _Traits>
581 sentry __cerb(*
this,
true);
582 if (__cerb && __n > 0)
587 const int_type __eof = traits_type::eof();
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;
652 template<
typename _CharT,
typename _Traits>
653 typename basic_istream<_CharT, _Traits>::int_type
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;
682 template<
typename _CharT,
typename _Traits>
688 sentry __cerb(*
this,
true);
701 __throw_exception_again;
711 template<
typename _CharT,
typename _Traits>
717 sentry __cerb(*
this,
true);
727 else if (__num == -1)
733 __throw_exception_again;
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;
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;
813 template<
typename _CharT,
typename _Traits>
821 sentry __cerb(*
this,
true);
839 __throw_exception_again;
849 template<
typename _CharT,
typename _Traits>
850 typename basic_istream<_CharT, _Traits>::pos_type
857 sentry __cerb(*
this,
true);
869 __throw_exception_again;
877 template<
typename _CharT,
typename _Traits>
886 sentry __cerb(*
this,
true);
906 __throw_exception_again;
916 template<
typename _CharT,
typename _Traits>
925 sentry __cerb(*
this,
true);
945 __throw_exception_again;
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;
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>;
1083 extern template istream& istream::_M_extract(
unsigned short&);
1084 extern template istream& istream::_M_extract(
unsigned int&);
1085 extern template istream& istream::_M_extract(
long&);
1086 extern template istream& istream::_M_extract(
unsigned long&);
1087 extern template istream& istream::_M_extract(
bool&);
1088 #ifdef _GLIBCXX_USE_LONG_LONG 1089 extern template istream& istream::_M_extract(
long long&);
1090 extern template istream& istream::_M_extract(
unsigned long long&);
1092 extern template istream& istream::_M_extract(
float&);
1093 extern template istream& istream::_M_extract(
double&);
1094 extern template istream& istream::_M_extract(
long double&);
1095 extern template istream& istream::_M_extract(
void*&);
1097 extern template class basic_iostream<char>;
1099 #ifdef _GLIBCXX_USE_WCHAR_T 1100 extern template class basic_istream<wchar_t>;
1105 extern template wistream& wistream::_M_extract(
unsigned short&);
1106 extern template wistream& wistream::_M_extract(
unsigned int&);
1107 extern template wistream& wistream::_M_extract(
long&);
1108 extern template wistream& wistream::_M_extract(
unsigned long&);
1109 extern template wistream& wistream::_M_extract(
bool&);
1110 #ifdef _GLIBCXX_USE_LONG_LONG 1111 extern template wistream& wistream::_M_extract(
long long&);
1112 extern template wistream& wistream::_M_extract(
unsigned long long&);
1114 extern template wistream& wistream::_M_extract(
float&);
1115 extern template wistream& wistream::_M_extract(
double&);
1116 extern template wistream& wistream::_M_extract(
long double&);
1117 extern template wistream& wistream::_M_extract(
void*&);
1119 extern template class basic_iostream<wchar_t>;
1123 _GLIBCXX_END_NAMESPACE_VERSION
__istream_type & operator>>(__istream_type &(*__pf)(__istream_type &))
Interface for manipulators.
_Traits::int_type int_type
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
iostate rdstate() const
Returns the error state of the stream buffer.
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
void setstate(iostate __state)
Sets additional flags in the error state.
Thrown as part of forced unwinding.A magic placeholder class that can be caught by reference to recog...
basic_istream< _CharT, _Traits > & ws(basic_istream< _CharT, _Traits > &__is)
Quick and easy way to eat whitespace.
int pubsync()
Calls virtual sync function.
__istream_type & read(char_type *__s, streamsize __n)
Extraction without delimiters.
Performs setup work for input streams.
_Traits::off_type off_type
__istream_type & unget()
Unextracting the previous character.
int sync()
Synchronizing the stream buffer.
static const iostate goodbit
Indicates all is well.
void clear(iostate __state=goodbit)
[Re]sets the error state.
Primary class template ctype facet.This template class defines classification and conversion function...
int_type snextc()
Getting the next character.
basic_istream< char > istream
Base class for char input streams.
The actual work of input and output (interface).
int_type sungetc()
Moving backwards in the input stream.
basic_ostream< _CharT, _Traits > * tie() const
Fetches the current tied stream.
__istream_type & getline(char_type *__s, streamsize __n, char_type __delim)
String extraction.
Primary class template num_get.This facet encapsulates the code to parse and return a number from a s...
basic_istream< wchar_t > wistream
Base class for wchar_t input streams.
locale getloc() const
Locale access.
basic_streambuf< _CharT, _Traits > * rdbuf() const
Accessing the underlying buffer.
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
streamsize readsome(char_type *__s, streamsize __n)
Extraction until the buffer is exhausted, but no more.
int_type peek()
Looking ahead in the stream.
static const fmtflags skipws
Skips leading white space before certain input operations.
_Ios_Iostate iostate
This is a bitmask type.
__istream_type & ignore()
Simple extraction.
__istream_type & seekg(pos_type)
Changing the current read position.
bool fail() const
Fast error checking.
iter_type get(iter_type __in, iter_type __end, ios_base &__io, ios_base::iostate &__err, bool &__v) const
Numeric parsing.
int_type sbumpc()
Getting the next character.
bool is(mask __m, char_type __c) const
Test char_type classification.
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
int_type sputbackc(char_type __c)
Pushing characters back into the input stream.
__istream_type & putback(char_type __c)
Unextracting a single character.
Template class basic_istream.
int_type sgetc()
Getting the next character.
static const seekdir cur
Request a seek relative to the current position within the sequence.
pos_type tellg()
Getting the current read position.
static const iostate badbit
Indicates a loss of integrity in an input or output sequence (such as an irrecoverable read error fro...
int_type get()
Simple extraction.
ISO C++ entities toplevel namespace is std.
sentry(basic_istream< _CharT, _Traits > &__is, bool __noskipws=false)
The constructor performs all the work.
fmtflags flags() const
Access to format flags.
bool good() const
Fast error checking.
_Traits::pos_type pos_type
static const openmode in
Open for input. Default for ifstream and fstream.
int_type sputc(char_type __c)
Entry point for all single-character output functions.