istream revision 278724
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