1 // Input streams -*- C++ -*-
3 // Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 2, or (at your option)
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING. If not, write to the Free
18 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
21 // As a special exception, you may use this file as part of a free software
22 // library without restriction. Specifically, if other files instantiate
23 // templates or use macros or inline functions from this file, or you compile
24 // this file and link it with other files to produce an executable, this
25 // file does not by itself cause the resulting executable to be covered by
26 // the GNU General Public License. This exception does not however
27 // invalidate any other reasons why the executable file might be covered by
28 // the GNU General Public License.
31 // ISO C++ 14882: 27.6.1 Input streams
35 * This is a Standard C++ Library header. You should @c #include this header
36 * in your programs, rather than any of the "st[dl]_*.h" implementation files.
40 #define _CPP_ISTREAM 1
42 #pragma GCC system_header
45 #include <limits> // For numeric_limits
49 // 27.6.1.1 Template class basic_istream
50 template<typename _CharT
, typename _Traits
>
51 class basic_istream
: virtual public basic_ios
<_CharT
, _Traits
>
54 // Types (inherited from basic_ios (27.4.4)):
55 typedef _CharT char_type
;
56 typedef typename
_Traits::int_type int_type
;
57 typedef typename
_Traits::pos_type pos_type
;
58 typedef typename
_Traits::off_type off_type
;
59 typedef _Traits traits_type
;
61 // Non-standard Types:
62 typedef basic_streambuf
<_CharT
, _Traits
> __streambuf_type
;
63 typedef basic_ios
<_CharT
, _Traits
> __ios_type
;
64 typedef basic_istream
<_CharT
, _Traits
> __istream_type
;
65 typedef istreambuf_iterator
<_CharT
, _Traits
> __istreambuf_iter
;
66 typedef num_get
<_CharT
, __istreambuf_iter
> __numget_type
;
67 typedef ctype
<_CharT
> __ctype_type
;
74 // 27.6.1.1.1 Constructor/destructor:
76 basic_istream(__streambuf_type
* __sb
)
79 _M_gcount
= streamsize(0);
84 { _M_gcount
= streamsize(0); }
86 // 27.6.1.1.2 Prefix/suffix:
90 // 27.6.1.2 Formatted input:
91 // 27.6.1.2.3 basic_istream::operator>>
93 operator>>(__istream_type
& (*__pf
)(__istream_type
&));
96 operator>>(__ios_type
& (*__pf
)(__ios_type
&));
99 operator>>(ios_base
& (*__pf
)(ios_base
&));
101 // 27.6.1.2.2 Arithmetic Extractors
103 operator>>(bool& __n
);
106 operator>>(short& __n
);
109 operator>>(unsigned short& __n
);
112 operator>>(int& __n
);
115 operator>>(unsigned int& __n
);
118 operator>>(long& __n
);
121 operator>>(unsigned long& __n
);
123 #ifdef _GLIBCPP_USE_LONG_LONG
125 operator>>(long long& __n
);
128 operator>>(unsigned long long& __n
);
132 operator>>(float& __f
);
135 operator>>(double& __f
);
138 operator>>(long double& __f
);
141 operator>>(void*& __p
);
144 operator>>(__streambuf_type
* __sb
);
146 // 27.6.1.3 Unformatted input:
149 { return _M_gcount
; }
158 get(char_type
* __s
, streamsize __n
, char_type __delim
);
160 inline __istream_type
&
161 get(char_type
* __s
, streamsize __n
)
162 { return this->get(__s
, __n
, this->widen('\n')); }
165 get(__streambuf_type
& __sb
, char_type __delim
);
167 inline __istream_type
&
168 get(__streambuf_type
& __sb
)
169 { return this->get(__sb
, this->widen('\n')); }
172 getline(char_type
* __s
, streamsize __n
, char_type __delim
);
174 inline __istream_type
&
175 getline(char_type
* __s
, streamsize __n
)
176 { return this->getline(__s
, __n
, this->widen('\n')); }
179 ignore(streamsize __n
= 1, int_type __delim
= traits_type::eof());
185 read(char_type
* __s
, streamsize __n
);
188 readsome(char_type
* __s
, streamsize __n
);
191 putback(char_type __c
);
206 seekg(off_type
, ios_base::seekdir
);
209 #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
210 // Not defined. (Side effect of DR 50.)
212 operator=(const __istream_type
&);
214 basic_istream(const __istream_type
&);
218 template<typename _CharT
, typename _Traits
>
219 class basic_istream
<_CharT
, _Traits
>::sentry
222 typedef _Traits traits_type
;
223 typedef basic_streambuf
<_CharT
, _Traits
> __streambuf_type
;
224 typedef basic_istream
<_CharT
, _Traits
> __istream_type
;
225 typedef typename
__istream_type::__ctype_type __ctype_type
;
226 typedef typename
_Traits::int_type __int_type
;
229 sentry(basic_istream
<_CharT
, _Traits
>& __is
, bool __noskipws
= false);
231 operator bool() { return _M_ok
; }
237 // 27.6.1.2.3 Character extraction templates
238 template<typename _CharT
, typename _Traits
>
239 basic_istream
<_CharT
, _Traits
>&
240 operator>>(basic_istream
<_CharT
, _Traits
>& __in
, _CharT
& __c
);
242 template<class _Traits
>
243 basic_istream
<char, _Traits
>&
244 operator>>(basic_istream
<char, _Traits
>& __in
, unsigned char& __c
)
245 { return (__in
>> reinterpret_cast<char&>(__c
)); }
247 template<class _Traits
>
248 basic_istream
<char, _Traits
>&
249 operator>>(basic_istream
<char, _Traits
>& __in
, signed char& __c
)
250 { return (__in
>> reinterpret_cast<char&>(__c
)); }
252 template<typename _CharT
, typename _Traits
>
253 basic_istream
<_CharT
, _Traits
>&
254 operator>>(basic_istream
<_CharT
, _Traits
>& __in
, _CharT
* __s
);
256 template<class _Traits
>
257 basic_istream
<char,_Traits
>&
258 operator>>(basic_istream
<char,_Traits
>& __in
, unsigned char* __s
)
259 { return (__in
>> reinterpret_cast<char*>(__s
)); }
261 template<class _Traits
>
262 basic_istream
<char,_Traits
>&
263 operator>>(basic_istream
<char,_Traits
>& __in
, signed char* __s
)
264 { return (__in
>> reinterpret_cast<char*>(__s
)); }
266 // 27.6.1.5 Template class basic_iostream
267 template<typename _CharT
, typename _Traits
>
269 : public basic_istream
<_CharT
, _Traits
>,
270 public basic_ostream
<_CharT
, _Traits
>
273 // Non-standard Types:
274 typedef basic_istream
<_CharT
, _Traits
> __istream_type
;
275 typedef basic_ostream
<_CharT
, _Traits
> __ostream_type
;
278 basic_iostream(basic_streambuf
<_CharT
, _Traits
>* __sb
)
279 : __istream_type(__sb
), __ostream_type(__sb
)
283 ~basic_iostream() { }
286 // 27.6.1.4 Standard basic_istream manipulators
287 template<typename _CharT
, typename _Traits
>
288 basic_istream
<_CharT
, _Traits
>&
289 ws(basic_istream
<_CharT
, _Traits
>& __is
);
292 #ifdef _GLIBCPP_NO_TEMPLATE_EXPORT
294 #ifdef _GLIBCPP_FULLY_COMPLIANT_HEADERS
295 # include <bits/istream.tcc>
299 #endif /* _CPP_ISTREAM */