istream revision 227825
1227825Stheraven// -*- C++ -*-
2227825Stheraven//===--------------------------- istream ----------------------------------===//
3227825Stheraven//
4227825Stheraven//                     The LLVM Compiler Infrastructure
5227825Stheraven//
6227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open
7227825Stheraven// Source Licenses. See LICENSE.TXT for details.
8227825Stheraven//
9227825Stheraven//===----------------------------------------------------------------------===//
10227825Stheraven
11227825Stheraven#ifndef _LIBCPP_ISTREAM
12227825Stheraven#define _LIBCPP_ISTREAM
13227825Stheraven
14227825Stheraven/*
15227825Stheraven    istream synopsis
16227825Stheraven
17227825Stheraventemplate <class charT, class traits = char_traits<charT> >
18227825Stheravenclass basic_istream
19227825Stheraven    : virtual public basic_ios<charT,traits>
20227825Stheraven{
21227825Stheravenpublic:
22227825Stheraven    // types (inherited from basic_ios (27.5.4)):
23227825Stheraven    typedef charT                          char_type;
24227825Stheraven    typedef traits                         traits_type;
25227825Stheraven    typedef typename traits_type::int_type int_type;
26227825Stheraven    typedef typename traits_type::pos_type pos_type;
27227825Stheraven    typedef typename traits_type::off_type off_type;
28227825Stheraven
29227825Stheraven    // 27.7.1.1.1 Constructor/destructor:
30227825Stheraven    explicit basic_istream(basic_streambuf<char_type, traits_type>* sb);
31227825Stheraven    basic_istream(basic_istream&& rhs);
32227825Stheraven    virtual ~basic_istream();
33227825Stheraven
34227825Stheraven    // 27.7.1.1.2 Assign/swap:
35227825Stheraven    basic_istream& operator=(basic_istream&& rhs);
36227825Stheraven    void swap(basic_istream& rhs);
37227825Stheraven
38227825Stheraven    // 27.7.1.1.3 Prefix/suffix:
39227825Stheraven    class sentry;
40227825Stheraven
41227825Stheraven    // 27.7.1.2 Formatted input:
42227825Stheraven    basic_istream& operator>>(basic_istream& (*pf)(basic_istream&));
43227825Stheraven    basic_istream& operator>>(basic_ios<char_type, traits_type>&
44227825Stheraven                              (*pf)(basic_ios<char_type, traits_type>&));
45227825Stheraven    basic_istream& operator>>(ios_base& (*pf)(ios_base&));
46227825Stheraven    basic_istream& operator>>(basic_streambuf<char_type, traits_type>* sb);
47227825Stheraven    basic_istream& operator>>(bool& n);
48227825Stheraven    basic_istream& operator>>(short& n);
49227825Stheraven    basic_istream& operator>>(unsigned short& n);
50227825Stheraven    basic_istream& operator>>(int& n);
51227825Stheraven    basic_istream& operator>>(unsigned int& n);
52227825Stheraven    basic_istream& operator>>(long& n);
53227825Stheraven    basic_istream& operator>>(unsigned long& n);
54227825Stheraven    basic_istream& operator>>(long long& n);
55227825Stheraven    basic_istream& operator>>(unsigned long long& n);
56227825Stheraven    basic_istream& operator>>(float& f);
57227825Stheraven    basic_istream& operator>>(double& f);
58227825Stheraven    basic_istream& operator>>(long double& f);
59227825Stheraven    basic_istream& operator>>(void*& p);
60227825Stheraven
61227825Stheraven    // 27.7.1.3 Unformatted input:
62227825Stheraven    streamsize gcount() const;
63227825Stheraven    int_type get();
64227825Stheraven    basic_istream& get(char_type& c);
65227825Stheraven    basic_istream& get(char_type* s, streamsize n);
66227825Stheraven    basic_istream& get(char_type* s, streamsize n, char_type delim);
67227825Stheraven    basic_istream& get(basic_streambuf<char_type,traits_type>& sb);
68227825Stheraven    basic_istream& get(basic_streambuf<char_type,traits_type>& sb, char_type delim);
69227825Stheraven
70227825Stheraven    basic_istream& getline(char_type* s, streamsize n);
71227825Stheraven    basic_istream& getline(char_type* s, streamsize n, char_type delim);
72227825Stheraven
73227825Stheraven    basic_istream& ignore(streamsize n = 1, int_type delim = traits_type::eof());
74227825Stheraven    int_type peek();
75227825Stheraven    basic_istream& read (char_type* s, streamsize n);
76227825Stheraven    streamsize readsome(char_type* s, streamsize n);
77227825Stheraven
78227825Stheraven    basic_istream& putback(char_type c);
79227825Stheraven    basic_istream& unget();
80227825Stheraven    int sync();
81227825Stheraven
82227825Stheraven    pos_type tellg();
83227825Stheraven    basic_istream& seekg(pos_type);
84227825Stheraven    basic_istream& seekg(off_type, ios_base::seekdir);
85227825Stheraven};
86227825Stheraven
87227825Stheraven// 27.7.1.2.3 character extraction templates:
88227825Stheraventemplate<class charT, class traits>
89227825Stheraven  basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT&);
90227825Stheraven
91227825Stheraventemplate<class traits>
92227825Stheraven  basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char&);
93227825Stheraven
94227825Stheraventemplate<class traits>
95227825Stheraven  basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char&);
96227825Stheraven
97227825Stheraventemplate<class charT, class traits>
98227825Stheraven  basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT*);
99227825Stheraven
100227825Stheraventemplate<class traits>
101227825Stheraven  basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char*);
102227825Stheraven
103227825Stheraventemplate<class traits>
104227825Stheraven  basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char*);
105227825Stheraven
106227825Stheraventemplate <class charT, class traits>
107227825Stheraven  void
108227825Stheraven  swap(basic_istream<charT, traits>& x, basic_istream<charT, traits>& y);
109227825Stheraven
110227825Stheraventypedef basic_istream<char> istream;
111227825Stheraventypedef basic_istream<wchar_t> wistream;
112227825Stheraven
113227825Stheraventemplate <class charT, class traits = char_traits<charT> >
114227825Stheravenclass basic_iostream :
115227825Stheraven    public basic_istream<charT,traits>,
116227825Stheraven    public basic_ostream<charT,traits>
117227825Stheraven{
118227825Stheravenpublic:
119227825Stheraven    // types:
120227825Stheraven    typedef charT                          char_type;
121227825Stheraven    typedef traits                         traits_type;
122227825Stheraven    typedef typename traits_type::int_type int_type;
123227825Stheraven    typedef typename traits_type::pos_type pos_type;
124227825Stheraven    typedef typename traits_type::off_type off_type;
125227825Stheraven
126227825Stheraven    // constructor/destructor
127227825Stheraven    explicit basic_iostream(basic_streambuf<char_type, traits_type>* sb);
128227825Stheraven    basic_iostream(basic_iostream&& rhs);
129227825Stheraven    virtual ~basic_iostream();
130227825Stheraven
131227825Stheraven    // assign/swap
132227825Stheraven    basic_iostream& operator=(basic_iostream&& rhs);
133227825Stheraven    void swap(basic_iostream& rhs);
134227825Stheraven};
135227825Stheraven
136227825Stheraventemplate <class charT, class traits>
137227825Stheraven  void
138227825Stheraven  swap(basic_iostream<charT, traits>& x, basic_iostream<charT, traits>& y);
139227825Stheraven
140227825Stheraventypedef basic_iostream<char> iostream;
141227825Stheraventypedef basic_iostream<wchar_t> wiostream;
142227825Stheraven
143227825Stheraventemplate <class charT, class traits>
144227825Stheraven  basic_istream<charT,traits>&
145227825Stheraven  ws(basic_istream<charT,traits>& is);
146227825Stheraven
147227825Stheraventemplate <class charT, class traits, class T>
148227825Stheraven  basic_istream<charT, traits>&
149227825Stheraven  operator>>(basic_istream<charT, traits>&& is, T& x);
150227825Stheraven
151227825Stheraven}  // std
152227825Stheraven
153227825Stheraven*/
154227825Stheraven
155227825Stheraven#include <__config>
156227825Stheraven#include <ostream>
157227825Stheraven
158227825Stheraven#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
159227825Stheraven#pragma GCC system_header
160227825Stheraven#endif
161227825Stheraven
162227825Stheraven_LIBCPP_BEGIN_NAMESPACE_STD
163227825Stheraven
164227825Stheraventemplate <class _CharT, class _Traits>
165227825Stheravenclass _LIBCPP_VISIBLE basic_istream
166227825Stheraven    : virtual public basic_ios<_CharT, _Traits>
167227825Stheraven{
168227825Stheraven    streamsize __gc_;
169227825Stheravenpublic:
170227825Stheraven    // types (inherited from basic_ios (27.5.4)):
171227825Stheraven    typedef _CharT                         char_type;
172227825Stheraven    typedef _Traits                        traits_type;
173227825Stheraven    typedef typename traits_type::int_type int_type;
174227825Stheraven    typedef typename traits_type::pos_type pos_type;
175227825Stheraven    typedef typename traits_type::off_type off_type;
176227825Stheraven
177227825Stheraven    // 27.7.1.1.1 Constructor/destructor:
178227825Stheraven    explicit basic_istream(basic_streambuf<char_type, traits_type>* __sb);
179227825Stheraven    virtual ~basic_istream();
180227825Stheravenprotected:
181227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
182227825Stheraven    _LIBCPP_INLINE_VISIBILITY
183227825Stheraven    basic_istream(basic_istream&& __rhs);
184227825Stheraven#endif
185227825Stheraven
186227825Stheraven    // 27.7.1.1.2 Assign/swap:
187227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
188227825Stheraven    _LIBCPP_INLINE_VISIBILITY
189227825Stheraven    basic_istream& operator=(basic_istream&& __rhs);
190227825Stheraven#endif
191227825Stheraven    void swap(basic_istream& __rhs);
192227825Stheravenpublic:
193227825Stheraven
194227825Stheraven    // 27.7.1.1.3 Prefix/suffix:
195227825Stheraven    class sentry;
196227825Stheraven
197227825Stheraven    // 27.7.1.2 Formatted input:
198227825Stheraven    basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&));
199227825Stheraven    basic_istream& operator>>(basic_ios<char_type, traits_type>&
200227825Stheraven                              (*__pf)(basic_ios<char_type, traits_type>&));
201227825Stheraven    basic_istream& operator>>(ios_base& (*__pf)(ios_base&));
202227825Stheraven    basic_istream& operator>>(basic_streambuf<char_type, traits_type>* __sb);
203227825Stheraven    basic_istream& operator>>(bool& __n);
204227825Stheraven    basic_istream& operator>>(short& __n);
205227825Stheraven    basic_istream& operator>>(unsigned short& __n);
206227825Stheraven    basic_istream& operator>>(int& __n);
207227825Stheraven    basic_istream& operator>>(unsigned int& __n);
208227825Stheraven    basic_istream& operator>>(long& __n);
209227825Stheraven    basic_istream& operator>>(unsigned long& __n);
210227825Stheraven    basic_istream& operator>>(long long& __n);
211227825Stheraven    basic_istream& operator>>(unsigned long long& __n);
212227825Stheraven    basic_istream& operator>>(float& __f);
213227825Stheraven    basic_istream& operator>>(double& __f);
214227825Stheraven    basic_istream& operator>>(long double& __f);
215227825Stheraven    basic_istream& operator>>(void*& __p);
216227825Stheraven
217227825Stheraven    // 27.7.1.3 Unformatted input:
218227825Stheraven    _LIBCPP_INLINE_VISIBILITY
219227825Stheraven    streamsize gcount() const {return __gc_;}
220227825Stheraven    int_type get();
221227825Stheraven    basic_istream& get(char_type& __c);
222227825Stheraven    basic_istream& get(char_type* __s, streamsize __n);
223227825Stheraven    basic_istream& get(char_type* __s, streamsize __n, char_type __dlm);
224227825Stheraven    basic_istream& get(basic_streambuf<char_type, traits_type>& __sb);
225227825Stheraven    basic_istream& get(basic_streambuf<char_type, traits_type>& __sb, char_type __dlm);
226227825Stheraven
227227825Stheraven    basic_istream& getline(char_type* __s, streamsize __n);
228227825Stheraven    basic_istream& getline(char_type* __s, streamsize __n, char_type __dlm);
229227825Stheraven
230227825Stheraven    basic_istream& ignore(streamsize __n = 1, int_type __dlm = traits_type::eof());
231227825Stheraven    int_type peek();
232227825Stheraven    basic_istream& read (char_type* __s, streamsize __n);
233227825Stheraven    streamsize readsome(char_type* __s, streamsize __n);
234227825Stheraven
235227825Stheraven    basic_istream& putback(char_type __c);
236227825Stheraven    basic_istream& unget();
237227825Stheraven    int sync();
238227825Stheraven
239227825Stheraven    pos_type tellg();
240227825Stheraven    basic_istream& seekg(pos_type __pos);
241227825Stheraven    basic_istream& seekg(off_type __off, ios_base::seekdir __dir);
242227825Stheraven};
243227825Stheraven
244227825Stheraventemplate <class _CharT, class _Traits>
245227825Stheravenclass _LIBCPP_VISIBLE basic_istream<_CharT, _Traits>::sentry
246227825Stheraven{
247227825Stheraven    bool __ok_;
248227825Stheraven
249227825Stheraven    sentry(const sentry&); // = delete;
250227825Stheraven    sentry& operator=(const sentry&); // = delete;
251227825Stheraven
252227825Stheravenpublic:
253227825Stheraven    explicit sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
254227825Stheraven//    ~sentry() = default;
255227825Stheraven
256227825Stheraven    _LIBCPP_INLINE_VISIBILITY
257227825Stheraven    // explicit
258227825Stheraven        operator bool() const {return __ok_;}
259227825Stheraven};
260227825Stheraven
261227825Stheraventemplate <class _CharT, class _Traits>
262227825Stheravenbasic_istream<_CharT, _Traits>::sentry::sentry(basic_istream<_CharT, _Traits>& __is,
263227825Stheraven                                               bool __noskipws)
264227825Stheraven    : __ok_(false)
265227825Stheraven{
266227825Stheraven    if (__is.good())
267227825Stheraven    {
268227825Stheraven        if (__is.tie())
269227825Stheraven            __is.tie()->flush();
270227825Stheraven        if (!__noskipws && (__is.flags() & ios_base::skipws))
271227825Stheraven        {
272227825Stheraven            typedef istreambuf_iterator<_CharT, _Traits> _I;
273227825Stheraven            const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
274227825Stheraven            _I __i(__is);
275227825Stheraven            _I __eof;
276227825Stheraven            for (; __i != __eof; ++__i)
277227825Stheraven                if (!__ct.is(__ct.space, *__i))
278227825Stheraven                    break;
279227825Stheraven            if (__i == __eof)
280227825Stheraven                __is.setstate(ios_base::failbit | ios_base::eofbit);
281227825Stheraven        }
282227825Stheraven        __ok_ = __is.good();
283227825Stheraven    }
284227825Stheraven    else
285227825Stheraven        __is.setstate(ios_base::failbit);
286227825Stheraven}
287227825Stheraven
288227825Stheraventemplate <class _CharT, class _Traits>
289227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
290227825Stheravenbasic_istream<_CharT, _Traits>::basic_istream(basic_streambuf<char_type, traits_type>* __sb)
291227825Stheraven    : __gc_(0)
292227825Stheraven{
293227825Stheraven    this->init(__sb);
294227825Stheraven}
295227825Stheraven
296227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
297227825Stheraven
298227825Stheraventemplate <class _CharT, class _Traits>
299227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
300227825Stheravenbasic_istream<_CharT, _Traits>::basic_istream(basic_istream&& __rhs)
301227825Stheraven    : __gc_(__rhs.__gc_)
302227825Stheraven{
303227825Stheraven    __rhs.__gc_ = 0;
304227825Stheraven    this->move(__rhs);
305227825Stheraven}
306227825Stheraven
307227825Stheraventemplate <class _CharT, class _Traits>
308227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
309227825Stheravenbasic_istream<_CharT, _Traits>&
310227825Stheravenbasic_istream<_CharT, _Traits>::operator=(basic_istream&& __rhs)
311227825Stheraven{
312227825Stheraven    swap(__rhs);
313227825Stheraven    return *this;
314227825Stheraven}
315227825Stheraven
316227825Stheraven#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
317227825Stheraven
318227825Stheraventemplate <class _CharT, class _Traits>
319227825Stheravenbasic_istream<_CharT, _Traits>::~basic_istream()
320227825Stheraven{
321227825Stheraven}
322227825Stheraven
323227825Stheraventemplate <class _CharT, class _Traits>
324227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
325227825Stheravenvoid
326227825Stheravenbasic_istream<_CharT, _Traits>::swap(basic_istream& __rhs)
327227825Stheraven{
328227825Stheraven    _VSTD::swap(__gc_, __rhs.__gc_);
329227825Stheraven    basic_ios<char_type, traits_type>::swap(__rhs);
330227825Stheraven}
331227825Stheraven
332227825Stheraventemplate <class _CharT, class _Traits>
333227825Stheravenbasic_istream<_CharT, _Traits>&
334227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)
335227825Stheraven{
336227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
337227825Stheraven    try
338227825Stheraven    {
339227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
340227825Stheraven        sentry __s(*this);
341227825Stheraven        if (__s)
342227825Stheraven        {
343227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
344227825Stheraven            typedef num_get<char_type, _I> _F;
345227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
346227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
347227825Stheraven            this->setstate(__err);
348227825Stheraven        }
349227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
350227825Stheraven    }
351227825Stheraven    catch (...)
352227825Stheraven    {
353227825Stheraven        this->__set_badbit_and_consider_rethrow();
354227825Stheraven    }
355227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
356227825Stheraven    return *this;
357227825Stheraven}
358227825Stheraven
359227825Stheraventemplate <class _CharT, class _Traits>
360227825Stheravenbasic_istream<_CharT, _Traits>&
361227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(unsigned int& __n)
362227825Stheraven{
363227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
364227825Stheraven    try
365227825Stheraven    {
366227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
367227825Stheraven        sentry __s(*this);
368227825Stheraven        if (__s)
369227825Stheraven        {
370227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
371227825Stheraven            typedef num_get<char_type, _I> _F;
372227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
373227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
374227825Stheraven            this->setstate(__err);
375227825Stheraven        }
376227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
377227825Stheraven    }
378227825Stheraven    catch (...)
379227825Stheraven    {
380227825Stheraven        this->__set_badbit_and_consider_rethrow();
381227825Stheraven    }
382227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
383227825Stheraven    return *this;
384227825Stheraven}
385227825Stheraven
386227825Stheraventemplate <class _CharT, class _Traits>
387227825Stheravenbasic_istream<_CharT, _Traits>&
388227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(long& __n)
389227825Stheraven{
390227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
391227825Stheraven    try
392227825Stheraven    {
393227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
394227825Stheraven        sentry __s(*this);
395227825Stheraven        if (__s)
396227825Stheraven        {
397227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
398227825Stheraven            typedef num_get<char_type, _I> _F;
399227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
400227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
401227825Stheraven            this->setstate(__err);
402227825Stheraven        }
403227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
404227825Stheraven    }
405227825Stheraven    catch (...)
406227825Stheraven    {
407227825Stheraven        this->__set_badbit_and_consider_rethrow();
408227825Stheraven    }
409227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
410227825Stheraven    return *this;
411227825Stheraven}
412227825Stheraven
413227825Stheraventemplate <class _CharT, class _Traits>
414227825Stheravenbasic_istream<_CharT, _Traits>&
415227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(unsigned long& __n)
416227825Stheraven{
417227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
418227825Stheraven    try
419227825Stheraven    {
420227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
421227825Stheraven        sentry __s(*this);
422227825Stheraven        if (__s)
423227825Stheraven        {
424227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
425227825Stheraven            typedef num_get<char_type, _I> _F;
426227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
427227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
428227825Stheraven            this->setstate(__err);
429227825Stheraven        }
430227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
431227825Stheraven    }
432227825Stheraven    catch (...)
433227825Stheraven    {
434227825Stheraven        this->__set_badbit_and_consider_rethrow();
435227825Stheraven    }
436227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
437227825Stheraven    return *this;
438227825Stheraven}
439227825Stheraven
440227825Stheraventemplate <class _CharT, class _Traits>
441227825Stheravenbasic_istream<_CharT, _Traits>&
442227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(long long& __n)
443227825Stheraven{
444227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
445227825Stheraven    try
446227825Stheraven    {
447227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
448227825Stheraven        sentry __s(*this);
449227825Stheraven        if (__s)
450227825Stheraven        {
451227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
452227825Stheraven            typedef num_get<char_type, _I> _F;
453227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
454227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
455227825Stheraven            this->setstate(__err);
456227825Stheraven        }
457227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
458227825Stheraven    }
459227825Stheraven    catch (...)
460227825Stheraven    {
461227825Stheraven        this->__set_badbit_and_consider_rethrow();
462227825Stheraven    }
463227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
464227825Stheraven    return *this;
465227825Stheraven}
466227825Stheraven
467227825Stheraventemplate <class _CharT, class _Traits>
468227825Stheravenbasic_istream<_CharT, _Traits>&
469227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(unsigned long long& __n)
470227825Stheraven{
471227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
472227825Stheraven    try
473227825Stheraven    {
474227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
475227825Stheraven        sentry __s(*this);
476227825Stheraven        if (__s)
477227825Stheraven        {
478227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
479227825Stheraven            typedef num_get<char_type, _I> _F;
480227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
481227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
482227825Stheraven            this->setstate(__err);
483227825Stheraven        }
484227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
485227825Stheraven    }
486227825Stheraven    catch (...)
487227825Stheraven    {
488227825Stheraven        this->__set_badbit_and_consider_rethrow();
489227825Stheraven    }
490227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
491227825Stheraven    return *this;
492227825Stheraven}
493227825Stheraven
494227825Stheraventemplate <class _CharT, class _Traits>
495227825Stheravenbasic_istream<_CharT, _Traits>&
496227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(float& __n)
497227825Stheraven{
498227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
499227825Stheraven    try
500227825Stheraven    {
501227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
502227825Stheraven        sentry __s(*this);
503227825Stheraven        if (__s)
504227825Stheraven        {
505227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
506227825Stheraven            typedef num_get<char_type, _I> _F;
507227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
508227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
509227825Stheraven            this->setstate(__err);
510227825Stheraven        }
511227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
512227825Stheraven    }
513227825Stheraven    catch (...)
514227825Stheraven    {
515227825Stheraven        this->__set_badbit_and_consider_rethrow();
516227825Stheraven    }
517227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
518227825Stheraven    return *this;
519227825Stheraven}
520227825Stheraven
521227825Stheraventemplate <class _CharT, class _Traits>
522227825Stheravenbasic_istream<_CharT, _Traits>&
523227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(double& __n)
524227825Stheraven{
525227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
526227825Stheraven    try
527227825Stheraven    {
528227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
529227825Stheraven        sentry __s(*this);
530227825Stheraven        if (__s)
531227825Stheraven        {
532227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
533227825Stheraven            typedef num_get<char_type, _I> _F;
534227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
535227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
536227825Stheraven            this->setstate(__err);
537227825Stheraven        }
538227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
539227825Stheraven    }
540227825Stheraven    catch (...)
541227825Stheraven    {
542227825Stheraven        this->__set_badbit_and_consider_rethrow();
543227825Stheraven    }
544227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
545227825Stheraven    return *this;
546227825Stheraven}
547227825Stheraven
548227825Stheraventemplate <class _CharT, class _Traits>
549227825Stheravenbasic_istream<_CharT, _Traits>&
550227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(long double& __n)
551227825Stheraven{
552227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
553227825Stheraven    try
554227825Stheraven    {
555227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
556227825Stheraven        sentry __s(*this);
557227825Stheraven        if (__s)
558227825Stheraven        {
559227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
560227825Stheraven            typedef num_get<char_type, _I> _F;
561227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
562227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
563227825Stheraven            this->setstate(__err);
564227825Stheraven        }
565227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
566227825Stheraven    }
567227825Stheraven    catch (...)
568227825Stheraven    {
569227825Stheraven        this->__set_badbit_and_consider_rethrow();
570227825Stheraven    }
571227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
572227825Stheraven    return *this;
573227825Stheraven}
574227825Stheraven
575227825Stheraventemplate <class _CharT, class _Traits>
576227825Stheravenbasic_istream<_CharT, _Traits>&
577227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(bool& __n)
578227825Stheraven{
579227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
580227825Stheraven    try
581227825Stheraven    {
582227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
583227825Stheraven        sentry __s(*this);
584227825Stheraven        if (__s)
585227825Stheraven        {
586227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
587227825Stheraven            typedef num_get<char_type, _I> _F;
588227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
589227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
590227825Stheraven            this->setstate(__err);
591227825Stheraven        }
592227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
593227825Stheraven    }
594227825Stheraven    catch (...)
595227825Stheraven    {
596227825Stheraven        this->__set_badbit_and_consider_rethrow();
597227825Stheraven    }
598227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
599227825Stheraven    return *this;
600227825Stheraven}
601227825Stheraven
602227825Stheraventemplate <class _CharT, class _Traits>
603227825Stheravenbasic_istream<_CharT, _Traits>&
604227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(void*& __n)
605227825Stheraven{
606227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
607227825Stheraven    try
608227825Stheraven    {
609227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
610227825Stheraven        sentry __s(*this);
611227825Stheraven        if (__s)
612227825Stheraven        {
613227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
614227825Stheraven            typedef num_get<char_type, _I> _F;
615227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
616227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __n);
617227825Stheraven            this->setstate(__err);
618227825Stheraven        }
619227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
620227825Stheraven    }
621227825Stheraven    catch (...)
622227825Stheraven    {
623227825Stheraven        this->__set_badbit_and_consider_rethrow();
624227825Stheraven    }
625227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
626227825Stheraven    return *this;
627227825Stheraven}
628227825Stheraven
629227825Stheraventemplate <class _CharT, class _Traits>
630227825Stheravenbasic_istream<_CharT, _Traits>&
631227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(short& __n)
632227825Stheraven{
633227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
634227825Stheraven    try
635227825Stheraven    {
636227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
637227825Stheraven        sentry __s(*this);
638227825Stheraven        if (__s)
639227825Stheraven        {
640227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
641227825Stheraven            typedef num_get<char_type, _I> _F;
642227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
643227825Stheraven            long __temp;
644227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __temp);
645227825Stheraven            if (__temp < numeric_limits<short>::min())
646227825Stheraven            {
647227825Stheraven                __err |= ios_base::failbit;
648227825Stheraven                __n = numeric_limits<short>::min();
649227825Stheraven            }
650227825Stheraven            else if (__temp > numeric_limits<short>::max())
651227825Stheraven            {
652227825Stheraven                __err |= ios_base::failbit;
653227825Stheraven                __n = numeric_limits<short>::max();
654227825Stheraven            }
655227825Stheraven            else
656227825Stheraven                __n = static_cast<short>(__temp);
657227825Stheraven            this->setstate(__err);
658227825Stheraven        }
659227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
660227825Stheraven    }
661227825Stheraven    catch (...)
662227825Stheraven    {
663227825Stheraven        this->__set_badbit_and_consider_rethrow();
664227825Stheraven    }
665227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
666227825Stheraven    return *this;
667227825Stheraven}
668227825Stheraven
669227825Stheraventemplate <class _CharT, class _Traits>
670227825Stheravenbasic_istream<_CharT, _Traits>&
671227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(int& __n)
672227825Stheraven{
673227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
674227825Stheraven    try
675227825Stheraven    {
676227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
677227825Stheraven        sentry __s(*this);
678227825Stheraven        if (__s)
679227825Stheraven        {
680227825Stheraven            typedef istreambuf_iterator<char_type, traits_type> _I;
681227825Stheraven            typedef num_get<char_type, _I> _F;
682227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
683227825Stheraven            long __temp;
684227825Stheraven            use_facet<_F>(this->getloc()).get(_I(*this), _I(), *this, __err, __temp);
685227825Stheraven            if (__temp < numeric_limits<int>::min())
686227825Stheraven            {
687227825Stheraven                __err |= ios_base::failbit;
688227825Stheraven                __n = numeric_limits<int>::min();
689227825Stheraven            }
690227825Stheraven            else if (__temp > numeric_limits<int>::max())
691227825Stheraven            {
692227825Stheraven                __err |= ios_base::failbit;
693227825Stheraven                __n = numeric_limits<int>::max();
694227825Stheraven            }
695227825Stheraven            else
696227825Stheraven                __n = static_cast<int>(__temp);
697227825Stheraven            this->setstate(__err);
698227825Stheraven        }
699227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
700227825Stheraven    }
701227825Stheraven    catch (...)
702227825Stheraven    {
703227825Stheraven        this->__set_badbit_and_consider_rethrow();
704227825Stheraven    }
705227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
706227825Stheraven    return *this;
707227825Stheraven}
708227825Stheraven
709227825Stheraventemplate <class _CharT, class _Traits>
710227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
711227825Stheravenbasic_istream<_CharT, _Traits>&
712227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(basic_istream& (*__pf)(basic_istream&))
713227825Stheraven{
714227825Stheraven    return __pf(*this);
715227825Stheraven}
716227825Stheraven
717227825Stheraventemplate <class _CharT, class _Traits>
718227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
719227825Stheravenbasic_istream<_CharT, _Traits>&
720227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(basic_ios<char_type, traits_type>&
721227825Stheraven                                           (*__pf)(basic_ios<char_type, traits_type>&))
722227825Stheraven{
723227825Stheraven    __pf(*this);
724227825Stheraven    return *this;
725227825Stheraven}
726227825Stheraven
727227825Stheraventemplate <class _CharT, class _Traits>
728227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
729227825Stheravenbasic_istream<_CharT, _Traits>&
730227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(ios_base& (*__pf)(ios_base&))
731227825Stheraven{
732227825Stheraven    __pf(*this);
733227825Stheraven    return *this;
734227825Stheraven}
735227825Stheraven
736227825Stheraventemplate<class _CharT, class _Traits>
737227825Stheravenbasic_istream<_CharT, _Traits>&
738227825Stheravenoperator>>(basic_istream<_CharT, _Traits>& __is, _CharT* __s)
739227825Stheraven{
740227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
741227825Stheraven    try
742227825Stheraven    {
743227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
744227825Stheraven        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
745227825Stheraven        if (__sen)
746227825Stheraven        {
747227825Stheraven            streamsize __n = __is.width();
748227825Stheraven            if (__n <= 0)
749227825Stheraven                __n = numeric_limits<streamsize>::max() / sizeof(_CharT) - 1;
750227825Stheraven            streamsize __c = 0;
751227825Stheraven            const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
752227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
753227825Stheraven            while (__c < __n-1)
754227825Stheraven            {
755227825Stheraven                typename _Traits::int_type __i = __is.rdbuf()->sgetc();
756227825Stheraven                if (_Traits::eq_int_type(__i, _Traits::eof()))
757227825Stheraven                {
758227825Stheraven                   __err |= ios_base::eofbit;
759227825Stheraven                   break;
760227825Stheraven                }
761227825Stheraven                _CharT __ch = _Traits::to_char_type(__i);
762227825Stheraven                if (__ct.is(__ct.space, __ch))
763227825Stheraven                    break;
764227825Stheraven                *__s++ = __ch;
765227825Stheraven                ++__c;
766227825Stheraven                 __is.rdbuf()->sbumpc();
767227825Stheraven            }
768227825Stheraven            *__s = _CharT();
769227825Stheraven            __is.width(0);
770227825Stheraven            if (__c == 0)
771227825Stheraven               __err |= ios_base::failbit;
772227825Stheraven            __is.setstate(__err);
773227825Stheraven        }
774227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
775227825Stheraven    }
776227825Stheraven    catch (...)
777227825Stheraven    {
778227825Stheraven        __is.__set_badbit_and_consider_rethrow();
779227825Stheraven    }
780227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
781227825Stheraven    return __is;
782227825Stheraven}
783227825Stheraven
784227825Stheraventemplate<class _Traits>
785227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
786227825Stheravenbasic_istream<char, _Traits>&
787227825Stheravenoperator>>(basic_istream<char, _Traits>& __is, unsigned char* __s)
788227825Stheraven{
789227825Stheraven    return __is >> (char*)__s;
790227825Stheraven}
791227825Stheraven
792227825Stheraventemplate<class _Traits>
793227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
794227825Stheravenbasic_istream<char, _Traits>&
795227825Stheravenoperator>>(basic_istream<char, _Traits>& __is, signed char* __s)
796227825Stheraven{
797227825Stheraven    return __is >> (char*)__s;
798227825Stheraven}
799227825Stheraven
800227825Stheraventemplate<class _CharT, class _Traits>
801227825Stheravenbasic_istream<_CharT, _Traits>&
802227825Stheravenoperator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c)
803227825Stheraven{
804227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
805227825Stheraven    try
806227825Stheraven    {
807227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
808227825Stheraven        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
809227825Stheraven        if (__sen)
810227825Stheraven        {
811227825Stheraven            typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
812227825Stheraven            if (_Traits::eq_int_type(__i, _Traits::eof()))
813227825Stheraven                __is.setstate(ios_base::eofbit | ios_base::failbit);
814227825Stheraven            else
815227825Stheraven                __c = _Traits::to_char_type(__i);
816227825Stheraven        }
817227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
818227825Stheraven    }
819227825Stheraven    catch (...)
820227825Stheraven    {
821227825Stheraven        __is.__set_badbit_and_consider_rethrow();
822227825Stheraven    }
823227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
824227825Stheraven    return __is;
825227825Stheraven}
826227825Stheraven
827227825Stheraventemplate<class _Traits>
828227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
829227825Stheravenbasic_istream<char, _Traits>&
830227825Stheravenoperator>>(basic_istream<char, _Traits>& __is, unsigned char& __c)
831227825Stheraven{
832227825Stheraven    return __is >> (char&)__c;
833227825Stheraven}
834227825Stheraven
835227825Stheraventemplate<class _Traits>
836227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
837227825Stheravenbasic_istream<char, _Traits>&
838227825Stheravenoperator>>(basic_istream<char, _Traits>& __is, signed char& __c)
839227825Stheraven{
840227825Stheraven    return __is >> (char&)__c;
841227825Stheraven}
842227825Stheraven
843227825Stheraventemplate<class _CharT, class _Traits>
844227825Stheravenbasic_istream<_CharT, _Traits>&
845227825Stheravenbasic_istream<_CharT, _Traits>::operator>>(basic_streambuf<char_type, traits_type>* __sb)
846227825Stheraven{
847227825Stheraven    __gc_ = 0;
848227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
849227825Stheraven    try
850227825Stheraven    {
851227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
852227825Stheraven        sentry __s(*this, true);
853227825Stheraven        if (__s)
854227825Stheraven        {
855227825Stheraven            if (__sb)
856227825Stheraven            {
857227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
858227825Stheraven                try
859227825Stheraven                {
860227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
861227825Stheraven                    ios_base::iostate __err = ios_base::goodbit;
862227825Stheraven                    while (true)
863227825Stheraven                    {
864227825Stheraven                        typename traits_type::int_type __i = this->rdbuf()->sgetc();
865227825Stheraven                        if (traits_type::eq_int_type(__i, _Traits::eof()))
866227825Stheraven                        {
867227825Stheraven                           __err |= ios_base::eofbit;
868227825Stheraven                           break;
869227825Stheraven                        }
870227825Stheraven                        if (traits_type::eq_int_type(
871227825Stheraven                                __sb->sputc(traits_type::to_char_type(__i)),
872227825Stheraven                                traits_type::eof()))
873227825Stheraven                            break;
874227825Stheraven                        ++__gc_;
875227825Stheraven                        this->rdbuf()->sbumpc();
876227825Stheraven                    }
877227825Stheraven                    if (__gc_ == 0)
878227825Stheraven                       __err |= ios_base::failbit;
879227825Stheraven                    this->setstate(__err);
880227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
881227825Stheraven                }
882227825Stheraven                catch (...)
883227825Stheraven                {
884227825Stheraven                    if (__gc_ == 0)
885227825Stheraven                        this->__set_failbit_and_consider_rethrow();
886227825Stheraven                }
887227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
888227825Stheraven            }
889227825Stheraven            else
890227825Stheraven                this->setstate(ios_base::failbit);
891227825Stheraven        }
892227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
893227825Stheraven    }
894227825Stheraven    catch (...)
895227825Stheraven    {
896227825Stheraven        this->__set_badbit_and_consider_rethrow();
897227825Stheraven    }
898227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
899227825Stheraven    return *this;
900227825Stheraven}
901227825Stheraven
902227825Stheraventemplate<class _CharT, class _Traits>
903227825Stheraventypename basic_istream<_CharT, _Traits>::int_type
904227825Stheravenbasic_istream<_CharT, _Traits>::get()
905227825Stheraven{
906227825Stheraven    __gc_ = 0;
907227825Stheraven    int_type __r = traits_type::eof();
908227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
909227825Stheraven    try
910227825Stheraven    {
911227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
912227825Stheraven        sentry __s(*this, true);
913227825Stheraven        if (__s)
914227825Stheraven        {
915227825Stheraven            __r = this->rdbuf()->sbumpc();
916227825Stheraven            if (traits_type::eq_int_type(__r, traits_type::eof()))
917227825Stheraven               this->setstate(ios_base::failbit | ios_base::eofbit);
918227825Stheraven            else
919227825Stheraven                __gc_ = 1;
920227825Stheraven        }
921227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
922227825Stheraven    }
923227825Stheraven    catch (...)
924227825Stheraven    {
925227825Stheraven        this->__set_badbit_and_consider_rethrow();
926227825Stheraven    }
927227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
928227825Stheraven    return __r;
929227825Stheraven}
930227825Stheraven
931227825Stheraventemplate<class _CharT, class _Traits>
932227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
933227825Stheravenbasic_istream<_CharT, _Traits>&
934227825Stheravenbasic_istream<_CharT, _Traits>::get(char_type& __c)
935227825Stheraven{
936227825Stheraven    int_type __ch = get();
937227825Stheraven    if (__ch != traits_type::eof())
938227825Stheraven        __c = traits_type::to_char_type(__ch);
939227825Stheraven    return *this;
940227825Stheraven}
941227825Stheraven
942227825Stheraventemplate<class _CharT, class _Traits>
943227825Stheravenbasic_istream<_CharT, _Traits>&
944227825Stheravenbasic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n, char_type __dlm)
945227825Stheraven{
946227825Stheraven    __gc_ = 0;
947227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
948227825Stheraven    try
949227825Stheraven    {
950227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
951227825Stheraven        sentry __sen(*this, true);
952227825Stheraven        if (__sen)
953227825Stheraven        {
954227825Stheraven            if (__n > 0)
955227825Stheraven            {
956227825Stheraven                ios_base::iostate __err = ios_base::goodbit;
957227825Stheraven                while (__gc_ < __n-1)
958227825Stheraven                {
959227825Stheraven                    int_type __i = this->rdbuf()->sgetc();
960227825Stheraven                    if (traits_type::eq_int_type(__i, traits_type::eof()))
961227825Stheraven                    {
962227825Stheraven                       __err |= ios_base::eofbit;
963227825Stheraven                       break;
964227825Stheraven                    }
965227825Stheraven                    char_type __ch = traits_type::to_char_type(__i);
966227825Stheraven                    if (traits_type::eq(__ch, __dlm))
967227825Stheraven                        break;
968227825Stheraven                    *__s++ = __ch;
969227825Stheraven                    ++__gc_;
970227825Stheraven                     this->rdbuf()->sbumpc();
971227825Stheraven                }
972227825Stheraven                *__s = char_type();
973227825Stheraven                if (__gc_ == 0)
974227825Stheraven                   __err |= ios_base::failbit;
975227825Stheraven                this->setstate(__err);
976227825Stheraven            }
977227825Stheraven            else
978227825Stheraven                this->setstate(ios_base::failbit);
979227825Stheraven        }
980227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
981227825Stheraven    }
982227825Stheraven    catch (...)
983227825Stheraven    {
984227825Stheraven        this->__set_badbit_and_consider_rethrow();
985227825Stheraven    }
986227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
987227825Stheraven    return *this;
988227825Stheraven}
989227825Stheraven
990227825Stheraventemplate<class _CharT, class _Traits>
991227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
992227825Stheravenbasic_istream<_CharT, _Traits>&
993227825Stheravenbasic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n)
994227825Stheraven{
995227825Stheraven    return get(__s, __n, this->widen('\n'));
996227825Stheraven}
997227825Stheraven
998227825Stheraventemplate<class _CharT, class _Traits>
999227825Stheravenbasic_istream<_CharT, _Traits>&
1000227825Stheravenbasic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __sb,
1001227825Stheraven                                    char_type __dlm)
1002227825Stheraven{
1003227825Stheraven    __gc_ = 0;
1004227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1005227825Stheraven    try
1006227825Stheraven    {
1007227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1008227825Stheraven        sentry __sen(*this, true);
1009227825Stheraven        if (__sen)
1010227825Stheraven        {
1011227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
1012227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1013227825Stheraven            try
1014227825Stheraven            {
1015227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1016227825Stheraven                while (true)
1017227825Stheraven                {
1018227825Stheraven                    typename traits_type::int_type __i = this->rdbuf()->sgetc();
1019227825Stheraven                    if (traits_type::eq_int_type(__i, traits_type::eof()))
1020227825Stheraven                    {
1021227825Stheraven                       __err |= ios_base::eofbit;
1022227825Stheraven                       break;
1023227825Stheraven                    }
1024227825Stheraven                    char_type __ch = traits_type::to_char_type(__i);
1025227825Stheraven                    if (traits_type::eq(__ch, __dlm))
1026227825Stheraven                        break;
1027227825Stheraven                    if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type::eof()))
1028227825Stheraven                        break;
1029227825Stheraven                    ++__gc_;
1030227825Stheraven                    this->rdbuf()->sbumpc();
1031227825Stheraven                }
1032227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1033227825Stheraven            }
1034227825Stheraven            catch (...)
1035227825Stheraven            {
1036227825Stheraven            }
1037227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1038227825Stheraven            if (__gc_ == 0)
1039227825Stheraven               __err |= ios_base::failbit;
1040227825Stheraven            this->setstate(__err);
1041227825Stheraven        }
1042227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1043227825Stheraven    }
1044227825Stheraven    catch (...)
1045227825Stheraven    {
1046227825Stheraven        this->__set_badbit_and_consider_rethrow();
1047227825Stheraven    }
1048227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1049227825Stheraven    return *this;
1050227825Stheraven}
1051227825Stheraven
1052227825Stheraventemplate<class _CharT, class _Traits>
1053227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1054227825Stheravenbasic_istream<_CharT, _Traits>&
1055227825Stheravenbasic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __sb)
1056227825Stheraven{
1057227825Stheraven    return get(__sb, this->widen('\n'));
1058227825Stheraven}
1059227825Stheraven
1060227825Stheraventemplate<class _CharT, class _Traits>
1061227825Stheravenbasic_istream<_CharT, _Traits>&
1062227825Stheravenbasic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_type __dlm)
1063227825Stheraven{
1064227825Stheraven    __gc_ = 0;
1065227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1066227825Stheraven    try
1067227825Stheraven    {
1068227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1069227825Stheraven        sentry __sen(*this, true);
1070227825Stheraven        if (__sen)
1071227825Stheraven        {
1072227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
1073227825Stheraven            while (true)
1074227825Stheraven            {
1075227825Stheraven                typename traits_type::int_type __i = this->rdbuf()->sgetc();
1076227825Stheraven                if (traits_type::eq_int_type(__i, traits_type::eof()))
1077227825Stheraven                {
1078227825Stheraven                   __err |= ios_base::eofbit;
1079227825Stheraven                   break;
1080227825Stheraven                }
1081227825Stheraven                char_type __ch = traits_type::to_char_type(__i);
1082227825Stheraven                if (traits_type::eq(__ch, __dlm))
1083227825Stheraven                {
1084227825Stheraven                    this->rdbuf()->sbumpc();
1085227825Stheraven                    ++__gc_;
1086227825Stheraven                    break;
1087227825Stheraven                }
1088227825Stheraven                if (__gc_ >= __n-1)
1089227825Stheraven                {
1090227825Stheraven                    __err |= ios_base::failbit;
1091227825Stheraven                    break;
1092227825Stheraven                }
1093227825Stheraven                *__s++ = __ch;
1094227825Stheraven                this->rdbuf()->sbumpc();
1095227825Stheraven                ++__gc_;
1096227825Stheraven            }
1097227825Stheraven            if (__n > 0)
1098227825Stheraven                *__s = char_type();
1099227825Stheraven            if (__gc_ == 0)
1100227825Stheraven               __err |= ios_base::failbit;
1101227825Stheraven            this->setstate(__err);
1102227825Stheraven        }
1103227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1104227825Stheraven    }
1105227825Stheraven    catch (...)
1106227825Stheraven    {
1107227825Stheraven        this->__set_badbit_and_consider_rethrow();
1108227825Stheraven    }
1109227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1110227825Stheraven    return *this;
1111227825Stheraven}
1112227825Stheraven
1113227825Stheraventemplate<class _CharT, class _Traits>
1114227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1115227825Stheravenbasic_istream<_CharT, _Traits>&
1116227825Stheravenbasic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n)
1117227825Stheraven{
1118227825Stheraven    return getline(__s, __n, this->widen('\n'));
1119227825Stheraven}
1120227825Stheraven
1121227825Stheraventemplate<class _CharT, class _Traits>
1122227825Stheravenbasic_istream<_CharT, _Traits>&
1123227825Stheravenbasic_istream<_CharT, _Traits>::ignore(streamsize __n, int_type __dlm)
1124227825Stheraven{
1125227825Stheraven    __gc_ = 0;
1126227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1127227825Stheraven    try
1128227825Stheraven    {
1129227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1130227825Stheraven        sentry __sen(*this, true);
1131227825Stheraven        if (__sen)
1132227825Stheraven        {
1133227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
1134227825Stheraven            if (__n == numeric_limits<streamsize>::max())
1135227825Stheraven            {
1136227825Stheraven                while (true)
1137227825Stheraven                {
1138227825Stheraven                    typename traits_type::int_type __i = this->rdbuf()->sbumpc();
1139227825Stheraven                    if (traits_type::eq_int_type(__i, traits_type::eof()))
1140227825Stheraven                    {
1141227825Stheraven                       __err |= ios_base::eofbit;
1142227825Stheraven                       break;
1143227825Stheraven                    }
1144227825Stheraven                    ++__gc_;
1145227825Stheraven                    char_type __ch = traits_type::to_char_type(__i);
1146227825Stheraven                    if (traits_type::eq(__ch, __dlm))
1147227825Stheraven                        break;
1148227825Stheraven                }
1149227825Stheraven            }
1150227825Stheraven            else
1151227825Stheraven            {
1152227825Stheraven                while (__gc_ < __n)
1153227825Stheraven                {
1154227825Stheraven                    typename traits_type::int_type __i = this->rdbuf()->sbumpc();
1155227825Stheraven                    if (traits_type::eq_int_type(__i, traits_type::eof()))
1156227825Stheraven                    {
1157227825Stheraven                       __err |= ios_base::eofbit;
1158227825Stheraven                       break;
1159227825Stheraven                    }
1160227825Stheraven                    ++__gc_;
1161227825Stheraven                    char_type __ch = traits_type::to_char_type(__i);
1162227825Stheraven                    if (traits_type::eq(__ch, __dlm))
1163227825Stheraven                        break;
1164227825Stheraven                }
1165227825Stheraven            }
1166227825Stheraven            this->setstate(__err);
1167227825Stheraven        }
1168227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1169227825Stheraven    }
1170227825Stheraven    catch (...)
1171227825Stheraven    {
1172227825Stheraven        this->__set_badbit_and_consider_rethrow();
1173227825Stheraven    }
1174227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1175227825Stheraven    return *this;
1176227825Stheraven}
1177227825Stheraven
1178227825Stheraventemplate<class _CharT, class _Traits>
1179227825Stheraventypename basic_istream<_CharT, _Traits>::int_type
1180227825Stheravenbasic_istream<_CharT, _Traits>::peek()
1181227825Stheraven{
1182227825Stheraven    __gc_ = 0;
1183227825Stheraven    int_type __r = traits_type::eof();
1184227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1185227825Stheraven    try
1186227825Stheraven    {
1187227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1188227825Stheraven        sentry __sen(*this, true);
1189227825Stheraven        if (__sen)
1190227825Stheraven            __r = this->rdbuf()->sgetc();
1191227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1192227825Stheraven    }
1193227825Stheraven    catch (...)
1194227825Stheraven    {
1195227825Stheraven        this->__set_badbit_and_consider_rethrow();
1196227825Stheraven    }
1197227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1198227825Stheraven    return __r;
1199227825Stheraven}
1200227825Stheraven
1201227825Stheraventemplate<class _CharT, class _Traits>
1202227825Stheravenbasic_istream<_CharT, _Traits>&
1203227825Stheravenbasic_istream<_CharT, _Traits>::read(char_type* __s, streamsize __n)
1204227825Stheraven{
1205227825Stheraven    __gc_ = 0;
1206227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1207227825Stheraven    try
1208227825Stheraven    {
1209227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1210227825Stheraven        sentry __sen(*this, true);
1211227825Stheraven        if (__sen)
1212227825Stheraven        {
1213227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
1214227825Stheraven            for (; __gc_ < __n; ++__gc_)
1215227825Stheraven            {
1216227825Stheraven                typename traits_type::int_type __i = this->rdbuf()->sbumpc();
1217227825Stheraven                if (traits_type::eq_int_type(__i, traits_type::eof()))
1218227825Stheraven                {
1219227825Stheraven                   this->setstate(ios_base::failbit | ios_base::eofbit);
1220227825Stheraven                   break;
1221227825Stheraven                }
1222227825Stheraven                *__s++ = traits_type::to_char_type(__i);
1223227825Stheraven            }
1224227825Stheraven        }
1225227825Stheraven        else
1226227825Stheraven            this->setstate(ios_base::failbit);
1227227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1228227825Stheraven    }
1229227825Stheraven    catch (...)
1230227825Stheraven    {
1231227825Stheraven        this->__set_badbit_and_consider_rethrow();
1232227825Stheraven    }
1233227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1234227825Stheraven    return *this;
1235227825Stheraven}
1236227825Stheraven
1237227825Stheraventemplate<class _CharT, class _Traits>
1238227825Stheravenstreamsize
1239227825Stheravenbasic_istream<_CharT, _Traits>::readsome(char_type* __s, streamsize __n)
1240227825Stheraven{
1241227825Stheraven    streamsize __c = this->rdbuf()->in_avail();
1242227825Stheraven    switch (__c)
1243227825Stheraven    {
1244227825Stheraven    case -1:
1245227825Stheraven        this->setstate(ios_base::eofbit);
1246227825Stheraven        break;
1247227825Stheraven    case 0:
1248227825Stheraven        break;
1249227825Stheraven    default:
1250227825Stheraven        read(__s, _VSTD::min(__c, __n));
1251227825Stheraven        break;
1252227825Stheraven    }
1253227825Stheraven    return __gc_;
1254227825Stheraven}
1255227825Stheraven
1256227825Stheraventemplate<class _CharT, class _Traits>
1257227825Stheravenbasic_istream<_CharT, _Traits>&
1258227825Stheravenbasic_istream<_CharT, _Traits>::putback(char_type __c)
1259227825Stheraven{
1260227825Stheraven    __gc_ = 0;
1261227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1262227825Stheraven    try
1263227825Stheraven    {
1264227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1265227825Stheraven        sentry __sen(*this, true);
1266227825Stheraven        if (__sen)
1267227825Stheraven        {
1268227825Stheraven            if (this->rdbuf() == 0 || this->rdbuf()->sputbackc(__c) == traits_type::eof())
1269227825Stheraven                this->setstate(ios_base::badbit);
1270227825Stheraven        }
1271227825Stheraven        else
1272227825Stheraven            this->setstate(ios_base::failbit);
1273227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1274227825Stheraven    }
1275227825Stheraven    catch (...)
1276227825Stheraven    {
1277227825Stheraven        this->__set_badbit_and_consider_rethrow();
1278227825Stheraven    }
1279227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1280227825Stheraven    return *this;
1281227825Stheraven}
1282227825Stheraven
1283227825Stheraventemplate<class _CharT, class _Traits>
1284227825Stheravenbasic_istream<_CharT, _Traits>&
1285227825Stheravenbasic_istream<_CharT, _Traits>::unget()
1286227825Stheraven{
1287227825Stheraven    __gc_ = 0;
1288227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1289227825Stheraven    try
1290227825Stheraven    {
1291227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1292227825Stheraven        sentry __sen(*this, true);
1293227825Stheraven        if (__sen)
1294227825Stheraven        {
1295227825Stheraven            if (this->rdbuf() == 0 || this->rdbuf()->sungetc() == traits_type::eof())
1296227825Stheraven                this->setstate(ios_base::badbit);
1297227825Stheraven        }
1298227825Stheraven        else
1299227825Stheraven            this->setstate(ios_base::failbit);
1300227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1301227825Stheraven    }
1302227825Stheraven    catch (...)
1303227825Stheraven    {
1304227825Stheraven        this->__set_badbit_and_consider_rethrow();
1305227825Stheraven    }
1306227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1307227825Stheraven    return *this;
1308227825Stheraven}
1309227825Stheraven
1310227825Stheraventemplate<class _CharT, class _Traits>
1311227825Stheravenint
1312227825Stheravenbasic_istream<_CharT, _Traits>::sync()
1313227825Stheraven{
1314227825Stheraven    int __r = 0;
1315227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1316227825Stheraven    try
1317227825Stheraven    {
1318227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1319227825Stheraven        sentry __sen(*this, true);
1320227825Stheraven        if (__sen)
1321227825Stheraven        {
1322227825Stheraven            if (this->rdbuf() == 0)
1323227825Stheraven                return -1;
1324227825Stheraven            if (this->rdbuf()->pubsync() == -1)
1325227825Stheraven            {
1326227825Stheraven                this->setstate(ios_base::badbit);
1327227825Stheraven                return -1;
1328227825Stheraven            }
1329227825Stheraven        }
1330227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1331227825Stheraven    }
1332227825Stheraven    catch (...)
1333227825Stheraven    {
1334227825Stheraven        this->__set_badbit_and_consider_rethrow();
1335227825Stheraven    }
1336227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1337227825Stheraven    return __r;
1338227825Stheraven}
1339227825Stheraven
1340227825Stheraventemplate<class _CharT, class _Traits>
1341227825Stheraventypename basic_istream<_CharT, _Traits>::pos_type
1342227825Stheravenbasic_istream<_CharT, _Traits>::tellg()
1343227825Stheraven{
1344227825Stheraven    pos_type __r(-1);
1345227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1346227825Stheraven    try
1347227825Stheraven    {
1348227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1349227825Stheraven        sentry __sen(*this, true);
1350227825Stheraven        if (__sen)
1351227825Stheraven            __r = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
1352227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1353227825Stheraven    }
1354227825Stheraven    catch (...)
1355227825Stheraven    {
1356227825Stheraven        this->__set_badbit_and_consider_rethrow();
1357227825Stheraven    }
1358227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1359227825Stheraven    return __r;
1360227825Stheraven}
1361227825Stheraven
1362227825Stheraventemplate<class _CharT, class _Traits>
1363227825Stheravenbasic_istream<_CharT, _Traits>&
1364227825Stheravenbasic_istream<_CharT, _Traits>::seekg(pos_type __pos)
1365227825Stheraven{
1366227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1367227825Stheraven    try
1368227825Stheraven    {
1369227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1370227825Stheraven        sentry __sen(*this, true);
1371227825Stheraven        if (__sen)
1372227825Stheraven            if (this->rdbuf()->pubseekpos(__pos, ios_base::in) == pos_type(-1))
1373227825Stheraven                this->setstate(ios_base::failbit);
1374227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1375227825Stheraven    }
1376227825Stheraven    catch (...)
1377227825Stheraven    {
1378227825Stheraven        this->__set_badbit_and_consider_rethrow();
1379227825Stheraven    }
1380227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1381227825Stheraven    return *this;
1382227825Stheraven}
1383227825Stheraven
1384227825Stheraventemplate<class _CharT, class _Traits>
1385227825Stheravenbasic_istream<_CharT, _Traits>&
1386227825Stheravenbasic_istream<_CharT, _Traits>::seekg(off_type __off, ios_base::seekdir __dir)
1387227825Stheraven{
1388227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1389227825Stheraven    try
1390227825Stheraven    {
1391227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1392227825Stheraven        sentry __sen(*this, true);
1393227825Stheraven        if (__sen)
1394227825Stheraven            this->rdbuf()->pubseekoff(__off, __dir, ios_base::in);
1395227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1396227825Stheraven    }
1397227825Stheraven    catch (...)
1398227825Stheraven    {
1399227825Stheraven        this->__set_badbit_and_consider_rethrow();
1400227825Stheraven    }
1401227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1402227825Stheraven    return *this;
1403227825Stheraven}
1404227825Stheraven
1405227825Stheraventemplate <class _CharT, class _Traits>
1406227825Stheravenbasic_istream<_CharT, _Traits>&
1407227825Stheravenws(basic_istream<_CharT, _Traits>& __is)
1408227825Stheraven{
1409227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1410227825Stheraven    try
1411227825Stheraven    {
1412227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1413227825Stheraven        typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1414227825Stheraven        if (__sen)
1415227825Stheraven        {
1416227825Stheraven            const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
1417227825Stheraven            while (true)
1418227825Stheraven            {
1419227825Stheraven                typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1420227825Stheraven                if (_Traits::eq_int_type(__i, _Traits::eof()))
1421227825Stheraven                {
1422227825Stheraven                   __is.setstate(ios_base::eofbit);
1423227825Stheraven                   break;
1424227825Stheraven                }
1425227825Stheraven                if (!__ct.is(__ct.space, _Traits::to_char_type(__i)))
1426227825Stheraven                    break;
1427227825Stheraven                __is.rdbuf()->sbumpc();
1428227825Stheraven            }
1429227825Stheraven        }
1430227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1431227825Stheraven    }
1432227825Stheraven    catch (...)
1433227825Stheraven    {
1434227825Stheraven        __is.__set_badbit_and_consider_rethrow();
1435227825Stheraven    }
1436227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1437227825Stheraven    return __is;
1438227825Stheraven}
1439227825Stheraven
1440227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1441227825Stheraven
1442227825Stheraventemplate <class _CharT, class _Traits, class _Tp>
1443227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1444227825Stheravenbasic_istream<_CharT, _Traits>&
1445227825Stheravenoperator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
1446227825Stheraven{
1447227825Stheraven    __is >> __x;
1448227825Stheraven    return __is;
1449227825Stheraven}
1450227825Stheraven
1451227825Stheraven#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1452227825Stheraven
1453227825Stheraventemplate <class _CharT, class _Traits>
1454227825Stheravenclass _LIBCPP_VISIBLE basic_iostream
1455227825Stheraven    : public basic_istream<_CharT, _Traits>,
1456227825Stheraven      public basic_ostream<_CharT, _Traits>
1457227825Stheraven{
1458227825Stheravenpublic:
1459227825Stheraven    // types:
1460227825Stheraven    typedef _CharT                         char_type;
1461227825Stheraven    typedef _Traits                        traits_type;
1462227825Stheraven    typedef typename traits_type::int_type int_type;
1463227825Stheraven    typedef typename traits_type::pos_type pos_type;
1464227825Stheraven    typedef typename traits_type::off_type off_type;
1465227825Stheraven
1466227825Stheraven    // constructor/destructor
1467227825Stheraven    explicit basic_iostream(basic_streambuf<char_type, traits_type>* __sb);
1468227825Stheraven    virtual ~basic_iostream();
1469227825Stheravenprotected:
1470227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1471227825Stheraven    _LIBCPP_INLINE_VISIBILITY
1472227825Stheraven    basic_iostream(basic_iostream&& __rhs);
1473227825Stheraven#endif
1474227825Stheraven
1475227825Stheraven    // assign/swap
1476227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1477227825Stheraven    _LIBCPP_INLINE_VISIBILITY
1478227825Stheraven    basic_iostream& operator=(basic_iostream&& __rhs);
1479227825Stheraven#endif
1480227825Stheraven    void swap(basic_iostream& __rhs);
1481227825Stheravenpublic:
1482227825Stheraven};
1483227825Stheraven
1484227825Stheraventemplate <class _CharT, class _Traits>
1485227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1486227825Stheravenbasic_iostream<_CharT, _Traits>::basic_iostream(basic_streambuf<char_type, traits_type>* __sb)
1487227825Stheraven    : basic_istream<_CharT, _Traits>(__sb)
1488227825Stheraven{
1489227825Stheraven}
1490227825Stheraven
1491227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1492227825Stheraven
1493227825Stheraventemplate <class _CharT, class _Traits>
1494227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1495227825Stheravenbasic_iostream<_CharT, _Traits>::basic_iostream(basic_iostream&& __rhs)
1496227825Stheraven    : basic_istream<_CharT, _Traits>(_VSTD::move(__rhs))
1497227825Stheraven{
1498227825Stheraven}
1499227825Stheraven
1500227825Stheraventemplate <class _CharT, class _Traits>
1501227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1502227825Stheravenbasic_iostream<_CharT, _Traits>&
1503227825Stheravenbasic_iostream<_CharT, _Traits>::operator=(basic_iostream&& __rhs)
1504227825Stheraven{
1505227825Stheraven    swap(__rhs);
1506227825Stheraven    return *this;
1507227825Stheraven}
1508227825Stheraven
1509227825Stheraven#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1510227825Stheraven
1511227825Stheraventemplate <class _CharT, class _Traits>
1512227825Stheravenbasic_iostream<_CharT, _Traits>::~basic_iostream()
1513227825Stheraven{
1514227825Stheraven}
1515227825Stheraven
1516227825Stheraventemplate <class _CharT, class _Traits>
1517227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1518227825Stheravenvoid
1519227825Stheravenbasic_iostream<_CharT, _Traits>::swap(basic_iostream& __rhs)
1520227825Stheraven{
1521227825Stheraven    basic_istream<char_type, traits_type>::swap(__rhs);
1522227825Stheraven}
1523227825Stheraven
1524227825Stheraventemplate<class _CharT, class _Traits, class _Allocator>
1525227825Stheravenbasic_istream<_CharT, _Traits>&
1526227825Stheravenoperator>>(basic_istream<_CharT, _Traits>& __is,
1527227825Stheraven           basic_string<_CharT, _Traits, _Allocator>& __str)
1528227825Stheraven{
1529227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1530227825Stheraven    try
1531227825Stheraven    {
1532227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1533227825Stheraven        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1534227825Stheraven        if (__sen)
1535227825Stheraven        {
1536227825Stheraven            __str.clear();
1537227825Stheraven            streamsize __n = __is.width();
1538227825Stheraven            if (__n <= 0)
1539227825Stheraven                __n = __str.max_size();
1540227825Stheraven            if (__n <= 0)
1541227825Stheraven                __n = numeric_limits<streamsize>::max();
1542227825Stheraven            streamsize __c = 0;
1543227825Stheraven            const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
1544227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
1545227825Stheraven            while (__c < __n)
1546227825Stheraven            {
1547227825Stheraven                typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1548227825Stheraven                if (_Traits::eq_int_type(__i, _Traits::eof()))
1549227825Stheraven                {
1550227825Stheraven                   __err |= ios_base::eofbit;
1551227825Stheraven                   break;
1552227825Stheraven                }
1553227825Stheraven                _CharT __ch = _Traits::to_char_type(__i);
1554227825Stheraven                if (__ct.is(__ct.space, __ch))
1555227825Stheraven                    break;
1556227825Stheraven                __str.push_back(__ch);
1557227825Stheraven                ++__c;
1558227825Stheraven                 __is.rdbuf()->sbumpc();
1559227825Stheraven            }
1560227825Stheraven            __is.width(0);
1561227825Stheraven            if (__c == 0)
1562227825Stheraven               __err |= ios_base::failbit;
1563227825Stheraven            __is.setstate(__err);
1564227825Stheraven        }
1565227825Stheraven        else
1566227825Stheraven            __is.setstate(ios_base::failbit);
1567227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1568227825Stheraven    }
1569227825Stheraven    catch (...)
1570227825Stheraven    {
1571227825Stheraven        __is.__set_badbit_and_consider_rethrow();
1572227825Stheraven    }
1573227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1574227825Stheraven    return __is;
1575227825Stheraven}
1576227825Stheraven
1577227825Stheraventemplate<class _CharT, class _Traits, class _Allocator>
1578227825Stheravenbasic_istream<_CharT, _Traits>&
1579227825Stheravengetline(basic_istream<_CharT, _Traits>& __is,
1580227825Stheraven        basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1581227825Stheraven{
1582227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1583227825Stheraven    try
1584227825Stheraven    {
1585227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1586227825Stheraven        typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1587227825Stheraven        if (__sen)
1588227825Stheraven        {
1589227825Stheraven            __str.clear();
1590227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
1591227825Stheraven            streamsize __extr = 0;
1592227825Stheraven            while (true)
1593227825Stheraven            {
1594227825Stheraven                typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
1595227825Stheraven                if (_Traits::eq_int_type(__i, _Traits::eof()))
1596227825Stheraven                {
1597227825Stheraven                   __err |= ios_base::eofbit;
1598227825Stheraven                   break;
1599227825Stheraven                }
1600227825Stheraven                ++__extr;
1601227825Stheraven                _CharT __ch = _Traits::to_char_type(__i);
1602227825Stheraven                if (_Traits::eq(__ch, __dlm))
1603227825Stheraven                    break;
1604227825Stheraven                __str.push_back(__ch);
1605227825Stheraven                if (__str.size() == __str.max_size())
1606227825Stheraven                {
1607227825Stheraven                    __err |= ios_base::failbit;
1608227825Stheraven                    break;
1609227825Stheraven                }
1610227825Stheraven            }
1611227825Stheraven            if (__extr == 0)
1612227825Stheraven               __err |= ios_base::failbit;
1613227825Stheraven            __is.setstate(__err);
1614227825Stheraven        }
1615227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1616227825Stheraven    }
1617227825Stheraven    catch (...)
1618227825Stheraven    {
1619227825Stheraven        __is.__set_badbit_and_consider_rethrow();
1620227825Stheraven    }
1621227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1622227825Stheraven    return __is;
1623227825Stheraven}
1624227825Stheraven
1625227825Stheraventemplate<class _CharT, class _Traits, class _Allocator>
1626227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1627227825Stheravenbasic_istream<_CharT, _Traits>&
1628227825Stheravengetline(basic_istream<_CharT, _Traits>& __is,
1629227825Stheraven        basic_string<_CharT, _Traits, _Allocator>& __str)
1630227825Stheraven{
1631227825Stheraven    return getline(__is, __str, __is.widen('\n'));
1632227825Stheraven}
1633227825Stheraven
1634227825Stheraven#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1635227825Stheraven
1636227825Stheraventemplate<class _CharT, class _Traits, class _Allocator>
1637227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1638227825Stheravenbasic_istream<_CharT, _Traits>&
1639227825Stheravengetline(basic_istream<_CharT, _Traits>&& __is,
1640227825Stheraven        basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1641227825Stheraven{
1642227825Stheraven    return getline(__is, __str, __dlm);
1643227825Stheraven}
1644227825Stheraven
1645227825Stheraventemplate<class _CharT, class _Traits, class _Allocator>
1646227825Stheraveninline _LIBCPP_INLINE_VISIBILITY
1647227825Stheravenbasic_istream<_CharT, _Traits>&
1648227825Stheravengetline(basic_istream<_CharT, _Traits>&& __is,
1649227825Stheraven        basic_string<_CharT, _Traits, _Allocator>& __str)
1650227825Stheraven{
1651227825Stheraven    return getline(__is, __str, __is.widen('\n'));
1652227825Stheraven}
1653227825Stheraven
1654227825Stheraven#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1655227825Stheraven
1656227825Stheraventemplate <class _CharT, class _Traits, size_t _Size>
1657227825Stheravenbasic_istream<_CharT, _Traits>&
1658227825Stheravenoperator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Size>& __x)
1659227825Stheraven{
1660227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1661227825Stheraven    try
1662227825Stheraven    {
1663227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1664227825Stheraven        typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1665227825Stheraven        if (__sen)
1666227825Stheraven        {
1667227825Stheraven            basic_string<_CharT, _Traits> __str;
1668227825Stheraven            const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
1669227825Stheraven            streamsize __c = 0;
1670227825Stheraven            ios_base::iostate __err = ios_base::goodbit;
1671227825Stheraven            _CharT __zero = __ct.widen('0');
1672227825Stheraven            _CharT __one = __ct.widen('1');
1673227825Stheraven            while (__c < _Size)
1674227825Stheraven            {
1675227825Stheraven                typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1676227825Stheraven                if (_Traits::eq_int_type(__i, _Traits::eof()))
1677227825Stheraven                {
1678227825Stheraven                   __err |= ios_base::eofbit;
1679227825Stheraven                   break;
1680227825Stheraven                }
1681227825Stheraven                _CharT __ch = _Traits::to_char_type(__i);
1682227825Stheraven                if (!_Traits::eq(__ch, __zero) && !_Traits::eq(__ch, __one))
1683227825Stheraven                    break;
1684227825Stheraven                __str.push_back(__ch);
1685227825Stheraven                ++__c;
1686227825Stheraven                 __is.rdbuf()->sbumpc();
1687227825Stheraven            }
1688227825Stheraven            __x = bitset<_Size>(__str);
1689227825Stheraven            if (__c == 0)
1690227825Stheraven               __err |= ios_base::failbit;
1691227825Stheraven            __is.setstate(__err);
1692227825Stheraven        }
1693227825Stheraven        else
1694227825Stheraven            __is.setstate(ios_base::failbit);
1695227825Stheraven#ifndef _LIBCPP_NO_EXCEPTIONS
1696227825Stheraven    }
1697227825Stheraven    catch (...)
1698227825Stheraven    {
1699227825Stheraven        __is.__set_badbit_and_consider_rethrow();
1700227825Stheraven    }
1701227825Stheraven#endif  // _LIBCPP_NO_EXCEPTIONS
1702227825Stheraven    return __is;
1703227825Stheraven}
1704227825Stheraven
1705227825Stheravenextern template class basic_istream<char>;
1706227825Stheravenextern template class basic_istream<wchar_t>;
1707227825Stheravenextern template class basic_iostream<char>;
1708227825Stheraven
1709227825Stheraven_LIBCPP_END_NAMESPACE_STD
1710227825Stheraven
1711227825Stheraven#endif  // _LIBCPP_ISTREAM
1712