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