33#ifndef _GLIBCXX_ISTREAM
34#define _GLIBCXX_ISTREAM 1
37#pragma GCC system_header
45#if __cplusplus > 202302L
49namespace std _GLIBCXX_VISIBILITY(default)
51_GLIBCXX_BEGIN_NAMESPACE_VERSION
65 template<
typename _CharT,
typename _Traits>
70 typedef _CharT char_type;
71 typedef typename _Traits::int_type int_type;
72 typedef typename _Traits::pos_type pos_type;
73 typedef typename _Traits::off_type off_type;
74 typedef _Traits traits_type;
103 { this->
init(__sb); }
129 {
return __pf(*
this); }
177 {
return _M_extract(__n); }
184 {
return _M_extract(__n); }
191 {
return _M_extract(__n); }
195 {
return _M_extract(__n); }
199 {
return _M_extract(__n); }
201#ifdef _GLIBCXX_USE_LONG_LONG
202#pragma GCC diagnostic push
203#pragma GCC diagnostic ignored "-Wlong-long"
206 {
return _M_extract(__n); }
210 {
return _M_extract(__n); }
211#pragma GCC diagnostic pop
226 {
return _M_extract(__f); }
230 {
return _M_extract(__f); }
234 {
return _M_extract(__f); }
237#if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
238 __attribute__((__always_inline__))
243 __istream_type& __ret = _M_extract(__flt);
245 if (__flt < -__FLT16_MAX__)
247 __f = -__FLT16_MAX__;
250 else if (__flt > __FLT16_MAX__)
256 __f =
static_cast<_Float16
>(__flt);
263#if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
264 __attribute__((__always_inline__))
269 __istream_type& __ret = _M_extract(__flt);
270 __f =
static_cast<_Float32
> (__flt);
275#if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
276 __attribute__((__always_inline__))
281 __istream_type& __ret = _M_extract(__dbl);
282 __f =
static_cast<_Float64
> (__dbl);
287#if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
288 __attribute__((__always_inline__))
293 __istream_type& __ret = _M_extract(__ldbl);
294 __f =
static_cast<_Float128
> (__ldbl);
299#if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
300 __attribute__((__always_inline__))
305 __istream_type& __ret = _M_extract(__flt);
307 if (__flt < -__BFLT16_MAX__)
309 __f = -__BFLT16_MAX__;
312 else if (__flt > __BFLT16_MAX__)
314 __f = __BFLT16_MAX__;
318 __f =
static_cast<__gnu_cxx::__bfloat16_t
>(__flt);
335 {
return _M_extract(__p); }
454 {
return this->
get(__s, __n, this->
widen(
'\n')); }
476 get(__streambuf_type& __sb, char_type __delim);
486 get(__streambuf_type& __sb)
487 {
return this->
get(__sb, this->
widen(
'\n')); }
558#if __cplusplus > 202302L
561 {
return ignore(__n, traits_type::to_int_type(__delim)); }
715#if __cplusplus >= 201103L
721 __ios_type::move(__rhs);
739 __ios_type::swap(__rhs);
744 template<
typename _ValueT>
746 _M_extract(_ValueT& __v);
765#ifdef _GLIBCXX_USE_WCHAR_T
790 template<
typename _CharT,
typename _Traits>
801 typedef typename __istream_type::__ctype_type __ctype_type;
802 typedef typename _Traits::int_type __int_type;
836#if __cplusplus >= 201103L
839 operator bool()
const
855 template<
typename _CharT,
typename _Traits>
859 template<
class _Traits>
862 {
return (__in >>
reinterpret_cast<char&
>(__c)); }
864 template<
class _Traits>
865 inline basic_istream<char, _Traits>&
867 {
return (__in >>
reinterpret_cast<char&
>(__c)); }
871 template<
typename _CharT,
typename _Traits>
873 __istream_extract(basic_istream<_CharT, _Traits>&, _CharT*,
streamsize);
904#if __cplusplus <= 201703L
905 template<
typename _CharT,
typename _Traits>
906 __attribute__((__nonnull__(2), __access__(__write_only__, 2)))
907 inline basic_istream<_CharT, _Traits>&
908 operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
913 size_t __n = __builtin_object_size(__s, 0);
914 if (__n <
sizeof(_CharT))
917 __glibcxx_assert(__n >=
sizeof(_CharT));
922 else if (__n != (
size_t)-1)
924 __n /=
sizeof(_CharT);
926 std::__istream_extract(__in, __s, __n);
927 if (__in.good() && (__w <= 0 || __n < (
size_t)__w))
931 const typename _Traits::int_type __c = __in.rdbuf()->sgetc();
932 const bool __eof = _Traits::eq_int_type(__c, _Traits::eof());
933 if (__builtin_expect(__eof,
true))
941 streamsize __n = __gnu_cxx::__numeric_traits<streamsize>::__max;
942 __n /=
sizeof(_CharT);
943 std::__istream_extract(__in, __s, __n);
948 template<
class _Traits>
949 __attribute__((__nonnull__(2), __access__(__write_only__, 2)))
951 operator>>(
basic_istream<
char, _Traits>& __in,
unsigned char* __s)
952 {
return __in >>
reinterpret_cast<char*
>(__s); }
954 template<
class _Traits>
955 __attribute__((__nonnull__(2), __access__(__write_only__, 2)))
957 operator>>(
basic_istream<
char, _Traits>& __in,
signed char* __s)
958 {
return __in >>
reinterpret_cast<char*
>(__s); }
962 template<
typename _CharT,
typename _Traits,
size_t _Num>
966 static_assert(_Num <= __gnu_cxx::__numeric_traits<streamsize>::__max);
967 std::__istream_extract(__in, __s, _Num);
971 template<
class _Traits,
size_t _Num>
972 inline basic_istream<char, _Traits>&
974 {
return __in >>
reinterpret_cast<char(&)[_Num]
>(__s); }
976 template<
class _Traits,
size_t _Num>
977 inline basic_istream<char, _Traits>&
979 {
return __in >>
reinterpret_cast<char(&)[_Num]
>(__s); }
994 template<
typename _CharT,
typename _Traits>
1003 typedef _CharT char_type;
1004 typedef typename _Traits::int_type int_type;
1005 typedef typename _Traits::pos_type pos_type;
1006 typedef typename _Traits::off_type off_type;
1007 typedef _Traits traits_type;
1021 : __istream_type(__sb), __ostream_type(__sb) { }
1031 : __istream_type(), __ostream_type() { }
1033#if __cplusplus >= 201103L
1037 : __istream_type(
std::move(__rhs)), __ostream_type(*this)
1053 { __istream_type::swap(__rhs); }
1077 template<
typename _CharT,
typename _Traits>
1081#if __cplusplus >= 201103L
1087#if __cpp_concepts >= 201907L && __glibcxx_type_trait_variable_templates
1088 template<
typename _Is,
typename _Tp>
1089 requires __derived_from_ios_base<_Is>
1091 using __rvalue_stream_extraction_t = _Is&&;
1093 template<
typename _Is,
typename _Tp,
1094 typename = _Require_derived_from_ios_base<_Is>,
1096 using __rvalue_stream_extraction_t = _Is&&;
1109 template<
typename _Istream,
typename _Tp>
1110 inline __rvalue_stream_extraction_t<_Istream, _Tp>
1118_GLIBCXX_END_NAMESPACE_VERSION
basic_istream< char > istream
Base class for char input streams.
auto declval() noexcept -> decltype(__declval< _Tp >(0))
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
ISO C++ entities toplevel namespace is std.
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, bitset< _Nb > &__x)
Global I/O operators for bitsets.
basic_istream< _CharT, _Traits > & ws(basic_istream< _CharT, _Traits > &__is)
Quick and easy way to eat whitespace.
void setstate(iostate __state)
Sets additional flags in the error state.
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
char_type widen(char __c) const
Widens characters.
basic_ios(basic_streambuf< _CharT, _Traits > *__sb)
Constructor performs initialization.
The actual work of input and output (interface).
Template class basic_istream.
__istream_type & operator>>(void *&__p)
Basic arithmetic extractors.
__istream_type & seekg(pos_type)
Changing the current read position.
streamsize gcount() const
Character counting.
int_type get()
Simple extraction.
streamsize readsome(char_type *__s, streamsize __n)
Extraction until the buffer is exhausted, but no more.
__istream_type & get(__streambuf_type &__sb, char_type __delim)
Extraction into another streambuf.
int_type peek()
Looking ahead in the stream.
__istream_type & ignore(streamsize __n, int_type __delim)
Discarding characters.
__istream_type & operator>>(__streambuf_type *__sb)
Extracting into another streambuf.
__istream_type & unget()
Unextracting the previous character.
pos_type tellg()
Getting the current read position.
__istream_type & operator>>(int &__n)
Integer arithmetic extractors.
__istream_type & get(__streambuf_type &__sb)
Extraction into another streambuf.
__istream_type & operator>>(double &__f)
Floating point arithmetic extractors.
__istream_type & ignore()
Simple extraction.
__istream_type & operator>>(bool &__n)
Integer arithmetic extractors.
__istream_type & operator>>(long &__n)
Integer arithmetic extractors.
__istream_type & get(char_type &__c)
Simple extraction.
virtual ~basic_istream()
Base destructor.
__istream_type & getline(char_type *__s, streamsize __n)
String extraction.
__istream_type & operator>>(unsigned long long &__n)
Integer arithmetic extractors.
__istream_type & operator>>(float &__f)
Floating point arithmetic extractors.
__istream_type & operator>>(__ios_type &(*__pf)(__ios_type &))
Interface for manipulators.
__istream_type & operator>>(long long &__n)
Integer arithmetic extractors.
__istream_type & operator>>(unsigned long &__n)
Integer arithmetic extractors.
__istream_type & read(char_type *__s, streamsize __n)
Extraction without delimiters.
__istream_type & operator>>(unsigned int &__n)
Integer arithmetic extractors.
__istream_type & operator>>(unsigned short &__n)
Integer arithmetic extractors.
__istream_type & putback(char_type __c)
Unextracting a single character.
basic_istream(__streambuf_type *__sb)
Base constructor.
__istream_type & seekg(off_type, ios_base::seekdir)
Changing the current read position.
__istream_type & getline(char_type *__s, streamsize __n, char_type __delim)
String extraction.
__istream_type & get(char_type *__s, streamsize __n, char_type __delim)
Simple multiple-character extraction.
__istream_type & get(char_type *__s, streamsize __n)
Simple multiple-character extraction.
__istream_type & operator>>(ios_base &(*__pf)(ios_base &))
Interface for manipulators.
__istream_type & operator>>(long double &__f)
Floating point arithmetic extractors.
__istream_type & operator>>(__istream_type &(*__pf)(__istream_type &))
Interface for manipulators.
int sync()
Synchronizing the stream buffer.
__istream_type & operator>>(short &__n)
Integer arithmetic extractors.
__istream_type & ignore(streamsize __n)
Simple extraction.
basic_ostream(__streambuf_type *__sb)
Base constructor.
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
virtual ~basic_iostream()
Destructor does nothing.
sentry(basic_istream< _CharT, _Traits > &__is, bool __noskipws=false)
The constructor performs all the work.
_Traits traits_type
Easy access to dependent types.
The base of the I/O class hierarchy.
_Ios_Iostate iostate
This is a bitmask type.
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
static const iostate goodbit
Indicates all is well.
_Ios_Seekdir seekdir
This is an enumerated type.
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Primary class template ctype facet.
Primary class template num_get.