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