blob: e882e70f2387020c8053bf83007342dc48d58beb [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001// -*- C++ -*-
2//===--------------------------- istream ----------------------------------===//
3//
Howard Hinnantf5256e12010-05-11 21:36:01 +00004// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00005//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00006// This file is dual licensed under the MIT and the University of Illinois Open
7// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00008//
9//===----------------------------------------------------------------------===//
10
11#ifndef _LIBCPP_ISTREAM
12#define _LIBCPP_ISTREAM
13
14/*
15 istream synopsis
16
17template <class charT, class traits = char_traits<charT> >
18class basic_istream
19 : virtual public basic_ios<charT,traits>
20{
21public:
22 // types (inherited from basic_ios (27.5.4)):
23 typedef charT char_type;
24 typedef traits traits_type;
25 typedef typename traits_type::int_type int_type;
26 typedef typename traits_type::pos_type pos_type;
27 typedef typename traits_type::off_type off_type;
28
29 // 27.7.1.1.1 Constructor/destructor:
30 explicit basic_istream(basic_streambuf<char_type, traits_type>* sb);
31 basic_istream(basic_istream&& rhs);
32 virtual ~basic_istream();
33
34 // 27.7.1.1.2 Assign/swap:
35 basic_istream& operator=(basic_istream&& rhs);
36 void swap(basic_istream& rhs);
37
38 // 27.7.1.1.3 Prefix/suffix:
39 class sentry;
40
41 // 27.7.1.2 Formatted input:
42 basic_istream& operator>>(basic_istream& (*pf)(basic_istream&));
43 basic_istream& operator>>(basic_ios<char_type, traits_type>&
44 (*pf)(basic_ios<char_type, traits_type>&));
45 basic_istream& operator>>(ios_base& (*pf)(ios_base&));
46 basic_istream& operator>>(basic_streambuf<char_type, traits_type>* sb);
47 basic_istream& operator>>(bool& n);
48 basic_istream& operator>>(short& n);
49 basic_istream& operator>>(unsigned short& n);
50 basic_istream& operator>>(int& n);
51 basic_istream& operator>>(unsigned int& n);
52 basic_istream& operator>>(long& n);
53 basic_istream& operator>>(unsigned long& n);
54 basic_istream& operator>>(long long& n);
55 basic_istream& operator>>(unsigned long long& n);
56 basic_istream& operator>>(float& f);
57 basic_istream& operator>>(double& f);
58 basic_istream& operator>>(long double& f);
59 basic_istream& operator>>(void*& p);
60
61 // 27.7.1.3 Unformatted input:
62 streamsize gcount() const;
63 int_type get();
64 basic_istream& get(char_type& c);
65 basic_istream& get(char_type* s, streamsize n);
66 basic_istream& get(char_type* s, streamsize n, char_type delim);
67 basic_istream& get(basic_streambuf<char_type,traits_type>& sb);
68 basic_istream& get(basic_streambuf<char_type,traits_type>& sb, char_type delim);
69
70 basic_istream& getline(char_type* s, streamsize n);
71 basic_istream& getline(char_type* s, streamsize n, char_type delim);
72
73 basic_istream& ignore(streamsize n = 1, int_type delim = traits_type::eof());
74 int_type peek();
75 basic_istream& read (char_type* s, streamsize n);
76 streamsize readsome(char_type* s, streamsize n);
77
78 basic_istream& putback(char_type c);
79 basic_istream& unget();
80 int sync();
81
82 pos_type tellg();
83 basic_istream& seekg(pos_type);
84 basic_istream& seekg(off_type, ios_base::seekdir);
Marshall Clow546eca82014-09-16 15:27:01 +000085protected:
86 basic_istream(const basic_istream& rhs) = delete;
87 basic_istream(basic_istream&& rhs);
88 // 27.7.2.1.2 Assign/swap:
89 basic_istream& operator=(const basic_istream& rhs) = delete;
90 basic_istream& operator=(basic_istream&& rhs);
91 void swap(basic_istream& rhs);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000092};
93
94// 27.7.1.2.3 character extraction templates:
95template<class charT, class traits>
96 basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT&);
97
98template<class traits>
99 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char&);
100
101template<class traits>
102 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char&);
103
104template<class charT, class traits>
105 basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT*);
106
107template<class traits>
108 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char*);
109
110template<class traits>
111 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char*);
112
113template <class charT, class traits>
114 void
115 swap(basic_istream<charT, traits>& x, basic_istream<charT, traits>& y);
116
117typedef basic_istream<char> istream;
118typedef basic_istream<wchar_t> wistream;
119
120template <class charT, class traits = char_traits<charT> >
121class basic_iostream :
122 public basic_istream<charT,traits>,
123 public basic_ostream<charT,traits>
124{
125public:
126 // types:
127 typedef charT char_type;
128 typedef traits traits_type;
129 typedef typename traits_type::int_type int_type;
130 typedef typename traits_type::pos_type pos_type;
131 typedef typename traits_type::off_type off_type;
132
133 // constructor/destructor
134 explicit basic_iostream(basic_streambuf<char_type, traits_type>* sb);
135 basic_iostream(basic_iostream&& rhs);
136 virtual ~basic_iostream();
137
138 // assign/swap
139 basic_iostream& operator=(basic_iostream&& rhs);
140 void swap(basic_iostream& rhs);
141};
142
143template <class charT, class traits>
144 void
145 swap(basic_iostream<charT, traits>& x, basic_iostream<charT, traits>& y);
146
147typedef basic_iostream<char> iostream;
148typedef basic_iostream<wchar_t> wiostream;
149
150template <class charT, class traits>
151 basic_istream<charT,traits>&
152 ws(basic_istream<charT,traits>& is);
153
154template <class charT, class traits, class T>
155 basic_istream<charT, traits>&
156 operator>>(basic_istream<charT, traits>&& is, T& x);
157
158} // std
159
160*/
161
162#include <__config>
163#include <ostream>
164
Howard Hinnant66c6f972011-11-29 16:45:27 +0000165#include <__undef_min_max>
166
Howard Hinnant08e17472011-10-17 20:05:10 +0000167#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000168#pragma GCC system_header
Howard Hinnant08e17472011-10-17 20:05:10 +0000169#endif
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000170
171_LIBCPP_BEGIN_NAMESPACE_STD
172
173template <class _CharT, class _Traits>
Howard Hinnant0f678bd2013-08-12 18:38:34 +0000174class _LIBCPP_TYPE_VIS_ONLY basic_istream
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000175 : virtual public basic_ios<_CharT, _Traits>
176{
177 streamsize __gc_;
178public:
179 // types (inherited from basic_ios (27.5.4)):
180 typedef _CharT char_type;
181 typedef _Traits traits_type;
182 typedef typename traits_type::int_type int_type;
183 typedef typename traits_type::pos_type pos_type;
184 typedef typename traits_type::off_type off_type;
185
186 // 27.7.1.1.1 Constructor/destructor:
187 explicit basic_istream(basic_streambuf<char_type, traits_type>* __sb);
188 virtual ~basic_istream();
189protected:
Howard Hinnant73d21a42010-09-04 23:28:19 +0000190#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantac6de542011-07-07 21:03:52 +0000191 _LIBCPP_INLINE_VISIBILITY
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000192 basic_istream(basic_istream&& __rhs);
193#endif
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000194 // 27.7.1.1.2 Assign/swap:
Howard Hinnant73d21a42010-09-04 23:28:19 +0000195#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantac6de542011-07-07 21:03:52 +0000196 _LIBCPP_INLINE_VISIBILITY
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000197 basic_istream& operator=(basic_istream&& __rhs);
198#endif
199 void swap(basic_istream& __rhs);
Marshall Clow546eca82014-09-16 15:27:01 +0000200
201#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
202 basic_istream (basic_istream& __rhs) = delete;
203 basic_istream& operator=(basic_istream& __rhs) = delete;
204#else
205private:
206 basic_istream (basic_istream& __rhs);
207 basic_istream& operator=(basic_istream& __rhs);
208#endif
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000209public:
210
211 // 27.7.1.1.3 Prefix/suffix:
Howard Hinnant0f678bd2013-08-12 18:38:34 +0000212 class _LIBCPP_TYPE_VIS_ONLY sentry;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000213
214 // 27.7.1.2 Formatted input:
215 basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&));
216 basic_istream& operator>>(basic_ios<char_type, traits_type>&
217 (*__pf)(basic_ios<char_type, traits_type>&));
218 basic_istream& operator>>(ios_base& (*__pf)(ios_base&));
219 basic_istream& operator>>(basic_streambuf<char_type, traits_type>* __sb);
220 basic_istream& operator>>(bool& __n);
221 basic_istream& operator>>(short& __n);
222 basic_istream& operator>>(unsigned short& __n);
223 basic_istream& operator>>(int& __n);
224 basic_istream& operator>>(unsigned int& __n);
225 basic_istream& operator>>(long& __n);
226 basic_istream& operator>>(unsigned long& __n);
227 basic_istream& operator>>(long long& __n);
228 basic_istream& operator>>(unsigned long long& __n);
229 basic_istream& operator>>(float& __f);
230 basic_istream& operator>>(double& __f);
231 basic_istream& operator>>(long double& __f);
232 basic_istream& operator>>(void*& __p);
233
234 // 27.7.1.3 Unformatted input:
Howard Hinnant68a8e902010-09-22 15:29:08 +0000235 _LIBCPP_INLINE_VISIBILITY
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000236 streamsize gcount() const {return __gc_;}
237 int_type get();
238 basic_istream& get(char_type& __c);
239 basic_istream& get(char_type* __s, streamsize __n);
240 basic_istream& get(char_type* __s, streamsize __n, char_type __dlm);
241 basic_istream& get(basic_streambuf<char_type, traits_type>& __sb);
242 basic_istream& get(basic_streambuf<char_type, traits_type>& __sb, char_type __dlm);
243
244 basic_istream& getline(char_type* __s, streamsize __n);
245 basic_istream& getline(char_type* __s, streamsize __n, char_type __dlm);
246
247 basic_istream& ignore(streamsize __n = 1, int_type __dlm = traits_type::eof());
248 int_type peek();
249 basic_istream& read (char_type* __s, streamsize __n);
250 streamsize readsome(char_type* __s, streamsize __n);
251
252 basic_istream& putback(char_type __c);
253 basic_istream& unget();
254 int sync();
255
256 pos_type tellg();
257 basic_istream& seekg(pos_type __pos);
258 basic_istream& seekg(off_type __off, ios_base::seekdir __dir);
259};
260
261template <class _CharT, class _Traits>
Howard Hinnant0f678bd2013-08-12 18:38:34 +0000262class _LIBCPP_TYPE_VIS_ONLY basic_istream<_CharT, _Traits>::sentry
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000263{
264 bool __ok_;
265
266 sentry(const sentry&); // = delete;
267 sentry& operator=(const sentry&); // = delete;
268
269public:
270 explicit sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
271// ~sentry() = default;
272
Howard Hinnant68a8e902010-09-22 15:29:08 +0000273 _LIBCPP_INLINE_VISIBILITY
Howard Hinnant77861882012-02-21 21:46:43 +0000274 _LIBCPP_EXPLICIT
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000275 operator bool() const {return __ok_;}
276};
277
278template <class _CharT, class _Traits>
279basic_istream<_CharT, _Traits>::sentry::sentry(basic_istream<_CharT, _Traits>& __is,
280 bool __noskipws)
281 : __ok_(false)
282{
283 if (__is.good())
284 {
285 if (__is.tie())
286 __is.tie()->flush();
287 if (!__noskipws && (__is.flags() & ios_base::skipws))
288 {
Howard Hinnant99968442011-11-29 18:15:50 +0000289 typedef istreambuf_iterator<_CharT, _Traits> _Ip;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000290 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
Howard Hinnant99968442011-11-29 18:15:50 +0000291 _Ip __i(__is);
292 _Ip __eof;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000293 for (; __i != __eof; ++__i)
294 if (!__ct.is(__ct.space, *__i))
295 break;
296 if (__i == __eof)
297 __is.setstate(ios_base::failbit | ios_base::eofbit);
298 }
299 __ok_ = __is.good();
300 }
301 else
302 __is.setstate(ios_base::failbit);
303}
304
305template <class _CharT, class _Traits>
306inline _LIBCPP_INLINE_VISIBILITY
307basic_istream<_CharT, _Traits>::basic_istream(basic_streambuf<char_type, traits_type>* __sb)
308 : __gc_(0)
309{
310 this->init(__sb);
311}
312
Howard Hinnant73d21a42010-09-04 23:28:19 +0000313#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000314
315template <class _CharT, class _Traits>
316inline _LIBCPP_INLINE_VISIBILITY
317basic_istream<_CharT, _Traits>::basic_istream(basic_istream&& __rhs)
318 : __gc_(__rhs.__gc_)
319{
320 __rhs.__gc_ = 0;
321 this->move(__rhs);
322}
323
324template <class _CharT, class _Traits>
325inline _LIBCPP_INLINE_VISIBILITY
326basic_istream<_CharT, _Traits>&
327basic_istream<_CharT, _Traits>::operator=(basic_istream&& __rhs)
328{
329 swap(__rhs);
330 return *this;
331}
332
Howard Hinnant73d21a42010-09-04 23:28:19 +0000333#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000334
335template <class _CharT, class _Traits>
336basic_istream<_CharT, _Traits>::~basic_istream()
337{
338}
339
340template <class _CharT, class _Traits>
341inline _LIBCPP_INLINE_VISIBILITY
342void
343basic_istream<_CharT, _Traits>::swap(basic_istream& __rhs)
344{
Howard Hinnant0949eed2011-06-30 21:18:19 +0000345 _VSTD::swap(__gc_, __rhs.__gc_);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000346 basic_ios<char_type, traits_type>::swap(__rhs);
347}
348
349template <class _CharT, class _Traits>
350basic_istream<_CharT, _Traits>&
351basic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)
352{
353#ifndef _LIBCPP_NO_EXCEPTIONS
354 try
355 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000356#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000357 sentry __s(*this);
358 if (__s)
359 {
Howard Hinnant99968442011-11-29 18:15:50 +0000360 typedef istreambuf_iterator<char_type, traits_type> _Ip;
361 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000362 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000363 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000364 this->setstate(__err);
365 }
366#ifndef _LIBCPP_NO_EXCEPTIONS
367 }
368 catch (...)
369 {
370 this->__set_badbit_and_consider_rethrow();
371 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000372#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000373 return *this;
374}
375
376template <class _CharT, class _Traits>
377basic_istream<_CharT, _Traits>&
378basic_istream<_CharT, _Traits>::operator>>(unsigned int& __n)
379{
380#ifndef _LIBCPP_NO_EXCEPTIONS
381 try
382 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000383#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000384 sentry __s(*this);
385 if (__s)
386 {
Howard Hinnant99968442011-11-29 18:15:50 +0000387 typedef istreambuf_iterator<char_type, traits_type> _Ip;
388 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000389 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000390 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000391 this->setstate(__err);
392 }
393#ifndef _LIBCPP_NO_EXCEPTIONS
394 }
395 catch (...)
396 {
397 this->__set_badbit_and_consider_rethrow();
398 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000399#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000400 return *this;
401}
402
403template <class _CharT, class _Traits>
404basic_istream<_CharT, _Traits>&
405basic_istream<_CharT, _Traits>::operator>>(long& __n)
406{
407#ifndef _LIBCPP_NO_EXCEPTIONS
408 try
409 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000410#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000411 sentry __s(*this);
412 if (__s)
413 {
Howard Hinnant99968442011-11-29 18:15:50 +0000414 typedef istreambuf_iterator<char_type, traits_type> _Ip;
415 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000416 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000417 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000418 this->setstate(__err);
419 }
420#ifndef _LIBCPP_NO_EXCEPTIONS
421 }
422 catch (...)
423 {
424 this->__set_badbit_and_consider_rethrow();
425 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000426#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000427 return *this;
428}
429
430template <class _CharT, class _Traits>
431basic_istream<_CharT, _Traits>&
432basic_istream<_CharT, _Traits>::operator>>(unsigned long& __n)
433{
434#ifndef _LIBCPP_NO_EXCEPTIONS
435 try
436 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000437#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000438 sentry __s(*this);
439 if (__s)
440 {
Howard Hinnant99968442011-11-29 18:15:50 +0000441 typedef istreambuf_iterator<char_type, traits_type> _Ip;
442 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000443 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000444 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000445 this->setstate(__err);
446 }
447#ifndef _LIBCPP_NO_EXCEPTIONS
448 }
449 catch (...)
450 {
451 this->__set_badbit_and_consider_rethrow();
452 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000453#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000454 return *this;
455}
456
457template <class _CharT, class _Traits>
458basic_istream<_CharT, _Traits>&
459basic_istream<_CharT, _Traits>::operator>>(long long& __n)
460{
461#ifndef _LIBCPP_NO_EXCEPTIONS
462 try
463 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000464#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000465 sentry __s(*this);
466 if (__s)
467 {
Howard Hinnant99968442011-11-29 18:15:50 +0000468 typedef istreambuf_iterator<char_type, traits_type> _Ip;
469 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000470 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000471 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000472 this->setstate(__err);
473 }
474#ifndef _LIBCPP_NO_EXCEPTIONS
475 }
476 catch (...)
477 {
478 this->__set_badbit_and_consider_rethrow();
479 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000480#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000481 return *this;
482}
483
484template <class _CharT, class _Traits>
485basic_istream<_CharT, _Traits>&
486basic_istream<_CharT, _Traits>::operator>>(unsigned long long& __n)
487{
488#ifndef _LIBCPP_NO_EXCEPTIONS
489 try
490 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000491#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000492 sentry __s(*this);
493 if (__s)
494 {
Howard Hinnant99968442011-11-29 18:15:50 +0000495 typedef istreambuf_iterator<char_type, traits_type> _Ip;
496 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000497 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000498 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000499 this->setstate(__err);
500 }
501#ifndef _LIBCPP_NO_EXCEPTIONS
502 }
503 catch (...)
504 {
505 this->__set_badbit_and_consider_rethrow();
506 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000507#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000508 return *this;
509}
510
511template <class _CharT, class _Traits>
512basic_istream<_CharT, _Traits>&
513basic_istream<_CharT, _Traits>::operator>>(float& __n)
514{
515#ifndef _LIBCPP_NO_EXCEPTIONS
516 try
517 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000518#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000519 sentry __s(*this);
520 if (__s)
521 {
Howard Hinnant99968442011-11-29 18:15:50 +0000522 typedef istreambuf_iterator<char_type, traits_type> _Ip;
523 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000524 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000525 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000526 this->setstate(__err);
527 }
528#ifndef _LIBCPP_NO_EXCEPTIONS
529 }
530 catch (...)
531 {
532 this->__set_badbit_and_consider_rethrow();
533 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000534#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000535 return *this;
536}
537
538template <class _CharT, class _Traits>
539basic_istream<_CharT, _Traits>&
540basic_istream<_CharT, _Traits>::operator>>(double& __n)
541{
542#ifndef _LIBCPP_NO_EXCEPTIONS
543 try
544 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000545#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000546 sentry __s(*this);
547 if (__s)
548 {
Howard Hinnant99968442011-11-29 18:15:50 +0000549 typedef istreambuf_iterator<char_type, traits_type> _Ip;
550 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000551 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000552 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000553 this->setstate(__err);
554 }
555#ifndef _LIBCPP_NO_EXCEPTIONS
556 }
557 catch (...)
558 {
559 this->__set_badbit_and_consider_rethrow();
560 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000561#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000562 return *this;
563}
564
565template <class _CharT, class _Traits>
566basic_istream<_CharT, _Traits>&
567basic_istream<_CharT, _Traits>::operator>>(long double& __n)
568{
569#ifndef _LIBCPP_NO_EXCEPTIONS
570 try
571 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000572#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000573 sentry __s(*this);
574 if (__s)
575 {
Howard Hinnant99968442011-11-29 18:15:50 +0000576 typedef istreambuf_iterator<char_type, traits_type> _Ip;
577 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000578 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000579 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000580 this->setstate(__err);
581 }
582#ifndef _LIBCPP_NO_EXCEPTIONS
583 }
584 catch (...)
585 {
586 this->__set_badbit_and_consider_rethrow();
587 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000588#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000589 return *this;
590}
591
592template <class _CharT, class _Traits>
593basic_istream<_CharT, _Traits>&
594basic_istream<_CharT, _Traits>::operator>>(bool& __n)
595{
596#ifndef _LIBCPP_NO_EXCEPTIONS
597 try
598 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000599#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000600 sentry __s(*this);
601 if (__s)
602 {
Howard Hinnant99968442011-11-29 18:15:50 +0000603 typedef istreambuf_iterator<char_type, traits_type> _Ip;
604 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000605 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000606 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000607 this->setstate(__err);
608 }
609#ifndef _LIBCPP_NO_EXCEPTIONS
610 }
611 catch (...)
612 {
613 this->__set_badbit_and_consider_rethrow();
614 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000615#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000616 return *this;
617}
618
619template <class _CharT, class _Traits>
620basic_istream<_CharT, _Traits>&
621basic_istream<_CharT, _Traits>::operator>>(void*& __n)
622{
623#ifndef _LIBCPP_NO_EXCEPTIONS
624 try
625 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000626#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000627 sentry __s(*this);
628 if (__s)
629 {
Howard Hinnant99968442011-11-29 18:15:50 +0000630 typedef istreambuf_iterator<char_type, traits_type> _Ip;
631 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000632 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant99968442011-11-29 18:15:50 +0000633 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000634 this->setstate(__err);
635 }
636#ifndef _LIBCPP_NO_EXCEPTIONS
637 }
638 catch (...)
639 {
640 this->__set_badbit_and_consider_rethrow();
641 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000642#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000643 return *this;
644}
645
646template <class _CharT, class _Traits>
647basic_istream<_CharT, _Traits>&
648basic_istream<_CharT, _Traits>::operator>>(short& __n)
649{
650#ifndef _LIBCPP_NO_EXCEPTIONS
651 try
652 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000653#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000654 sentry __s(*this);
655 if (__s)
656 {
Howard Hinnant99968442011-11-29 18:15:50 +0000657 typedef istreambuf_iterator<char_type, traits_type> _Ip;
658 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000659 ios_base::iostate __err = ios_base::goodbit;
660 long __temp;
Howard Hinnant99968442011-11-29 18:15:50 +0000661 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000662 if (__temp < numeric_limits<short>::min())
663 {
664 __err |= ios_base::failbit;
665 __n = numeric_limits<short>::min();
666 }
667 else if (__temp > numeric_limits<short>::max())
668 {
669 __err |= ios_base::failbit;
670 __n = numeric_limits<short>::max();
671 }
672 else
673 __n = static_cast<short>(__temp);
674 this->setstate(__err);
675 }
676#ifndef _LIBCPP_NO_EXCEPTIONS
677 }
678 catch (...)
679 {
680 this->__set_badbit_and_consider_rethrow();
681 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000682#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000683 return *this;
684}
685
686template <class _CharT, class _Traits>
687basic_istream<_CharT, _Traits>&
688basic_istream<_CharT, _Traits>::operator>>(int& __n)
689{
690#ifndef _LIBCPP_NO_EXCEPTIONS
691 try
692 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000693#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000694 sentry __s(*this);
695 if (__s)
696 {
Howard Hinnant99968442011-11-29 18:15:50 +0000697 typedef istreambuf_iterator<char_type, traits_type> _Ip;
698 typedef num_get<char_type, _Ip> _Fp;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000699 ios_base::iostate __err = ios_base::goodbit;
700 long __temp;
Howard Hinnant99968442011-11-29 18:15:50 +0000701 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000702 if (__temp < numeric_limits<int>::min())
703 {
704 __err |= ios_base::failbit;
705 __n = numeric_limits<int>::min();
706 }
707 else if (__temp > numeric_limits<int>::max())
708 {
709 __err |= ios_base::failbit;
710 __n = numeric_limits<int>::max();
711 }
712 else
713 __n = static_cast<int>(__temp);
714 this->setstate(__err);
715 }
716#ifndef _LIBCPP_NO_EXCEPTIONS
717 }
718 catch (...)
719 {
720 this->__set_badbit_and_consider_rethrow();
721 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000722#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000723 return *this;
724}
725
726template <class _CharT, class _Traits>
727inline _LIBCPP_INLINE_VISIBILITY
728basic_istream<_CharT, _Traits>&
729basic_istream<_CharT, _Traits>::operator>>(basic_istream& (*__pf)(basic_istream&))
730{
731 return __pf(*this);
732}
733
734template <class _CharT, class _Traits>
735inline _LIBCPP_INLINE_VISIBILITY
736basic_istream<_CharT, _Traits>&
737basic_istream<_CharT, _Traits>::operator>>(basic_ios<char_type, traits_type>&
738 (*__pf)(basic_ios<char_type, traits_type>&))
739{
740 __pf(*this);
741 return *this;
742}
743
744template <class _CharT, class _Traits>
745inline _LIBCPP_INLINE_VISIBILITY
746basic_istream<_CharT, _Traits>&
747basic_istream<_CharT, _Traits>::operator>>(ios_base& (*__pf)(ios_base&))
748{
749 __pf(*this);
750 return *this;
751}
752
753template<class _CharT, class _Traits>
754basic_istream<_CharT, _Traits>&
755operator>>(basic_istream<_CharT, _Traits>& __is, _CharT* __s)
756{
757#ifndef _LIBCPP_NO_EXCEPTIONS
758 try
759 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000760#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000761 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
762 if (__sen)
763 {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000764 streamsize __n = __is.width();
Howard Hinnant92a836c2011-09-01 21:02:45 +0000765 if (__n <= 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000766 __n = numeric_limits<streamsize>::max() / sizeof(_CharT) - 1;
767 streamsize __c = 0;
768 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
Howard Hinnant92a836c2011-09-01 21:02:45 +0000769 ios_base::iostate __err = ios_base::goodbit;
770 while (__c < __n-1)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000771 {
Howard Hinnant92a836c2011-09-01 21:02:45 +0000772 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
773 if (_Traits::eq_int_type(__i, _Traits::eof()))
774 {
775 __err |= ios_base::eofbit;
776 break;
777 }
778 _CharT __ch = _Traits::to_char_type(__i);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000779 if (__ct.is(__ct.space, __ch))
780 break;
Howard Hinnant92a836c2011-09-01 21:02:45 +0000781 *__s++ = __ch;
782 ++__c;
783 __is.rdbuf()->sbumpc();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000784 }
785 *__s = _CharT();
786 __is.width(0);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000787 if (__c == 0)
788 __err |= ios_base::failbit;
789 __is.setstate(__err);
790 }
791#ifndef _LIBCPP_NO_EXCEPTIONS
792 }
793 catch (...)
794 {
795 __is.__set_badbit_and_consider_rethrow();
796 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000797#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000798 return __is;
799}
800
801template<class _Traits>
802inline _LIBCPP_INLINE_VISIBILITY
803basic_istream<char, _Traits>&
804operator>>(basic_istream<char, _Traits>& __is, unsigned char* __s)
805{
806 return __is >> (char*)__s;
807}
808
809template<class _Traits>
810inline _LIBCPP_INLINE_VISIBILITY
811basic_istream<char, _Traits>&
812operator>>(basic_istream<char, _Traits>& __is, signed char* __s)
813{
814 return __is >> (char*)__s;
815}
816
817template<class _CharT, class _Traits>
818basic_istream<_CharT, _Traits>&
819operator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c)
820{
821#ifndef _LIBCPP_NO_EXCEPTIONS
822 try
823 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000824#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000825 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
826 if (__sen)
827 {
Howard Hinnantdf85e572011-02-27 18:02:02 +0000828 typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
829 if (_Traits::eq_int_type(__i, _Traits::eof()))
830 __is.setstate(ios_base::eofbit | ios_base::failbit);
831 else
832 __c = _Traits::to_char_type(__i);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000833 }
834#ifndef _LIBCPP_NO_EXCEPTIONS
835 }
836 catch (...)
837 {
838 __is.__set_badbit_and_consider_rethrow();
839 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000840#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000841 return __is;
842}
843
844template<class _Traits>
845inline _LIBCPP_INLINE_VISIBILITY
846basic_istream<char, _Traits>&
847operator>>(basic_istream<char, _Traits>& __is, unsigned char& __c)
848{
849 return __is >> (char&)__c;
850}
851
852template<class _Traits>
853inline _LIBCPP_INLINE_VISIBILITY
854basic_istream<char, _Traits>&
855operator>>(basic_istream<char, _Traits>& __is, signed char& __c)
856{
857 return __is >> (char&)__c;
858}
859
860template<class _CharT, class _Traits>
861basic_istream<_CharT, _Traits>&
862basic_istream<_CharT, _Traits>::operator>>(basic_streambuf<char_type, traits_type>* __sb)
863{
864 __gc_ = 0;
865#ifndef _LIBCPP_NO_EXCEPTIONS
866 try
867 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000868#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000869 sentry __s(*this, true);
870 if (__s)
871 {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000872 if (__sb)
873 {
874#ifndef _LIBCPP_NO_EXCEPTIONS
875 try
876 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000877#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000878 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnant92a836c2011-09-01 21:02:45 +0000879 while (true)
880 {
881 typename traits_type::int_type __i = this->rdbuf()->sgetc();
882 if (traits_type::eq_int_type(__i, _Traits::eof()))
883 {
884 __err |= ios_base::eofbit;
885 break;
886 }
887 if (traits_type::eq_int_type(
888 __sb->sputc(traits_type::to_char_type(__i)),
889 traits_type::eof()))
890 break;
891 ++__gc_;
892 this->rdbuf()->sbumpc();
893 }
894 if (__gc_ == 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000895 __err |= ios_base::failbit;
896 this->setstate(__err);
897#ifndef _LIBCPP_NO_EXCEPTIONS
898 }
899 catch (...)
900 {
Howard Hinnant92a836c2011-09-01 21:02:45 +0000901 if (__gc_ == 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000902 this->__set_failbit_and_consider_rethrow();
903 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000904#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000905 }
906 else
907 this->setstate(ios_base::failbit);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000908 }
909#ifndef _LIBCPP_NO_EXCEPTIONS
910 }
911 catch (...)
912 {
913 this->__set_badbit_and_consider_rethrow();
914 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000915#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000916 return *this;
917}
918
919template<class _CharT, class _Traits>
920typename basic_istream<_CharT, _Traits>::int_type
921basic_istream<_CharT, _Traits>::get()
922{
923 __gc_ = 0;
924 int_type __r = traits_type::eof();
925#ifndef _LIBCPP_NO_EXCEPTIONS
926 try
927 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000928#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000929 sentry __s(*this, true);
930 if (__s)
931 {
Howard Hinnant92a836c2011-09-01 21:02:45 +0000932 __r = this->rdbuf()->sbumpc();
933 if (traits_type::eq_int_type(__r, traits_type::eof()))
934 this->setstate(ios_base::failbit | ios_base::eofbit);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000935 else
Howard Hinnant92a836c2011-09-01 21:02:45 +0000936 __gc_ = 1;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000937 }
938#ifndef _LIBCPP_NO_EXCEPTIONS
939 }
940 catch (...)
941 {
942 this->__set_badbit_and_consider_rethrow();
943 }
Howard Hinnant324bb032010-08-22 00:02:43 +0000944#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000945 return __r;
946}
947
948template<class _CharT, class _Traits>
949inline _LIBCPP_INLINE_VISIBILITY
950basic_istream<_CharT, _Traits>&
951basic_istream<_CharT, _Traits>::get(char_type& __c)
952{
953 int_type __ch = get();
954 if (__ch != traits_type::eof())
955 __c = traits_type::to_char_type(__ch);
956 return *this;
957}
958
959template<class _CharT, class _Traits>
960basic_istream<_CharT, _Traits>&
961basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n, char_type __dlm)
962{
963 __gc_ = 0;
964#ifndef _LIBCPP_NO_EXCEPTIONS
965 try
966 {
Howard Hinnant324bb032010-08-22 00:02:43 +0000967#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000968 sentry __sen(*this, true);
969 if (__sen)
970 {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000971 if (__n > 0)
972 {
Howard Hinnant92a836c2011-09-01 21:02:45 +0000973 ios_base::iostate __err = ios_base::goodbit;
974 while (__gc_ < __n-1)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000975 {
Howard Hinnant92a836c2011-09-01 21:02:45 +0000976 int_type __i = this->rdbuf()->sgetc();
977 if (traits_type::eq_int_type(__i, traits_type::eof()))
978 {
979 __err |= ios_base::eofbit;
980 break;
981 }
982 char_type __ch = traits_type::to_char_type(__i);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000983 if (traits_type::eq(__ch, __dlm))
984 break;
Howard Hinnant92a836c2011-09-01 21:02:45 +0000985 *__s++ = __ch;
986 ++__gc_;
987 this->rdbuf()->sbumpc();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000988 }
989 *__s = char_type();
Howard Hinnant92a836c2011-09-01 21:02:45 +0000990 if (__gc_ == 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000991 __err |= ios_base::failbit;
992 this->setstate(__err);
993 }
994 else
995 this->setstate(ios_base::failbit);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000996 }
997#ifndef _LIBCPP_NO_EXCEPTIONS
998 }
999 catch (...)
1000 {
1001 this->__set_badbit_and_consider_rethrow();
1002 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001003#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001004 return *this;
1005}
1006
1007template<class _CharT, class _Traits>
1008inline _LIBCPP_INLINE_VISIBILITY
1009basic_istream<_CharT, _Traits>&
1010basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n)
1011{
1012 return get(__s, __n, this->widen('\n'));
1013}
1014
1015template<class _CharT, class _Traits>
1016basic_istream<_CharT, _Traits>&
1017basic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __sb,
1018 char_type __dlm)
1019{
1020 __gc_ = 0;
1021#ifndef _LIBCPP_NO_EXCEPTIONS
1022 try
1023 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001024#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001025 sentry __sen(*this, true);
1026 if (__sen)
1027 {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001028 ios_base::iostate __err = ios_base::goodbit;
1029#ifndef _LIBCPP_NO_EXCEPTIONS
1030 try
1031 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001032#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnant92a836c2011-09-01 21:02:45 +00001033 while (true)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001034 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001035 typename traits_type::int_type __i = this->rdbuf()->sgetc();
1036 if (traits_type::eq_int_type(__i, traits_type::eof()))
1037 {
1038 __err |= ios_base::eofbit;
1039 break;
1040 }
1041 char_type __ch = traits_type::to_char_type(__i);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001042 if (traits_type::eq(__ch, __dlm))
1043 break;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001044 if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type::eof()))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001045 break;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001046 ++__gc_;
1047 this->rdbuf()->sbumpc();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001048 }
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001049#ifndef _LIBCPP_NO_EXCEPTIONS
1050 }
1051 catch (...)
1052 {
1053 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001054#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnant92a836c2011-09-01 21:02:45 +00001055 if (__gc_ == 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001056 __err |= ios_base::failbit;
1057 this->setstate(__err);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001058 }
1059#ifndef _LIBCPP_NO_EXCEPTIONS
1060 }
1061 catch (...)
1062 {
1063 this->__set_badbit_and_consider_rethrow();
1064 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001065#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001066 return *this;
1067}
1068
1069template<class _CharT, class _Traits>
1070inline _LIBCPP_INLINE_VISIBILITY
1071basic_istream<_CharT, _Traits>&
1072basic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __sb)
1073{
1074 return get(__sb, this->widen('\n'));
1075}
1076
1077template<class _CharT, class _Traits>
1078basic_istream<_CharT, _Traits>&
1079basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_type __dlm)
1080{
1081 __gc_ = 0;
1082#ifndef _LIBCPP_NO_EXCEPTIONS
1083 try
1084 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001085#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001086 sentry __sen(*this, true);
1087 if (__sen)
1088 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001089 ios_base::iostate __err = ios_base::goodbit;
1090 while (true)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001091 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001092 typename traits_type::int_type __i = this->rdbuf()->sgetc();
1093 if (traits_type::eq_int_type(__i, traits_type::eof()))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001094 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001095 __err |= ios_base::eofbit;
1096 break;
1097 }
1098 char_type __ch = traits_type::to_char_type(__i);
1099 if (traits_type::eq(__ch, __dlm))
1100 {
1101 this->rdbuf()->sbumpc();
1102 ++__gc_;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001103 break;
1104 }
Howard Hinnant92a836c2011-09-01 21:02:45 +00001105 if (__gc_ >= __n-1)
1106 {
1107 __err |= ios_base::failbit;
1108 break;
1109 }
1110 *__s++ = __ch;
1111 this->rdbuf()->sbumpc();
1112 ++__gc_;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001113 }
Howard Hinnant92a836c2011-09-01 21:02:45 +00001114 if (__n > 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001115 *__s = char_type();
Howard Hinnant92a836c2011-09-01 21:02:45 +00001116 if (__gc_ == 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001117 __err |= ios_base::failbit;
1118 this->setstate(__err);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001119 }
1120#ifndef _LIBCPP_NO_EXCEPTIONS
1121 }
1122 catch (...)
1123 {
1124 this->__set_badbit_and_consider_rethrow();
1125 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001126#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001127 return *this;
1128}
1129
1130template<class _CharT, class _Traits>
1131inline _LIBCPP_INLINE_VISIBILITY
1132basic_istream<_CharT, _Traits>&
1133basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n)
1134{
1135 return getline(__s, __n, this->widen('\n'));
1136}
1137
1138template<class _CharT, class _Traits>
1139basic_istream<_CharT, _Traits>&
1140basic_istream<_CharT, _Traits>::ignore(streamsize __n, int_type __dlm)
1141{
1142 __gc_ = 0;
1143#ifndef _LIBCPP_NO_EXCEPTIONS
1144 try
1145 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001146#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001147 sentry __sen(*this, true);
1148 if (__sen)
1149 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001150 ios_base::iostate __err = ios_base::goodbit;
1151 if (__n == numeric_limits<streamsize>::max())
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001152 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001153 while (true)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001154 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001155 typename traits_type::int_type __i = this->rdbuf()->sbumpc();
1156 if (traits_type::eq_int_type(__i, traits_type::eof()))
1157 {
1158 __err |= ios_base::eofbit;
1159 break;
1160 }
1161 ++__gc_;
Howard Hinnant11b87182013-07-01 00:37:50 +00001162 if (traits_type::eq_int_type(__i, __dlm))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001163 break;
1164 }
1165 }
1166 else
1167 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001168 while (__gc_ < __n)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001169 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001170 typename traits_type::int_type __i = this->rdbuf()->sbumpc();
1171 if (traits_type::eq_int_type(__i, traits_type::eof()))
1172 {
1173 __err |= ios_base::eofbit;
1174 break;
1175 }
1176 ++__gc_;
Howard Hinnant11b87182013-07-01 00:37:50 +00001177 if (traits_type::eq_int_type(__i, __dlm))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001178 break;
1179 }
1180 }
Howard Hinnant92a836c2011-09-01 21:02:45 +00001181 this->setstate(__err);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001182 }
1183#ifndef _LIBCPP_NO_EXCEPTIONS
1184 }
1185 catch (...)
1186 {
1187 this->__set_badbit_and_consider_rethrow();
1188 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001189#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001190 return *this;
1191}
1192
1193template<class _CharT, class _Traits>
1194typename basic_istream<_CharT, _Traits>::int_type
1195basic_istream<_CharT, _Traits>::peek()
1196{
1197 __gc_ = 0;
1198 int_type __r = traits_type::eof();
1199#ifndef _LIBCPP_NO_EXCEPTIONS
1200 try
1201 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001202#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001203 sentry __sen(*this, true);
1204 if (__sen)
Howard Hinnant73c85c72012-11-01 17:32:07 +00001205 {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001206 __r = this->rdbuf()->sgetc();
Howard Hinnant73c85c72012-11-01 17:32:07 +00001207 if (traits_type::eq_int_type(__r, traits_type::eof()))
1208 this->setstate(ios_base::eofbit);
1209 }
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001210#ifndef _LIBCPP_NO_EXCEPTIONS
1211 }
1212 catch (...)
1213 {
1214 this->__set_badbit_and_consider_rethrow();
1215 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001216#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001217 return __r;
1218}
1219
1220template<class _CharT, class _Traits>
1221basic_istream<_CharT, _Traits>&
1222basic_istream<_CharT, _Traits>::read(char_type* __s, streamsize __n)
1223{
1224 __gc_ = 0;
1225#ifndef _LIBCPP_NO_EXCEPTIONS
1226 try
1227 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001228#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001229 sentry __sen(*this, true);
1230 if (__sen)
1231 {
Howard Hinnantcc7bdae2013-03-06 19:27:56 +00001232 __gc_ = this->rdbuf()->sgetn(__s, __n);
1233 if (__gc_ != __n)
1234 this->setstate(ios_base::failbit | ios_base::eofbit);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001235 }
1236 else
1237 this->setstate(ios_base::failbit);
1238#ifndef _LIBCPP_NO_EXCEPTIONS
1239 }
1240 catch (...)
1241 {
1242 this->__set_badbit_and_consider_rethrow();
1243 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001244#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001245 return *this;
1246}
1247
1248template<class _CharT, class _Traits>
1249streamsize
1250basic_istream<_CharT, _Traits>::readsome(char_type* __s, streamsize __n)
1251{
Howard Hinnantee717d82012-12-20 15:40:28 +00001252 __gc_ = 0;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001253 streamsize __c = this->rdbuf()->in_avail();
1254 switch (__c)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001255 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001256 case -1:
1257 this->setstate(ios_base::eofbit);
1258 break;
1259 case 0:
1260 break;
1261 default:
1262 read(__s, _VSTD::min(__c, __n));
1263 break;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001264 }
Howard Hinnant92a836c2011-09-01 21:02:45 +00001265 return __gc_;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001266}
1267
1268template<class _CharT, class _Traits>
1269basic_istream<_CharT, _Traits>&
1270basic_istream<_CharT, _Traits>::putback(char_type __c)
1271{
1272 __gc_ = 0;
1273#ifndef _LIBCPP_NO_EXCEPTIONS
1274 try
1275 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001276#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnant37bdf0e2012-08-24 22:03:03 +00001277 this->clear(this->rdstate() & ~ios_base::eofbit);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001278 sentry __sen(*this, true);
1279 if (__sen)
1280 {
1281 if (this->rdbuf() == 0 || this->rdbuf()->sputbackc(__c) == traits_type::eof())
1282 this->setstate(ios_base::badbit);
1283 }
1284 else
1285 this->setstate(ios_base::failbit);
1286#ifndef _LIBCPP_NO_EXCEPTIONS
1287 }
1288 catch (...)
1289 {
1290 this->__set_badbit_and_consider_rethrow();
1291 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001292#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001293 return *this;
1294}
1295
1296template<class _CharT, class _Traits>
1297basic_istream<_CharT, _Traits>&
1298basic_istream<_CharT, _Traits>::unget()
1299{
1300 __gc_ = 0;
1301#ifndef _LIBCPP_NO_EXCEPTIONS
1302 try
1303 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001304#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnant37bdf0e2012-08-24 22:03:03 +00001305 this->clear(this->rdstate() & ~ios_base::eofbit);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001306 sentry __sen(*this, true);
1307 if (__sen)
1308 {
1309 if (this->rdbuf() == 0 || this->rdbuf()->sungetc() == traits_type::eof())
1310 this->setstate(ios_base::badbit);
1311 }
1312 else
1313 this->setstate(ios_base::failbit);
1314#ifndef _LIBCPP_NO_EXCEPTIONS
1315 }
1316 catch (...)
1317 {
1318 this->__set_badbit_and_consider_rethrow();
1319 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001320#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001321 return *this;
1322}
1323
1324template<class _CharT, class _Traits>
1325int
1326basic_istream<_CharT, _Traits>::sync()
1327{
1328 int __r = 0;
1329#ifndef _LIBCPP_NO_EXCEPTIONS
1330 try
1331 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001332#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001333 sentry __sen(*this, true);
1334 if (__sen)
1335 {
1336 if (this->rdbuf() == 0)
1337 return -1;
1338 if (this->rdbuf()->pubsync() == -1)
1339 {
1340 this->setstate(ios_base::badbit);
1341 return -1;
1342 }
1343 }
1344#ifndef _LIBCPP_NO_EXCEPTIONS
1345 }
1346 catch (...)
1347 {
1348 this->__set_badbit_and_consider_rethrow();
1349 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001350#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001351 return __r;
1352}
1353
1354template<class _CharT, class _Traits>
1355typename basic_istream<_CharT, _Traits>::pos_type
1356basic_istream<_CharT, _Traits>::tellg()
1357{
1358 pos_type __r(-1);
1359#ifndef _LIBCPP_NO_EXCEPTIONS
1360 try
1361 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001362#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001363 sentry __sen(*this, true);
1364 if (__sen)
1365 __r = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
1366#ifndef _LIBCPP_NO_EXCEPTIONS
1367 }
1368 catch (...)
1369 {
1370 this->__set_badbit_and_consider_rethrow();
1371 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001372#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001373 return __r;
1374}
1375
1376template<class _CharT, class _Traits>
1377basic_istream<_CharT, _Traits>&
1378basic_istream<_CharT, _Traits>::seekg(pos_type __pos)
1379{
1380#ifndef _LIBCPP_NO_EXCEPTIONS
1381 try
1382 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001383#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnant37bdf0e2012-08-24 22:03:03 +00001384 this->clear(this->rdstate() & ~ios_base::eofbit);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001385 sentry __sen(*this, true);
1386 if (__sen)
Marshall Clow76a86702013-10-31 22:20:45 +00001387 {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001388 if (this->rdbuf()->pubseekpos(__pos, ios_base::in) == pos_type(-1))
1389 this->setstate(ios_base::failbit);
Marshall Clow76a86702013-10-31 22:20:45 +00001390 }
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001391#ifndef _LIBCPP_NO_EXCEPTIONS
1392 }
1393 catch (...)
1394 {
1395 this->__set_badbit_and_consider_rethrow();
1396 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001397#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001398 return *this;
1399}
1400
1401template<class _CharT, class _Traits>
1402basic_istream<_CharT, _Traits>&
1403basic_istream<_CharT, _Traits>::seekg(off_type __off, ios_base::seekdir __dir)
1404{
1405#ifndef _LIBCPP_NO_EXCEPTIONS
1406 try
1407 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001408#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001409 sentry __sen(*this, true);
1410 if (__sen)
Marshall Clow76a86702013-10-31 22:20:45 +00001411 {
1412 if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::in) == pos_type(-1))
1413 this->setstate(ios_base::failbit);
1414 }
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001415#ifndef _LIBCPP_NO_EXCEPTIONS
1416 }
1417 catch (...)
1418 {
1419 this->__set_badbit_and_consider_rethrow();
1420 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001421#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001422 return *this;
1423}
1424
1425template <class _CharT, class _Traits>
1426basic_istream<_CharT, _Traits>&
1427ws(basic_istream<_CharT, _Traits>& __is)
1428{
1429#ifndef _LIBCPP_NO_EXCEPTIONS
1430 try
1431 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001432#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001433 typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1434 if (__sen)
1435 {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001436 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
Howard Hinnant92a836c2011-09-01 21:02:45 +00001437 while (true)
1438 {
1439 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1440 if (_Traits::eq_int_type(__i, _Traits::eof()))
1441 {
1442 __is.setstate(ios_base::eofbit);
1443 break;
1444 }
1445 if (!__ct.is(__ct.space, _Traits::to_char_type(__i)))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001446 break;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001447 __is.rdbuf()->sbumpc();
1448 }
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001449 }
1450#ifndef _LIBCPP_NO_EXCEPTIONS
1451 }
1452 catch (...)
1453 {
1454 __is.__set_badbit_and_consider_rethrow();
1455 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001456#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001457 return __is;
1458}
1459
Howard Hinnant73d21a42010-09-04 23:28:19 +00001460#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001461
1462template <class _CharT, class _Traits, class _Tp>
1463inline _LIBCPP_INLINE_VISIBILITY
1464basic_istream<_CharT, _Traits>&
1465operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
1466{
1467 __is >> __x;
1468 return __is;
1469}
1470
Howard Hinnant73d21a42010-09-04 23:28:19 +00001471#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001472
1473template <class _CharT, class _Traits>
Howard Hinnant0f678bd2013-08-12 18:38:34 +00001474class _LIBCPP_TYPE_VIS_ONLY basic_iostream
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001475 : public basic_istream<_CharT, _Traits>,
1476 public basic_ostream<_CharT, _Traits>
1477{
1478public:
1479 // types:
1480 typedef _CharT char_type;
1481 typedef _Traits traits_type;
1482 typedef typename traits_type::int_type int_type;
1483 typedef typename traits_type::pos_type pos_type;
1484 typedef typename traits_type::off_type off_type;
1485
1486 // constructor/destructor
1487 explicit basic_iostream(basic_streambuf<char_type, traits_type>* __sb);
1488 virtual ~basic_iostream();
1489protected:
Howard Hinnant73d21a42010-09-04 23:28:19 +00001490#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantac6de542011-07-07 21:03:52 +00001491 _LIBCPP_INLINE_VISIBILITY
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001492 basic_iostream(basic_iostream&& __rhs);
1493#endif
1494
1495 // assign/swap
Howard Hinnant73d21a42010-09-04 23:28:19 +00001496#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantac6de542011-07-07 21:03:52 +00001497 _LIBCPP_INLINE_VISIBILITY
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001498 basic_iostream& operator=(basic_iostream&& __rhs);
1499#endif
1500 void swap(basic_iostream& __rhs);
1501public:
1502};
1503
1504template <class _CharT, class _Traits>
1505inline _LIBCPP_INLINE_VISIBILITY
1506basic_iostream<_CharT, _Traits>::basic_iostream(basic_streambuf<char_type, traits_type>* __sb)
1507 : basic_istream<_CharT, _Traits>(__sb)
1508{
1509}
1510
Howard Hinnant73d21a42010-09-04 23:28:19 +00001511#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001512
1513template <class _CharT, class _Traits>
1514inline _LIBCPP_INLINE_VISIBILITY
1515basic_iostream<_CharT, _Traits>::basic_iostream(basic_iostream&& __rhs)
Howard Hinnant0949eed2011-06-30 21:18:19 +00001516 : basic_istream<_CharT, _Traits>(_VSTD::move(__rhs))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001517{
1518}
1519
1520template <class _CharT, class _Traits>
1521inline _LIBCPP_INLINE_VISIBILITY
1522basic_iostream<_CharT, _Traits>&
1523basic_iostream<_CharT, _Traits>::operator=(basic_iostream&& __rhs)
1524{
1525 swap(__rhs);
1526 return *this;
1527}
1528
Howard Hinnant73d21a42010-09-04 23:28:19 +00001529#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001530
1531template <class _CharT, class _Traits>
1532basic_iostream<_CharT, _Traits>::~basic_iostream()
1533{
1534}
1535
1536template <class _CharT, class _Traits>
1537inline _LIBCPP_INLINE_VISIBILITY
1538void
1539basic_iostream<_CharT, _Traits>::swap(basic_iostream& __rhs)
1540{
1541 basic_istream<char_type, traits_type>::swap(__rhs);
1542}
1543
1544template<class _CharT, class _Traits, class _Allocator>
1545basic_istream<_CharT, _Traits>&
1546operator>>(basic_istream<_CharT, _Traits>& __is,
1547 basic_string<_CharT, _Traits, _Allocator>& __str)
1548{
1549#ifndef _LIBCPP_NO_EXCEPTIONS
1550 try
1551 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001552#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001553 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1554 if (__sen)
1555 {
1556 __str.clear();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001557 streamsize __n = __is.width();
Howard Hinnant92a836c2011-09-01 21:02:45 +00001558 if (__n <= 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001559 __n = __str.max_size();
Howard Hinnant92a836c2011-09-01 21:02:45 +00001560 if (__n <= 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001561 __n = numeric_limits<streamsize>::max();
1562 streamsize __c = 0;
1563 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
Howard Hinnant92a836c2011-09-01 21:02:45 +00001564 ios_base::iostate __err = ios_base::goodbit;
1565 while (__c < __n)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001566 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001567 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1568 if (_Traits::eq_int_type(__i, _Traits::eof()))
1569 {
1570 __err |= ios_base::eofbit;
1571 break;
1572 }
1573 _CharT __ch = _Traits::to_char_type(__i);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001574 if (__ct.is(__ct.space, __ch))
1575 break;
1576 __str.push_back(__ch);
Howard Hinnant92a836c2011-09-01 21:02:45 +00001577 ++__c;
1578 __is.rdbuf()->sbumpc();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001579 }
1580 __is.width(0);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001581 if (__c == 0)
1582 __err |= ios_base::failbit;
1583 __is.setstate(__err);
1584 }
1585 else
1586 __is.setstate(ios_base::failbit);
1587#ifndef _LIBCPP_NO_EXCEPTIONS
1588 }
1589 catch (...)
1590 {
1591 __is.__set_badbit_and_consider_rethrow();
1592 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001593#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001594 return __is;
1595}
1596
1597template<class _CharT, class _Traits, class _Allocator>
Howard Hinnant324bb032010-08-22 00:02:43 +00001598basic_istream<_CharT, _Traits>&
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001599getline(basic_istream<_CharT, _Traits>& __is,
1600 basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1601{
1602#ifndef _LIBCPP_NO_EXCEPTIONS
1603 try
1604 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001605#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001606 typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1607 if (__sen)
1608 {
1609 __str.clear();
Howard Hinnant92a836c2011-09-01 21:02:45 +00001610 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnantb97de442011-10-09 15:20:46 +00001611 streamsize __extr = 0;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001612 while (true)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001613 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001614 typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
1615 if (_Traits::eq_int_type(__i, _Traits::eof()))
1616 {
1617 __err |= ios_base::eofbit;
1618 break;
1619 }
Howard Hinnantb97de442011-10-09 15:20:46 +00001620 ++__extr;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001621 _CharT __ch = _Traits::to_char_type(__i);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001622 if (_Traits::eq(__ch, __dlm))
1623 break;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001624 __str.push_back(__ch);
1625 if (__str.size() == __str.max_size())
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001626 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001627 __err |= ios_base::failbit;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001628 break;
1629 }
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001630 }
Howard Hinnantb97de442011-10-09 15:20:46 +00001631 if (__extr == 0)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001632 __err |= ios_base::failbit;
1633 __is.setstate(__err);
1634 }
1635#ifndef _LIBCPP_NO_EXCEPTIONS
1636 }
1637 catch (...)
1638 {
1639 __is.__set_badbit_and_consider_rethrow();
1640 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001641#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001642 return __is;
1643}
1644
1645template<class _CharT, class _Traits, class _Allocator>
Howard Hinnant68a8e902010-09-22 15:29:08 +00001646inline _LIBCPP_INLINE_VISIBILITY
Howard Hinnant324bb032010-08-22 00:02:43 +00001647basic_istream<_CharT, _Traits>&
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001648getline(basic_istream<_CharT, _Traits>& __is,
1649 basic_string<_CharT, _Traits, _Allocator>& __str)
1650{
1651 return getline(__is, __str, __is.widen('\n'));
1652}
1653
Howard Hinnant73d21a42010-09-04 23:28:19 +00001654#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001655
1656template<class _CharT, class _Traits, class _Allocator>
Howard Hinnant68a8e902010-09-22 15:29:08 +00001657inline _LIBCPP_INLINE_VISIBILITY
Howard Hinnant324bb032010-08-22 00:02:43 +00001658basic_istream<_CharT, _Traits>&
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001659getline(basic_istream<_CharT, _Traits>&& __is,
1660 basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1661{
1662 return getline(__is, __str, __dlm);
1663}
1664
1665template<class _CharT, class _Traits, class _Allocator>
Howard Hinnant68a8e902010-09-22 15:29:08 +00001666inline _LIBCPP_INLINE_VISIBILITY
Howard Hinnant324bb032010-08-22 00:02:43 +00001667basic_istream<_CharT, _Traits>&
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001668getline(basic_istream<_CharT, _Traits>&& __is,
1669 basic_string<_CharT, _Traits, _Allocator>& __str)
1670{
1671 return getline(__is, __str, __is.widen('\n'));
1672}
1673
Howard Hinnant73d21a42010-09-04 23:28:19 +00001674#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001675
1676template <class _CharT, class _Traits, size_t _Size>
1677basic_istream<_CharT, _Traits>&
1678operator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Size>& __x)
1679{
1680#ifndef _LIBCPP_NO_EXCEPTIONS
1681 try
1682 {
Howard Hinnant324bb032010-08-22 00:02:43 +00001683#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001684 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1685 if (__sen)
1686 {
1687 basic_string<_CharT, _Traits> __str;
1688 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001689 streamsize __c = 0;
Howard Hinnant92a836c2011-09-01 21:02:45 +00001690 ios_base::iostate __err = ios_base::goodbit;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001691 _CharT __zero = __ct.widen('0');
1692 _CharT __one = __ct.widen('1');
Howard Hinnant92a836c2011-09-01 21:02:45 +00001693 while (__c < _Size)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001694 {
Howard Hinnant92a836c2011-09-01 21:02:45 +00001695 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1696 if (_Traits::eq_int_type(__i, _Traits::eof()))
1697 {
1698 __err |= ios_base::eofbit;
1699 break;
1700 }
1701 _CharT __ch = _Traits::to_char_type(__i);
1702 if (!_Traits::eq(__ch, __zero) && !_Traits::eq(__ch, __one))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001703 break;
1704 __str.push_back(__ch);
Howard Hinnant92a836c2011-09-01 21:02:45 +00001705 ++__c;
1706 __is.rdbuf()->sbumpc();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001707 }
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001708 __x = bitset<_Size>(__str);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001709 if (__c == 0)
1710 __err |= ios_base::failbit;
1711 __is.setstate(__err);
1712 }
1713 else
1714 __is.setstate(ios_base::failbit);
1715#ifndef _LIBCPP_NO_EXCEPTIONS
1716 }
1717 catch (...)
1718 {
1719 __is.__set_badbit_and_consider_rethrow();
1720 }
Howard Hinnant324bb032010-08-22 00:02:43 +00001721#endif // _LIBCPP_NO_EXCEPTIONS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001722 return __is;
1723}
1724
Howard Hinnant0f678bd2013-08-12 18:38:34 +00001725_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_istream<char>)
1726_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_istream<wchar_t>)
1727_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_iostream<char>)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001728
1729_LIBCPP_END_NAMESPACE_STD
1730
1731#endif // _LIBCPP_ISTREAM