Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(646)

Side by Side Diff: third_party/libcxx/include/istream

Issue 75213003: Add libc++ and libc++abi to third-party. (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // -*- C++ -*-
2 //===--------------------------- istream ----------------------------------===//
3 //
4 // The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef _LIBCPP_ISTREAM
12 #define _LIBCPP_ISTREAM
13
14 /*
15 istream synopsis
16
17 template <class charT, class traits = char_traits<charT> >
18 class basic_istream
19 : virtual public basic_ios<charT,traits>
20 {
21 public:
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 del im);
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);
85 };
86
87 // 27.7.1.2.3 character extraction templates:
88 template<class charT, class traits>
89 basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT&);
90
91 template<class traits>
92 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned c har&);
93
94 template<class traits>
95 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed cha r&);
96
97 template<class charT, class traits>
98 basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT*);
99
100 template<class traits>
101 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned c har*);
102
103 template<class traits>
104 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed cha r*);
105
106 template <class charT, class traits>
107 void
108 swap(basic_istream<charT, traits>& x, basic_istream<charT, traits>& y);
109
110 typedef basic_istream<char> istream;
111 typedef basic_istream<wchar_t> wistream;
112
113 template <class charT, class traits = char_traits<charT> >
114 class basic_iostream :
115 public basic_istream<charT,traits>,
116 public basic_ostream<charT,traits>
117 {
118 public:
119 // types:
120 typedef charT char_type;
121 typedef traits traits_type;
122 typedef typename traits_type::int_type int_type;
123 typedef typename traits_type::pos_type pos_type;
124 typedef typename traits_type::off_type off_type;
125
126 // constructor/destructor
127 explicit basic_iostream(basic_streambuf<char_type, traits_type>* sb);
128 basic_iostream(basic_iostream&& rhs);
129 virtual ~basic_iostream();
130
131 // assign/swap
132 basic_iostream& operator=(basic_iostream&& rhs);
133 void swap(basic_iostream& rhs);
134 };
135
136 template <class charT, class traits>
137 void
138 swap(basic_iostream<charT, traits>& x, basic_iostream<charT, traits>& y);
139
140 typedef basic_iostream<char> iostream;
141 typedef basic_iostream<wchar_t> wiostream;
142
143 template <class charT, class traits>
144 basic_istream<charT,traits>&
145 ws(basic_istream<charT,traits>& is);
146
147 template <class charT, class traits, class T>
148 basic_istream<charT, traits>&
149 operator>>(basic_istream<charT, traits>&& is, T& x);
150
151 } // std
152
153 */
154
155 #include <__config>
156 #include <ostream>
157
158 #include <__undef_min_max>
159
160 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
161 #pragma GCC system_header
162 #endif
163
164 _LIBCPP_BEGIN_NAMESPACE_STD
165
166 template <class _CharT, class _Traits>
167 class _LIBCPP_TYPE_VIS_ONLY basic_istream
168 : virtual public basic_ios<_CharT, _Traits>
169 {
170 streamsize __gc_;
171 public:
172 // types (inherited from basic_ios (27.5.4)):
173 typedef _CharT char_type;
174 typedef _Traits traits_type;
175 typedef typename traits_type::int_type int_type;
176 typedef typename traits_type::pos_type pos_type;
177 typedef typename traits_type::off_type off_type;
178
179 // 27.7.1.1.1 Constructor/destructor:
180 explicit basic_istream(basic_streambuf<char_type, traits_type>* __sb);
181 virtual ~basic_istream();
182 protected:
183 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
184 _LIBCPP_INLINE_VISIBILITY
185 basic_istream(basic_istream&& __rhs);
186 #endif
187
188 // 27.7.1.1.2 Assign/swap:
189 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
190 _LIBCPP_INLINE_VISIBILITY
191 basic_istream& operator=(basic_istream&& __rhs);
192 #endif
193 void swap(basic_istream& __rhs);
194 public:
195
196 // 27.7.1.1.3 Prefix/suffix:
197 class _LIBCPP_TYPE_VIS_ONLY sentry;
198
199 // 27.7.1.2 Formatted input:
200 basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&));
201 basic_istream& operator>>(basic_ios<char_type, traits_type>&
202 (*__pf)(basic_ios<char_type, traits_type>&));
203 basic_istream& operator>>(ios_base& (*__pf)(ios_base&));
204 basic_istream& operator>>(basic_streambuf<char_type, traits_type>* __sb);
205 basic_istream& operator>>(bool& __n);
206 basic_istream& operator>>(short& __n);
207 basic_istream& operator>>(unsigned short& __n);
208 basic_istream& operator>>(int& __n);
209 basic_istream& operator>>(unsigned int& __n);
210 basic_istream& operator>>(long& __n);
211 basic_istream& operator>>(unsigned long& __n);
212 basic_istream& operator>>(long long& __n);
213 basic_istream& operator>>(unsigned long long& __n);
214 basic_istream& operator>>(float& __f);
215 basic_istream& operator>>(double& __f);
216 basic_istream& operator>>(long double& __f);
217 basic_istream& operator>>(void*& __p);
218
219 // 27.7.1.3 Unformatted input:
220 _LIBCPP_INLINE_VISIBILITY
221 streamsize gcount() const {return __gc_;}
222 int_type get();
223 basic_istream& get(char_type& __c);
224 basic_istream& get(char_type* __s, streamsize __n);
225 basic_istream& get(char_type* __s, streamsize __n, char_type __dlm);
226 basic_istream& get(basic_streambuf<char_type, traits_type>& __sb);
227 basic_istream& get(basic_streambuf<char_type, traits_type>& __sb, char_type __dlm);
228
229 basic_istream& getline(char_type* __s, streamsize __n);
230 basic_istream& getline(char_type* __s, streamsize __n, char_type __dlm);
231
232 basic_istream& ignore(streamsize __n = 1, int_type __dlm = traits_type::eof( ));
233 int_type peek();
234 basic_istream& read (char_type* __s, streamsize __n);
235 streamsize readsome(char_type* __s, streamsize __n);
236
237 basic_istream& putback(char_type __c);
238 basic_istream& unget();
239 int sync();
240
241 pos_type tellg();
242 basic_istream& seekg(pos_type __pos);
243 basic_istream& seekg(off_type __off, ios_base::seekdir __dir);
244 };
245
246 template <class _CharT, class _Traits>
247 class _LIBCPP_TYPE_VIS_ONLY basic_istream<_CharT, _Traits>::sentry
248 {
249 bool __ok_;
250
251 sentry(const sentry&); // = delete;
252 sentry& operator=(const sentry&); // = delete;
253
254 public:
255 explicit sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = fals e);
256 // ~sentry() = default;
257
258 _LIBCPP_INLINE_VISIBILITY
259 _LIBCPP_EXPLICIT
260 operator bool() const {return __ok_;}
261 };
262
263 template <class _CharT, class _Traits>
264 basic_istream<_CharT, _Traits>::sentry::sentry(basic_istream<_CharT, _Traits>& _ _is,
265 bool __noskipws)
266 : __ok_(false)
267 {
268 if (__is.good())
269 {
270 if (__is.tie())
271 __is.tie()->flush();
272 if (!__noskipws && (__is.flags() & ios_base::skipws))
273 {
274 typedef istreambuf_iterator<_CharT, _Traits> _Ip;
275 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()) ;
276 _Ip __i(__is);
277 _Ip __eof;
278 for (; __i != __eof; ++__i)
279 if (!__ct.is(__ct.space, *__i))
280 break;
281 if (__i == __eof)
282 __is.setstate(ios_base::failbit | ios_base::eofbit);
283 }
284 __ok_ = __is.good();
285 }
286 else
287 __is.setstate(ios_base::failbit);
288 }
289
290 template <class _CharT, class _Traits>
291 inline _LIBCPP_INLINE_VISIBILITY
292 basic_istream<_CharT, _Traits>::basic_istream(basic_streambuf<char_type, traits_ type>* __sb)
293 : __gc_(0)
294 {
295 this->init(__sb);
296 }
297
298 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
299
300 template <class _CharT, class _Traits>
301 inline _LIBCPP_INLINE_VISIBILITY
302 basic_istream<_CharT, _Traits>::basic_istream(basic_istream&& __rhs)
303 : __gc_(__rhs.__gc_)
304 {
305 __rhs.__gc_ = 0;
306 this->move(__rhs);
307 }
308
309 template <class _CharT, class _Traits>
310 inline _LIBCPP_INLINE_VISIBILITY
311 basic_istream<_CharT, _Traits>&
312 basic_istream<_CharT, _Traits>::operator=(basic_istream&& __rhs)
313 {
314 swap(__rhs);
315 return *this;
316 }
317
318 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
319
320 template <class _CharT, class _Traits>
321 basic_istream<_CharT, _Traits>::~basic_istream()
322 {
323 }
324
325 template <class _CharT, class _Traits>
326 inline _LIBCPP_INLINE_VISIBILITY
327 void
328 basic_istream<_CharT, _Traits>::swap(basic_istream& __rhs)
329 {
330 _VSTD::swap(__gc_, __rhs.__gc_);
331 basic_ios<char_type, traits_type>::swap(__rhs);
332 }
333
334 template <class _CharT, class _Traits>
335 basic_istream<_CharT, _Traits>&
336 basic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)
337 {
338 #ifndef _LIBCPP_NO_EXCEPTIONS
339 try
340 {
341 #endif // _LIBCPP_NO_EXCEPTIONS
342 sentry __s(*this);
343 if (__s)
344 {
345 typedef istreambuf_iterator<char_type, traits_type> _Ip;
346 typedef num_get<char_type, _Ip> _Fp;
347 ios_base::iostate __err = ios_base::goodbit;
348 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
349 this->setstate(__err);
350 }
351 #ifndef _LIBCPP_NO_EXCEPTIONS
352 }
353 catch (...)
354 {
355 this->__set_badbit_and_consider_rethrow();
356 }
357 #endif // _LIBCPP_NO_EXCEPTIONS
358 return *this;
359 }
360
361 template <class _CharT, class _Traits>
362 basic_istream<_CharT, _Traits>&
363 basic_istream<_CharT, _Traits>::operator>>(unsigned int& __n)
364 {
365 #ifndef _LIBCPP_NO_EXCEPTIONS
366 try
367 {
368 #endif // _LIBCPP_NO_EXCEPTIONS
369 sentry __s(*this);
370 if (__s)
371 {
372 typedef istreambuf_iterator<char_type, traits_type> _Ip;
373 typedef num_get<char_type, _Ip> _Fp;
374 ios_base::iostate __err = ios_base::goodbit;
375 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
376 this->setstate(__err);
377 }
378 #ifndef _LIBCPP_NO_EXCEPTIONS
379 }
380 catch (...)
381 {
382 this->__set_badbit_and_consider_rethrow();
383 }
384 #endif // _LIBCPP_NO_EXCEPTIONS
385 return *this;
386 }
387
388 template <class _CharT, class _Traits>
389 basic_istream<_CharT, _Traits>&
390 basic_istream<_CharT, _Traits>::operator>>(long& __n)
391 {
392 #ifndef _LIBCPP_NO_EXCEPTIONS
393 try
394 {
395 #endif // _LIBCPP_NO_EXCEPTIONS
396 sentry __s(*this);
397 if (__s)
398 {
399 typedef istreambuf_iterator<char_type, traits_type> _Ip;
400 typedef num_get<char_type, _Ip> _Fp;
401 ios_base::iostate __err = ios_base::goodbit;
402 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
403 this->setstate(__err);
404 }
405 #ifndef _LIBCPP_NO_EXCEPTIONS
406 }
407 catch (...)
408 {
409 this->__set_badbit_and_consider_rethrow();
410 }
411 #endif // _LIBCPP_NO_EXCEPTIONS
412 return *this;
413 }
414
415 template <class _CharT, class _Traits>
416 basic_istream<_CharT, _Traits>&
417 basic_istream<_CharT, _Traits>::operator>>(unsigned long& __n)
418 {
419 #ifndef _LIBCPP_NO_EXCEPTIONS
420 try
421 {
422 #endif // _LIBCPP_NO_EXCEPTIONS
423 sentry __s(*this);
424 if (__s)
425 {
426 typedef istreambuf_iterator<char_type, traits_type> _Ip;
427 typedef num_get<char_type, _Ip> _Fp;
428 ios_base::iostate __err = ios_base::goodbit;
429 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
430 this->setstate(__err);
431 }
432 #ifndef _LIBCPP_NO_EXCEPTIONS
433 }
434 catch (...)
435 {
436 this->__set_badbit_and_consider_rethrow();
437 }
438 #endif // _LIBCPP_NO_EXCEPTIONS
439 return *this;
440 }
441
442 template <class _CharT, class _Traits>
443 basic_istream<_CharT, _Traits>&
444 basic_istream<_CharT, _Traits>::operator>>(long long& __n)
445 {
446 #ifndef _LIBCPP_NO_EXCEPTIONS
447 try
448 {
449 #endif // _LIBCPP_NO_EXCEPTIONS
450 sentry __s(*this);
451 if (__s)
452 {
453 typedef istreambuf_iterator<char_type, traits_type> _Ip;
454 typedef num_get<char_type, _Ip> _Fp;
455 ios_base::iostate __err = ios_base::goodbit;
456 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
457 this->setstate(__err);
458 }
459 #ifndef _LIBCPP_NO_EXCEPTIONS
460 }
461 catch (...)
462 {
463 this->__set_badbit_and_consider_rethrow();
464 }
465 #endif // _LIBCPP_NO_EXCEPTIONS
466 return *this;
467 }
468
469 template <class _CharT, class _Traits>
470 basic_istream<_CharT, _Traits>&
471 basic_istream<_CharT, _Traits>::operator>>(unsigned long long& __n)
472 {
473 #ifndef _LIBCPP_NO_EXCEPTIONS
474 try
475 {
476 #endif // _LIBCPP_NO_EXCEPTIONS
477 sentry __s(*this);
478 if (__s)
479 {
480 typedef istreambuf_iterator<char_type, traits_type> _Ip;
481 typedef num_get<char_type, _Ip> _Fp;
482 ios_base::iostate __err = ios_base::goodbit;
483 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
484 this->setstate(__err);
485 }
486 #ifndef _LIBCPP_NO_EXCEPTIONS
487 }
488 catch (...)
489 {
490 this->__set_badbit_and_consider_rethrow();
491 }
492 #endif // _LIBCPP_NO_EXCEPTIONS
493 return *this;
494 }
495
496 template <class _CharT, class _Traits>
497 basic_istream<_CharT, _Traits>&
498 basic_istream<_CharT, _Traits>::operator>>(float& __n)
499 {
500 #ifndef _LIBCPP_NO_EXCEPTIONS
501 try
502 {
503 #endif // _LIBCPP_NO_EXCEPTIONS
504 sentry __s(*this);
505 if (__s)
506 {
507 typedef istreambuf_iterator<char_type, traits_type> _Ip;
508 typedef num_get<char_type, _Ip> _Fp;
509 ios_base::iostate __err = ios_base::goodbit;
510 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
511 this->setstate(__err);
512 }
513 #ifndef _LIBCPP_NO_EXCEPTIONS
514 }
515 catch (...)
516 {
517 this->__set_badbit_and_consider_rethrow();
518 }
519 #endif // _LIBCPP_NO_EXCEPTIONS
520 return *this;
521 }
522
523 template <class _CharT, class _Traits>
524 basic_istream<_CharT, _Traits>&
525 basic_istream<_CharT, _Traits>::operator>>(double& __n)
526 {
527 #ifndef _LIBCPP_NO_EXCEPTIONS
528 try
529 {
530 #endif // _LIBCPP_NO_EXCEPTIONS
531 sentry __s(*this);
532 if (__s)
533 {
534 typedef istreambuf_iterator<char_type, traits_type> _Ip;
535 typedef num_get<char_type, _Ip> _Fp;
536 ios_base::iostate __err = ios_base::goodbit;
537 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
538 this->setstate(__err);
539 }
540 #ifndef _LIBCPP_NO_EXCEPTIONS
541 }
542 catch (...)
543 {
544 this->__set_badbit_and_consider_rethrow();
545 }
546 #endif // _LIBCPP_NO_EXCEPTIONS
547 return *this;
548 }
549
550 template <class _CharT, class _Traits>
551 basic_istream<_CharT, _Traits>&
552 basic_istream<_CharT, _Traits>::operator>>(long double& __n)
553 {
554 #ifndef _LIBCPP_NO_EXCEPTIONS
555 try
556 {
557 #endif // _LIBCPP_NO_EXCEPTIONS
558 sentry __s(*this);
559 if (__s)
560 {
561 typedef istreambuf_iterator<char_type, traits_type> _Ip;
562 typedef num_get<char_type, _Ip> _Fp;
563 ios_base::iostate __err = ios_base::goodbit;
564 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
565 this->setstate(__err);
566 }
567 #ifndef _LIBCPP_NO_EXCEPTIONS
568 }
569 catch (...)
570 {
571 this->__set_badbit_and_consider_rethrow();
572 }
573 #endif // _LIBCPP_NO_EXCEPTIONS
574 return *this;
575 }
576
577 template <class _CharT, class _Traits>
578 basic_istream<_CharT, _Traits>&
579 basic_istream<_CharT, _Traits>::operator>>(bool& __n)
580 {
581 #ifndef _LIBCPP_NO_EXCEPTIONS
582 try
583 {
584 #endif // _LIBCPP_NO_EXCEPTIONS
585 sentry __s(*this);
586 if (__s)
587 {
588 typedef istreambuf_iterator<char_type, traits_type> _Ip;
589 typedef num_get<char_type, _Ip> _Fp;
590 ios_base::iostate __err = ios_base::goodbit;
591 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
592 this->setstate(__err);
593 }
594 #ifndef _LIBCPP_NO_EXCEPTIONS
595 }
596 catch (...)
597 {
598 this->__set_badbit_and_consider_rethrow();
599 }
600 #endif // _LIBCPP_NO_EXCEPTIONS
601 return *this;
602 }
603
604 template <class _CharT, class _Traits>
605 basic_istream<_CharT, _Traits>&
606 basic_istream<_CharT, _Traits>::operator>>(void*& __n)
607 {
608 #ifndef _LIBCPP_NO_EXCEPTIONS
609 try
610 {
611 #endif // _LIBCPP_NO_EXCEPTIONS
612 sentry __s(*this);
613 if (__s)
614 {
615 typedef istreambuf_iterator<char_type, traits_type> _Ip;
616 typedef num_get<char_type, _Ip> _Fp;
617 ios_base::iostate __err = ios_base::goodbit;
618 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
619 this->setstate(__err);
620 }
621 #ifndef _LIBCPP_NO_EXCEPTIONS
622 }
623 catch (...)
624 {
625 this->__set_badbit_and_consider_rethrow();
626 }
627 #endif // _LIBCPP_NO_EXCEPTIONS
628 return *this;
629 }
630
631 template <class _CharT, class _Traits>
632 basic_istream<_CharT, _Traits>&
633 basic_istream<_CharT, _Traits>::operator>>(short& __n)
634 {
635 #ifndef _LIBCPP_NO_EXCEPTIONS
636 try
637 {
638 #endif // _LIBCPP_NO_EXCEPTIONS
639 sentry __s(*this);
640 if (__s)
641 {
642 typedef istreambuf_iterator<char_type, traits_type> _Ip;
643 typedef num_get<char_type, _Ip> _Fp;
644 ios_base::iostate __err = ios_base::goodbit;
645 long __temp;
646 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
647 if (__temp < numeric_limits<short>::min())
648 {
649 __err |= ios_base::failbit;
650 __n = numeric_limits<short>::min();
651 }
652 else if (__temp > numeric_limits<short>::max())
653 {
654 __err |= ios_base::failbit;
655 __n = numeric_limits<short>::max();
656 }
657 else
658 __n = static_cast<short>(__temp);
659 this->setstate(__err);
660 }
661 #ifndef _LIBCPP_NO_EXCEPTIONS
662 }
663 catch (...)
664 {
665 this->__set_badbit_and_consider_rethrow();
666 }
667 #endif // _LIBCPP_NO_EXCEPTIONS
668 return *this;
669 }
670
671 template <class _CharT, class _Traits>
672 basic_istream<_CharT, _Traits>&
673 basic_istream<_CharT, _Traits>::operator>>(int& __n)
674 {
675 #ifndef _LIBCPP_NO_EXCEPTIONS
676 try
677 {
678 #endif // _LIBCPP_NO_EXCEPTIONS
679 sentry __s(*this);
680 if (__s)
681 {
682 typedef istreambuf_iterator<char_type, traits_type> _Ip;
683 typedef num_get<char_type, _Ip> _Fp;
684 ios_base::iostate __err = ios_base::goodbit;
685 long __temp;
686 use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
687 if (__temp < numeric_limits<int>::min())
688 {
689 __err |= ios_base::failbit;
690 __n = numeric_limits<int>::min();
691 }
692 else if (__temp > numeric_limits<int>::max())
693 {
694 __err |= ios_base::failbit;
695 __n = numeric_limits<int>::max();
696 }
697 else
698 __n = static_cast<int>(__temp);
699 this->setstate(__err);
700 }
701 #ifndef _LIBCPP_NO_EXCEPTIONS
702 }
703 catch (...)
704 {
705 this->__set_badbit_and_consider_rethrow();
706 }
707 #endif // _LIBCPP_NO_EXCEPTIONS
708 return *this;
709 }
710
711 template <class _CharT, class _Traits>
712 inline _LIBCPP_INLINE_VISIBILITY
713 basic_istream<_CharT, _Traits>&
714 basic_istream<_CharT, _Traits>::operator>>(basic_istream& (*__pf)(basic_istream& ))
715 {
716 return __pf(*this);
717 }
718
719 template <class _CharT, class _Traits>
720 inline _LIBCPP_INLINE_VISIBILITY
721 basic_istream<_CharT, _Traits>&
722 basic_istream<_CharT, _Traits>::operator>>(basic_ios<char_type, traits_type>&
723 (*__pf)(basic_ios<char_type, traits_t ype>&))
724 {
725 __pf(*this);
726 return *this;
727 }
728
729 template <class _CharT, class _Traits>
730 inline _LIBCPP_INLINE_VISIBILITY
731 basic_istream<_CharT, _Traits>&
732 basic_istream<_CharT, _Traits>::operator>>(ios_base& (*__pf)(ios_base&))
733 {
734 __pf(*this);
735 return *this;
736 }
737
738 template<class _CharT, class _Traits>
739 basic_istream<_CharT, _Traits>&
740 operator>>(basic_istream<_CharT, _Traits>& __is, _CharT* __s)
741 {
742 #ifndef _LIBCPP_NO_EXCEPTIONS
743 try
744 {
745 #endif // _LIBCPP_NO_EXCEPTIONS
746 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
747 if (__sen)
748 {
749 streamsize __n = __is.width();
750 if (__n <= 0)
751 __n = numeric_limits<streamsize>::max() / sizeof(_CharT) - 1;
752 streamsize __c = 0;
753 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()) ;
754 ios_base::iostate __err = ios_base::goodbit;
755 while (__c < __n-1)
756 {
757 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
758 if (_Traits::eq_int_type(__i, _Traits::eof()))
759 {
760 __err |= ios_base::eofbit;
761 break;
762 }
763 _CharT __ch = _Traits::to_char_type(__i);
764 if (__ct.is(__ct.space, __ch))
765 break;
766 *__s++ = __ch;
767 ++__c;
768 __is.rdbuf()->sbumpc();
769 }
770 *__s = _CharT();
771 __is.width(0);
772 if (__c == 0)
773 __err |= ios_base::failbit;
774 __is.setstate(__err);
775 }
776 #ifndef _LIBCPP_NO_EXCEPTIONS
777 }
778 catch (...)
779 {
780 __is.__set_badbit_and_consider_rethrow();
781 }
782 #endif // _LIBCPP_NO_EXCEPTIONS
783 return __is;
784 }
785
786 template<class _Traits>
787 inline _LIBCPP_INLINE_VISIBILITY
788 basic_istream<char, _Traits>&
789 operator>>(basic_istream<char, _Traits>& __is, unsigned char* __s)
790 {
791 return __is >> (char*)__s;
792 }
793
794 template<class _Traits>
795 inline _LIBCPP_INLINE_VISIBILITY
796 basic_istream<char, _Traits>&
797 operator>>(basic_istream<char, _Traits>& __is, signed char* __s)
798 {
799 return __is >> (char*)__s;
800 }
801
802 template<class _CharT, class _Traits>
803 basic_istream<_CharT, _Traits>&
804 operator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c)
805 {
806 #ifndef _LIBCPP_NO_EXCEPTIONS
807 try
808 {
809 #endif // _LIBCPP_NO_EXCEPTIONS
810 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
811 if (__sen)
812 {
813 typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
814 if (_Traits::eq_int_type(__i, _Traits::eof()))
815 __is.setstate(ios_base::eofbit | ios_base::failbit);
816 else
817 __c = _Traits::to_char_type(__i);
818 }
819 #ifndef _LIBCPP_NO_EXCEPTIONS
820 }
821 catch (...)
822 {
823 __is.__set_badbit_and_consider_rethrow();
824 }
825 #endif // _LIBCPP_NO_EXCEPTIONS
826 return __is;
827 }
828
829 template<class _Traits>
830 inline _LIBCPP_INLINE_VISIBILITY
831 basic_istream<char, _Traits>&
832 operator>>(basic_istream<char, _Traits>& __is, unsigned char& __c)
833 {
834 return __is >> (char&)__c;
835 }
836
837 template<class _Traits>
838 inline _LIBCPP_INLINE_VISIBILITY
839 basic_istream<char, _Traits>&
840 operator>>(basic_istream<char, _Traits>& __is, signed char& __c)
841 {
842 return __is >> (char&)__c;
843 }
844
845 template<class _CharT, class _Traits>
846 basic_istream<_CharT, _Traits>&
847 basic_istream<_CharT, _Traits>::operator>>(basic_streambuf<char_type, traits_typ e>* __sb)
848 {
849 __gc_ = 0;
850 #ifndef _LIBCPP_NO_EXCEPTIONS
851 try
852 {
853 #endif // _LIBCPP_NO_EXCEPTIONS
854 sentry __s(*this, true);
855 if (__s)
856 {
857 if (__sb)
858 {
859 #ifndef _LIBCPP_NO_EXCEPTIONS
860 try
861 {
862 #endif // _LIBCPP_NO_EXCEPTIONS
863 ios_base::iostate __err = ios_base::goodbit;
864 while (true)
865 {
866 typename traits_type::int_type __i = this->rdbuf()->sget c();
867 if (traits_type::eq_int_type(__i, _Traits::eof()))
868 {
869 __err |= ios_base::eofbit;
870 break;
871 }
872 if (traits_type::eq_int_type(
873 __sb->sputc(traits_type::to_char_type(__i)),
874 traits_type::eof()))
875 break;
876 ++__gc_;
877 this->rdbuf()->sbumpc();
878 }
879 if (__gc_ == 0)
880 __err |= ios_base::failbit;
881 this->setstate(__err);
882 #ifndef _LIBCPP_NO_EXCEPTIONS
883 }
884 catch (...)
885 {
886 if (__gc_ == 0)
887 this->__set_failbit_and_consider_rethrow();
888 }
889 #endif // _LIBCPP_NO_EXCEPTIONS
890 }
891 else
892 this->setstate(ios_base::failbit);
893 }
894 #ifndef _LIBCPP_NO_EXCEPTIONS
895 }
896 catch (...)
897 {
898 this->__set_badbit_and_consider_rethrow();
899 }
900 #endif // _LIBCPP_NO_EXCEPTIONS
901 return *this;
902 }
903
904 template<class _CharT, class _Traits>
905 typename basic_istream<_CharT, _Traits>::int_type
906 basic_istream<_CharT, _Traits>::get()
907 {
908 __gc_ = 0;
909 int_type __r = traits_type::eof();
910 #ifndef _LIBCPP_NO_EXCEPTIONS
911 try
912 {
913 #endif // _LIBCPP_NO_EXCEPTIONS
914 sentry __s(*this, true);
915 if (__s)
916 {
917 __r = this->rdbuf()->sbumpc();
918 if (traits_type::eq_int_type(__r, traits_type::eof()))
919 this->setstate(ios_base::failbit | ios_base::eofbit);
920 else
921 __gc_ = 1;
922 }
923 #ifndef _LIBCPP_NO_EXCEPTIONS
924 }
925 catch (...)
926 {
927 this->__set_badbit_and_consider_rethrow();
928 }
929 #endif // _LIBCPP_NO_EXCEPTIONS
930 return __r;
931 }
932
933 template<class _CharT, class _Traits>
934 inline _LIBCPP_INLINE_VISIBILITY
935 basic_istream<_CharT, _Traits>&
936 basic_istream<_CharT, _Traits>::get(char_type& __c)
937 {
938 int_type __ch = get();
939 if (__ch != traits_type::eof())
940 __c = traits_type::to_char_type(__ch);
941 return *this;
942 }
943
944 template<class _CharT, class _Traits>
945 basic_istream<_CharT, _Traits>&
946 basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n, char_type __ dlm)
947 {
948 __gc_ = 0;
949 #ifndef _LIBCPP_NO_EXCEPTIONS
950 try
951 {
952 #endif // _LIBCPP_NO_EXCEPTIONS
953 sentry __sen(*this, true);
954 if (__sen)
955 {
956 if (__n > 0)
957 {
958 ios_base::iostate __err = ios_base::goodbit;
959 while (__gc_ < __n-1)
960 {
961 int_type __i = this->rdbuf()->sgetc();
962 if (traits_type::eq_int_type(__i, traits_type::eof()))
963 {
964 __err |= ios_base::eofbit;
965 break;
966 }
967 char_type __ch = traits_type::to_char_type(__i);
968 if (traits_type::eq(__ch, __dlm))
969 break;
970 *__s++ = __ch;
971 ++__gc_;
972 this->rdbuf()->sbumpc();
973 }
974 *__s = char_type();
975 if (__gc_ == 0)
976 __err |= ios_base::failbit;
977 this->setstate(__err);
978 }
979 else
980 this->setstate(ios_base::failbit);
981 }
982 #ifndef _LIBCPP_NO_EXCEPTIONS
983 }
984 catch (...)
985 {
986 this->__set_badbit_and_consider_rethrow();
987 }
988 #endif // _LIBCPP_NO_EXCEPTIONS
989 return *this;
990 }
991
992 template<class _CharT, class _Traits>
993 inline _LIBCPP_INLINE_VISIBILITY
994 basic_istream<_CharT, _Traits>&
995 basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n)
996 {
997 return get(__s, __n, this->widen('\n'));
998 }
999
1000 template<class _CharT, class _Traits>
1001 basic_istream<_CharT, _Traits>&
1002 basic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __s b,
1003 char_type __dlm)
1004 {
1005 __gc_ = 0;
1006 #ifndef _LIBCPP_NO_EXCEPTIONS
1007 try
1008 {
1009 #endif // _LIBCPP_NO_EXCEPTIONS
1010 sentry __sen(*this, true);
1011 if (__sen)
1012 {
1013 ios_base::iostate __err = ios_base::goodbit;
1014 #ifndef _LIBCPP_NO_EXCEPTIONS
1015 try
1016 {
1017 #endif // _LIBCPP_NO_EXCEPTIONS
1018 while (true)
1019 {
1020 typename traits_type::int_type __i = this->rdbuf()->sgetc();
1021 if (traits_type::eq_int_type(__i, traits_type::eof()))
1022 {
1023 __err |= ios_base::eofbit;
1024 break;
1025 }
1026 char_type __ch = traits_type::to_char_type(__i);
1027 if (traits_type::eq(__ch, __dlm))
1028 break;
1029 if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type:: eof()))
1030 break;
1031 ++__gc_;
1032 this->rdbuf()->sbumpc();
1033 }
1034 #ifndef _LIBCPP_NO_EXCEPTIONS
1035 }
1036 catch (...)
1037 {
1038 }
1039 #endif // _LIBCPP_NO_EXCEPTIONS
1040 if (__gc_ == 0)
1041 __err |= ios_base::failbit;
1042 this->setstate(__err);
1043 }
1044 #ifndef _LIBCPP_NO_EXCEPTIONS
1045 }
1046 catch (...)
1047 {
1048 this->__set_badbit_and_consider_rethrow();
1049 }
1050 #endif // _LIBCPP_NO_EXCEPTIONS
1051 return *this;
1052 }
1053
1054 template<class _CharT, class _Traits>
1055 inline _LIBCPP_INLINE_VISIBILITY
1056 basic_istream<_CharT, _Traits>&
1057 basic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __s b)
1058 {
1059 return get(__sb, this->widen('\n'));
1060 }
1061
1062 template<class _CharT, class _Traits>
1063 basic_istream<_CharT, _Traits>&
1064 basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_typ e __dlm)
1065 {
1066 __gc_ = 0;
1067 #ifndef _LIBCPP_NO_EXCEPTIONS
1068 try
1069 {
1070 #endif // _LIBCPP_NO_EXCEPTIONS
1071 sentry __sen(*this, true);
1072 if (__sen)
1073 {
1074 ios_base::iostate __err = ios_base::goodbit;
1075 while (true)
1076 {
1077 typename traits_type::int_type __i = this->rdbuf()->sgetc();
1078 if (traits_type::eq_int_type(__i, traits_type::eof()))
1079 {
1080 __err |= ios_base::eofbit;
1081 break;
1082 }
1083 char_type __ch = traits_type::to_char_type(__i);
1084 if (traits_type::eq(__ch, __dlm))
1085 {
1086 this->rdbuf()->sbumpc();
1087 ++__gc_;
1088 break;
1089 }
1090 if (__gc_ >= __n-1)
1091 {
1092 __err |= ios_base::failbit;
1093 break;
1094 }
1095 *__s++ = __ch;
1096 this->rdbuf()->sbumpc();
1097 ++__gc_;
1098 }
1099 if (__n > 0)
1100 *__s = char_type();
1101 if (__gc_ == 0)
1102 __err |= ios_base::failbit;
1103 this->setstate(__err);
1104 }
1105 #ifndef _LIBCPP_NO_EXCEPTIONS
1106 }
1107 catch (...)
1108 {
1109 this->__set_badbit_and_consider_rethrow();
1110 }
1111 #endif // _LIBCPP_NO_EXCEPTIONS
1112 return *this;
1113 }
1114
1115 template<class _CharT, class _Traits>
1116 inline _LIBCPP_INLINE_VISIBILITY
1117 basic_istream<_CharT, _Traits>&
1118 basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n)
1119 {
1120 return getline(__s, __n, this->widen('\n'));
1121 }
1122
1123 template<class _CharT, class _Traits>
1124 basic_istream<_CharT, _Traits>&
1125 basic_istream<_CharT, _Traits>::ignore(streamsize __n, int_type __dlm)
1126 {
1127 __gc_ = 0;
1128 #ifndef _LIBCPP_NO_EXCEPTIONS
1129 try
1130 {
1131 #endif // _LIBCPP_NO_EXCEPTIONS
1132 sentry __sen(*this, true);
1133 if (__sen)
1134 {
1135 ios_base::iostate __err = ios_base::goodbit;
1136 if (__n == numeric_limits<streamsize>::max())
1137 {
1138 while (true)
1139 {
1140 typename traits_type::int_type __i = this->rdbuf()->sbumpc() ;
1141 if (traits_type::eq_int_type(__i, traits_type::eof()))
1142 {
1143 __err |= ios_base::eofbit;
1144 break;
1145 }
1146 ++__gc_;
1147 if (traits_type::eq_int_type(__i, __dlm))
1148 break;
1149 }
1150 }
1151 else
1152 {
1153 while (__gc_ < __n)
1154 {
1155 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_;
1162 if (traits_type::eq_int_type(__i, __dlm))
1163 break;
1164 }
1165 }
1166 this->setstate(__err);
1167 }
1168 #ifndef _LIBCPP_NO_EXCEPTIONS
1169 }
1170 catch (...)
1171 {
1172 this->__set_badbit_and_consider_rethrow();
1173 }
1174 #endif // _LIBCPP_NO_EXCEPTIONS
1175 return *this;
1176 }
1177
1178 template<class _CharT, class _Traits>
1179 typename basic_istream<_CharT, _Traits>::int_type
1180 basic_istream<_CharT, _Traits>::peek()
1181 {
1182 __gc_ = 0;
1183 int_type __r = traits_type::eof();
1184 #ifndef _LIBCPP_NO_EXCEPTIONS
1185 try
1186 {
1187 #endif // _LIBCPP_NO_EXCEPTIONS
1188 sentry __sen(*this, true);
1189 if (__sen)
1190 {
1191 __r = this->rdbuf()->sgetc();
1192 if (traits_type::eq_int_type(__r, traits_type::eof()))
1193 this->setstate(ios_base::eofbit);
1194 }
1195 #ifndef _LIBCPP_NO_EXCEPTIONS
1196 }
1197 catch (...)
1198 {
1199 this->__set_badbit_and_consider_rethrow();
1200 }
1201 #endif // _LIBCPP_NO_EXCEPTIONS
1202 return __r;
1203 }
1204
1205 template<class _CharT, class _Traits>
1206 basic_istream<_CharT, _Traits>&
1207 basic_istream<_CharT, _Traits>::read(char_type* __s, streamsize __n)
1208 {
1209 __gc_ = 0;
1210 #ifndef _LIBCPP_NO_EXCEPTIONS
1211 try
1212 {
1213 #endif // _LIBCPP_NO_EXCEPTIONS
1214 sentry __sen(*this, true);
1215 if (__sen)
1216 {
1217 __gc_ = this->rdbuf()->sgetn(__s, __n);
1218 if (__gc_ != __n)
1219 this->setstate(ios_base::failbit | ios_base::eofbit);
1220 }
1221 else
1222 this->setstate(ios_base::failbit);
1223 #ifndef _LIBCPP_NO_EXCEPTIONS
1224 }
1225 catch (...)
1226 {
1227 this->__set_badbit_and_consider_rethrow();
1228 }
1229 #endif // _LIBCPP_NO_EXCEPTIONS
1230 return *this;
1231 }
1232
1233 template<class _CharT, class _Traits>
1234 streamsize
1235 basic_istream<_CharT, _Traits>::readsome(char_type* __s, streamsize __n)
1236 {
1237 __gc_ = 0;
1238 streamsize __c = this->rdbuf()->in_avail();
1239 switch (__c)
1240 {
1241 case -1:
1242 this->setstate(ios_base::eofbit);
1243 break;
1244 case 0:
1245 break;
1246 default:
1247 read(__s, _VSTD::min(__c, __n));
1248 break;
1249 }
1250 return __gc_;
1251 }
1252
1253 template<class _CharT, class _Traits>
1254 basic_istream<_CharT, _Traits>&
1255 basic_istream<_CharT, _Traits>::putback(char_type __c)
1256 {
1257 __gc_ = 0;
1258 #ifndef _LIBCPP_NO_EXCEPTIONS
1259 try
1260 {
1261 #endif // _LIBCPP_NO_EXCEPTIONS
1262 this->clear(this->rdstate() & ~ios_base::eofbit);
1263 sentry __sen(*this, true);
1264 if (__sen)
1265 {
1266 if (this->rdbuf() == 0 || this->rdbuf()->sputbackc(__c) == traits_ty pe::eof())
1267 this->setstate(ios_base::badbit);
1268 }
1269 else
1270 this->setstate(ios_base::failbit);
1271 #ifndef _LIBCPP_NO_EXCEPTIONS
1272 }
1273 catch (...)
1274 {
1275 this->__set_badbit_and_consider_rethrow();
1276 }
1277 #endif // _LIBCPP_NO_EXCEPTIONS
1278 return *this;
1279 }
1280
1281 template<class _CharT, class _Traits>
1282 basic_istream<_CharT, _Traits>&
1283 basic_istream<_CharT, _Traits>::unget()
1284 {
1285 __gc_ = 0;
1286 #ifndef _LIBCPP_NO_EXCEPTIONS
1287 try
1288 {
1289 #endif // _LIBCPP_NO_EXCEPTIONS
1290 this->clear(this->rdstate() & ~ios_base::eofbit);
1291 sentry __sen(*this, true);
1292 if (__sen)
1293 {
1294 if (this->rdbuf() == 0 || this->rdbuf()->sungetc() == traits_type::e of())
1295 this->setstate(ios_base::badbit);
1296 }
1297 else
1298 this->setstate(ios_base::failbit);
1299 #ifndef _LIBCPP_NO_EXCEPTIONS
1300 }
1301 catch (...)
1302 {
1303 this->__set_badbit_and_consider_rethrow();
1304 }
1305 #endif // _LIBCPP_NO_EXCEPTIONS
1306 return *this;
1307 }
1308
1309 template<class _CharT, class _Traits>
1310 int
1311 basic_istream<_CharT, _Traits>::sync()
1312 {
1313 int __r = 0;
1314 #ifndef _LIBCPP_NO_EXCEPTIONS
1315 try
1316 {
1317 #endif // _LIBCPP_NO_EXCEPTIONS
1318 sentry __sen(*this, true);
1319 if (__sen)
1320 {
1321 if (this->rdbuf() == 0)
1322 return -1;
1323 if (this->rdbuf()->pubsync() == -1)
1324 {
1325 this->setstate(ios_base::badbit);
1326 return -1;
1327 }
1328 }
1329 #ifndef _LIBCPP_NO_EXCEPTIONS
1330 }
1331 catch (...)
1332 {
1333 this->__set_badbit_and_consider_rethrow();
1334 }
1335 #endif // _LIBCPP_NO_EXCEPTIONS
1336 return __r;
1337 }
1338
1339 template<class _CharT, class _Traits>
1340 typename basic_istream<_CharT, _Traits>::pos_type
1341 basic_istream<_CharT, _Traits>::tellg()
1342 {
1343 pos_type __r(-1);
1344 #ifndef _LIBCPP_NO_EXCEPTIONS
1345 try
1346 {
1347 #endif // _LIBCPP_NO_EXCEPTIONS
1348 sentry __sen(*this, true);
1349 if (__sen)
1350 __r = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
1351 #ifndef _LIBCPP_NO_EXCEPTIONS
1352 }
1353 catch (...)
1354 {
1355 this->__set_badbit_and_consider_rethrow();
1356 }
1357 #endif // _LIBCPP_NO_EXCEPTIONS
1358 return __r;
1359 }
1360
1361 template<class _CharT, class _Traits>
1362 basic_istream<_CharT, _Traits>&
1363 basic_istream<_CharT, _Traits>::seekg(pos_type __pos)
1364 {
1365 #ifndef _LIBCPP_NO_EXCEPTIONS
1366 try
1367 {
1368 #endif // _LIBCPP_NO_EXCEPTIONS
1369 this->clear(this->rdstate() & ~ios_base::eofbit);
1370 sentry __sen(*this, true);
1371 if (__sen)
1372 {
1373 if (this->rdbuf()->pubseekpos(__pos, ios_base::in) == pos_type(-1))
1374 this->setstate(ios_base::failbit);
1375 }
1376 #ifndef _LIBCPP_NO_EXCEPTIONS
1377 }
1378 catch (...)
1379 {
1380 this->__set_badbit_and_consider_rethrow();
1381 }
1382 #endif // _LIBCPP_NO_EXCEPTIONS
1383 return *this;
1384 }
1385
1386 template<class _CharT, class _Traits>
1387 basic_istream<_CharT, _Traits>&
1388 basic_istream<_CharT, _Traits>::seekg(off_type __off, ios_base::seekdir __dir)
1389 {
1390 #ifndef _LIBCPP_NO_EXCEPTIONS
1391 try
1392 {
1393 #endif // _LIBCPP_NO_EXCEPTIONS
1394 sentry __sen(*this, true);
1395 if (__sen)
1396 {
1397 if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::in) == pos_typ e(-1))
1398 this->setstate(ios_base::failbit);
1399 }
1400 #ifndef _LIBCPP_NO_EXCEPTIONS
1401 }
1402 catch (...)
1403 {
1404 this->__set_badbit_and_consider_rethrow();
1405 }
1406 #endif // _LIBCPP_NO_EXCEPTIONS
1407 return *this;
1408 }
1409
1410 template <class _CharT, class _Traits>
1411 basic_istream<_CharT, _Traits>&
1412 ws(basic_istream<_CharT, _Traits>& __is)
1413 {
1414 #ifndef _LIBCPP_NO_EXCEPTIONS
1415 try
1416 {
1417 #endif // _LIBCPP_NO_EXCEPTIONS
1418 typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1419 if (__sen)
1420 {
1421 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()) ;
1422 while (true)
1423 {
1424 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1425 if (_Traits::eq_int_type(__i, _Traits::eof()))
1426 {
1427 __is.setstate(ios_base::eofbit);
1428 break;
1429 }
1430 if (!__ct.is(__ct.space, _Traits::to_char_type(__i)))
1431 break;
1432 __is.rdbuf()->sbumpc();
1433 }
1434 }
1435 #ifndef _LIBCPP_NO_EXCEPTIONS
1436 }
1437 catch (...)
1438 {
1439 __is.__set_badbit_and_consider_rethrow();
1440 }
1441 #endif // _LIBCPP_NO_EXCEPTIONS
1442 return __is;
1443 }
1444
1445 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1446
1447 template <class _CharT, class _Traits, class _Tp>
1448 inline _LIBCPP_INLINE_VISIBILITY
1449 basic_istream<_CharT, _Traits>&
1450 operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
1451 {
1452 __is >> __x;
1453 return __is;
1454 }
1455
1456 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1457
1458 template <class _CharT, class _Traits>
1459 class _LIBCPP_TYPE_VIS_ONLY basic_iostream
1460 : public basic_istream<_CharT, _Traits>,
1461 public basic_ostream<_CharT, _Traits>
1462 {
1463 public:
1464 // types:
1465 typedef _CharT char_type;
1466 typedef _Traits traits_type;
1467 typedef typename traits_type::int_type int_type;
1468 typedef typename traits_type::pos_type pos_type;
1469 typedef typename traits_type::off_type off_type;
1470
1471 // constructor/destructor
1472 explicit basic_iostream(basic_streambuf<char_type, traits_type>* __sb);
1473 virtual ~basic_iostream();
1474 protected:
1475 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1476 _LIBCPP_INLINE_VISIBILITY
1477 basic_iostream(basic_iostream&& __rhs);
1478 #endif
1479
1480 // assign/swap
1481 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1482 _LIBCPP_INLINE_VISIBILITY
1483 basic_iostream& operator=(basic_iostream&& __rhs);
1484 #endif
1485 void swap(basic_iostream& __rhs);
1486 public:
1487 };
1488
1489 template <class _CharT, class _Traits>
1490 inline _LIBCPP_INLINE_VISIBILITY
1491 basic_iostream<_CharT, _Traits>::basic_iostream(basic_streambuf<char_type, trait s_type>* __sb)
1492 : basic_istream<_CharT, _Traits>(__sb)
1493 {
1494 }
1495
1496 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1497
1498 template <class _CharT, class _Traits>
1499 inline _LIBCPP_INLINE_VISIBILITY
1500 basic_iostream<_CharT, _Traits>::basic_iostream(basic_iostream&& __rhs)
1501 : basic_istream<_CharT, _Traits>(_VSTD::move(__rhs))
1502 {
1503 }
1504
1505 template <class _CharT, class _Traits>
1506 inline _LIBCPP_INLINE_VISIBILITY
1507 basic_iostream<_CharT, _Traits>&
1508 basic_iostream<_CharT, _Traits>::operator=(basic_iostream&& __rhs)
1509 {
1510 swap(__rhs);
1511 return *this;
1512 }
1513
1514 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1515
1516 template <class _CharT, class _Traits>
1517 basic_iostream<_CharT, _Traits>::~basic_iostream()
1518 {
1519 }
1520
1521 template <class _CharT, class _Traits>
1522 inline _LIBCPP_INLINE_VISIBILITY
1523 void
1524 basic_iostream<_CharT, _Traits>::swap(basic_iostream& __rhs)
1525 {
1526 basic_istream<char_type, traits_type>::swap(__rhs);
1527 }
1528
1529 template<class _CharT, class _Traits, class _Allocator>
1530 basic_istream<_CharT, _Traits>&
1531 operator>>(basic_istream<_CharT, _Traits>& __is,
1532 basic_string<_CharT, _Traits, _Allocator>& __str)
1533 {
1534 #ifndef _LIBCPP_NO_EXCEPTIONS
1535 try
1536 {
1537 #endif // _LIBCPP_NO_EXCEPTIONS
1538 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1539 if (__sen)
1540 {
1541 __str.clear();
1542 streamsize __n = __is.width();
1543 if (__n <= 0)
1544 __n = __str.max_size();
1545 if (__n <= 0)
1546 __n = numeric_limits<streamsize>::max();
1547 streamsize __c = 0;
1548 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()) ;
1549 ios_base::iostate __err = ios_base::goodbit;
1550 while (__c < __n)
1551 {
1552 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1553 if (_Traits::eq_int_type(__i, _Traits::eof()))
1554 {
1555 __err |= ios_base::eofbit;
1556 break;
1557 }
1558 _CharT __ch = _Traits::to_char_type(__i);
1559 if (__ct.is(__ct.space, __ch))
1560 break;
1561 __str.push_back(__ch);
1562 ++__c;
1563 __is.rdbuf()->sbumpc();
1564 }
1565 __is.width(0);
1566 if (__c == 0)
1567 __err |= ios_base::failbit;
1568 __is.setstate(__err);
1569 }
1570 else
1571 __is.setstate(ios_base::failbit);
1572 #ifndef _LIBCPP_NO_EXCEPTIONS
1573 }
1574 catch (...)
1575 {
1576 __is.__set_badbit_and_consider_rethrow();
1577 }
1578 #endif // _LIBCPP_NO_EXCEPTIONS
1579 return __is;
1580 }
1581
1582 template<class _CharT, class _Traits, class _Allocator>
1583 basic_istream<_CharT, _Traits>&
1584 getline(basic_istream<_CharT, _Traits>& __is,
1585 basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1586 {
1587 #ifndef _LIBCPP_NO_EXCEPTIONS
1588 try
1589 {
1590 #endif // _LIBCPP_NO_EXCEPTIONS
1591 typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1592 if (__sen)
1593 {
1594 __str.clear();
1595 ios_base::iostate __err = ios_base::goodbit;
1596 streamsize __extr = 0;
1597 while (true)
1598 {
1599 typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
1600 if (_Traits::eq_int_type(__i, _Traits::eof()))
1601 {
1602 __err |= ios_base::eofbit;
1603 break;
1604 }
1605 ++__extr;
1606 _CharT __ch = _Traits::to_char_type(__i);
1607 if (_Traits::eq(__ch, __dlm))
1608 break;
1609 __str.push_back(__ch);
1610 if (__str.size() == __str.max_size())
1611 {
1612 __err |= ios_base::failbit;
1613 break;
1614 }
1615 }
1616 if (__extr == 0)
1617 __err |= ios_base::failbit;
1618 __is.setstate(__err);
1619 }
1620 #ifndef _LIBCPP_NO_EXCEPTIONS
1621 }
1622 catch (...)
1623 {
1624 __is.__set_badbit_and_consider_rethrow();
1625 }
1626 #endif // _LIBCPP_NO_EXCEPTIONS
1627 return __is;
1628 }
1629
1630 template<class _CharT, class _Traits, class _Allocator>
1631 inline _LIBCPP_INLINE_VISIBILITY
1632 basic_istream<_CharT, _Traits>&
1633 getline(basic_istream<_CharT, _Traits>& __is,
1634 basic_string<_CharT, _Traits, _Allocator>& __str)
1635 {
1636 return getline(__is, __str, __is.widen('\n'));
1637 }
1638
1639 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1640
1641 template<class _CharT, class _Traits, class _Allocator>
1642 inline _LIBCPP_INLINE_VISIBILITY
1643 basic_istream<_CharT, _Traits>&
1644 getline(basic_istream<_CharT, _Traits>&& __is,
1645 basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1646 {
1647 return getline(__is, __str, __dlm);
1648 }
1649
1650 template<class _CharT, class _Traits, class _Allocator>
1651 inline _LIBCPP_INLINE_VISIBILITY
1652 basic_istream<_CharT, _Traits>&
1653 getline(basic_istream<_CharT, _Traits>&& __is,
1654 basic_string<_CharT, _Traits, _Allocator>& __str)
1655 {
1656 return getline(__is, __str, __is.widen('\n'));
1657 }
1658
1659 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1660
1661 template <class _CharT, class _Traits, size_t _Size>
1662 basic_istream<_CharT, _Traits>&
1663 operator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Size>& __x)
1664 {
1665 #ifndef _LIBCPP_NO_EXCEPTIONS
1666 try
1667 {
1668 #endif // _LIBCPP_NO_EXCEPTIONS
1669 typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1670 if (__sen)
1671 {
1672 basic_string<_CharT, _Traits> __str;
1673 const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()) ;
1674 streamsize __c = 0;
1675 ios_base::iostate __err = ios_base::goodbit;
1676 _CharT __zero = __ct.widen('0');
1677 _CharT __one = __ct.widen('1');
1678 while (__c < _Size)
1679 {
1680 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1681 if (_Traits::eq_int_type(__i, _Traits::eof()))
1682 {
1683 __err |= ios_base::eofbit;
1684 break;
1685 }
1686 _CharT __ch = _Traits::to_char_type(__i);
1687 if (!_Traits::eq(__ch, __zero) && !_Traits::eq(__ch, __one))
1688 break;
1689 __str.push_back(__ch);
1690 ++__c;
1691 __is.rdbuf()->sbumpc();
1692 }
1693 __x = bitset<_Size>(__str);
1694 if (__c == 0)
1695 __err |= ios_base::failbit;
1696 __is.setstate(__err);
1697 }
1698 else
1699 __is.setstate(ios_base::failbit);
1700 #ifndef _LIBCPP_NO_EXCEPTIONS
1701 }
1702 catch (...)
1703 {
1704 __is.__set_badbit_and_consider_rethrow();
1705 }
1706 #endif // _LIBCPP_NO_EXCEPTIONS
1707 return __is;
1708 }
1709
1710 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_istream<char>)
1711 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_istream<wchar_t>)
1712 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_iostream<char>)
1713
1714 _LIBCPP_END_NAMESPACE_STD
1715
1716 #endif // _LIBCPP_ISTREAM
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698