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