33#ifndef _GLIBCXX_ISTREAM
34#define _GLIBCXX_ISTREAM 1
37#pragma GCC system_header
42#include <bits/iosfwd.h>
51#if __cplusplus > 202302L
55namespace std _GLIBCXX_VISIBILITY(default)
57_GLIBCXX_BEGIN_NAMESPACE_VERSION
71 template<
typename _CharT,
typename _Traits>
76 typedef _CharT char_type;
77 typedef typename _Traits::int_type int_type;
78 typedef typename _Traits::pos_type pos_type;
79 typedef typename _Traits::off_type off_type;
80 typedef _Traits traits_type;
109 { this->
init(__sb); }
135 {
return __pf(*
this); }
183 {
return _M_extract(__n); }
190 {
return _M_extract(__n); }
197 {
return _M_extract(__n); }
201 {
return _M_extract(__n); }
205 {
return _M_extract(__n); }
207#ifdef _GLIBCXX_USE_LONG_LONG
208#pragma GCC diagnostic push
209#pragma GCC diagnostic ignored "-Wlong-long"
212 {
return _M_extract(__n); }
216 {
return _M_extract(__n); }
217#pragma GCC diagnostic pop
232 {
return _M_extract(__f); }
236 {
return _M_extract(__f); }
240 {
return _M_extract(__f); }
243#if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
244 __attribute__((__always_inline__))
249 __istream_type& __ret = _M_extract(__flt);
251 if (__flt < -__FLT16_MAX__)
253 __f = -__FLT16_MAX__;
256 else if (__flt > __FLT16_MAX__)
262 __f =
static_cast<_Float16
>(__flt);
269#if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
270 __attribute__((__always_inline__))
275 __istream_type& __ret = _M_extract(__flt);
276 __f =
static_cast<_Float32
> (__flt);
281#if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
282 __attribute__((__always_inline__))
287 __istream_type& __ret = _M_extract(__dbl);
288 __f =
static_cast<_Float64
> (__dbl);
293#if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
294 __attribute__((__always_inline__))
299 __istream_type& __ret = _M_extract(__ldbl);
300 __f =
static_cast<_Float128
> (__ldbl);
305#if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
306 __attribute__((__always_inline__))
311 __istream_type& __ret = _M_extract(__flt);
313 if (__flt < -__BFLT16_MAX__)
315 __f = -__BFLT16_MAX__;
318 else if (__flt > __BFLT16_MAX__)
320 __f = __BFLT16_MAX__;
324 __f =
static_cast<__gnu_cxx::__bfloat16_t
>(__flt);
341 {
return _M_extract(__p); }
460 {
return this->
get(__s, __n, this->
widen(
'\n')); }
482 get(__streambuf_type& __sb, char_type __delim);
492 get(__streambuf_type& __sb)
493 {
return this->
get(__sb, this->
widen(
'\n')); }
564#if __cplusplus > 202302L
565 [[__gnu__::__always_inline__]]
568 {
return ignore(__n, traits_type::to_int_type(__delim)); }
722#if __cplusplus >= 201103L
728 __ios_type::move(__rhs);
746 __ios_type::swap(__rhs);
751 template<
typename _ValueT>
753 _M_extract(_ValueT& __v);
772#ifdef _GLIBCXX_USE_WCHAR_T
797 template<
typename _CharT,
typename _Traits>
808 typedef typename __istream_type::__ctype_type __ctype_type;
809 typedef typename _Traits::int_type __int_type;
843#if __cplusplus >= 201103L
846 operator bool()
const
862 template<
typename _CharT,
typename _Traits>
866 template<
class _Traits>
869 {
return (__in >>
reinterpret_cast<char&
>(__c)); }
871 template<
class _Traits>
872 inline basic_istream<char, _Traits>&
874 {
return (__in >>
reinterpret_cast<char&
>(__c)); }
878 template<
typename _CharT,
typename _Traits>
880 __istream_extract(basic_istream<_CharT, _Traits>&, _CharT*,
streamsize);
911#if __cplusplus <= 201703L
912 template<
typename _CharT,
typename _Traits>
913 __attribute__((__nonnull__(2), __access__(__write_only__, 2)))
914 inline basic_istream<_CharT, _Traits>&
915 operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
920 size_t __n = __builtin_object_size(__s, 0);
921 if (__n <
sizeof(_CharT))
924 __glibcxx_assert(__n >=
sizeof(_CharT));
929 else if (__n != (
size_t)-1)
931 __n /=
sizeof(_CharT);
933 std::__istream_extract(__in, __s, __n);
934 if (__in.good() && (__w <= 0 || __n < (
size_t)__w))
938 const typename _Traits::int_type __c = __in.rdbuf()->sgetc();
939 const bool __eof = _Traits::eq_int_type(__c, _Traits::eof());
940 if (__builtin_expect(__eof,
true))
948 streamsize __n = __gnu_cxx::__numeric_traits<streamsize>::__max;
949 __n /=
sizeof(_CharT);
950 std::__istream_extract(__in, __s, __n);
955 template<
class _Traits>
956 __attribute__((__nonnull__(2), __access__(__write_only__, 2)))
958 operator>>(
basic_istream<
char, _Traits>& __in,
unsigned char* __s)
959 {
return __in >>
reinterpret_cast<char*
>(__s); }
961 template<
class _Traits>
962 __attribute__((__nonnull__(2), __access__(__write_only__, 2)))
964 operator>>(
basic_istream<
char, _Traits>& __in,
signed char* __s)
965 {
return __in >>
reinterpret_cast<char*
>(__s); }
969 template<
typename _CharT,
typename _Traits,
size_t _Num>
973 static_assert(_Num <= __gnu_cxx::__numeric_traits<streamsize>::__max);
974 std::__istream_extract(__in, __s, _Num);
978 template<
class _Traits,
size_t _Num>
979 inline basic_istream<char, _Traits>&
981 {
return __in >>
reinterpret_cast<char(&)[_Num]
>(__s); }
983 template<
class _Traits,
size_t _Num>
984 inline basic_istream<char, _Traits>&
986 {
return __in >>
reinterpret_cast<char(&)[_Num]
>(__s); }
1001 template<
typename _CharT,
typename _Traits>
1010 typedef _CharT char_type;
1011 typedef typename _Traits::int_type int_type;
1012 typedef typename _Traits::pos_type pos_type;
1013 typedef typename _Traits::off_type off_type;
1014 typedef _Traits traits_type;
1028 : __istream_type(__sb), __ostream_type(__sb) { }
1038 : __istream_type(), __ostream_type() { }
1040#if __cplusplus >= 201103L
1044 : __istream_type(
std::move(__rhs)), __ostream_type(*this)
1060 { __istream_type::swap(__rhs); }
1084 template<
typename _CharT,
typename _Traits>
1088#if __cplusplus >= 201103L
1094#if __cpp_concepts >= 201907L && __glibcxx_type_trait_variable_templates
1095 template<
typename _Is,
typename _Tp>
1096 requires __derived_from_ios_base<_Is>
1098 using __rvalue_stream_extraction_t = _Is&&;
1100 template<
typename _Is,
typename _Tp,
1101 typename = _Require_derived_from_ios_base<_Is>,
1103 using __rvalue_stream_extraction_t = _Is&&;
1116 template<
typename _Istream,
typename _Tp>
1117 inline __rvalue_stream_extraction_t<_Istream, _Tp>
1125_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.
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 & ignore(streamsize __n, char __delim)
Simple 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.
sentry(basic_istream< _CharT, _Traits > &__is, bool __noskipws=false)
The constructor performs all the work.
_Traits traits_type
Easy access to dependent types.
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
virtual ~basic_iostream()
Destructor does nothing.
The actual work of input and output (interface).
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 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...
basic_ostream(__streambuf_type *__sb)
Base constructor.
Primary class template ctype facet.
Primary class template num_get.
[concept.same], concept same_as