17a984708SDavid Chisnall// -*- C++ -*- 27a984708SDavid Chisnall//===--------------------------- istream ----------------------------------===// 37a984708SDavid Chisnall// 47a984708SDavid Chisnall// The LLVM Compiler Infrastructure 57a984708SDavid Chisnall// 67a984708SDavid Chisnall// This file is dual licensed under the MIT and the University of Illinois Open 77a984708SDavid Chisnall// Source Licenses. See LICENSE.TXT for details. 87a984708SDavid Chisnall// 97a984708SDavid Chisnall//===----------------------------------------------------------------------===// 107a984708SDavid Chisnall 117a984708SDavid Chisnall#ifndef _LIBCPP_ISTREAM 127a984708SDavid Chisnall#define _LIBCPP_ISTREAM 137a984708SDavid Chisnall 147a984708SDavid Chisnall/* 157a984708SDavid Chisnall istream synopsis 167a984708SDavid Chisnall 177a984708SDavid Chisnalltemplate <class charT, class traits = char_traits<charT> > 187a984708SDavid Chisnallclass basic_istream 197a984708SDavid Chisnall : virtual public basic_ios<charT,traits> 207a984708SDavid Chisnall{ 217a984708SDavid Chisnallpublic: 227a984708SDavid Chisnall // types (inherited from basic_ios (27.5.4)): 237a984708SDavid Chisnall typedef charT char_type; 247a984708SDavid Chisnall typedef traits traits_type; 257a984708SDavid Chisnall typedef typename traits_type::int_type int_type; 267a984708SDavid Chisnall typedef typename traits_type::pos_type pos_type; 277a984708SDavid Chisnall typedef typename traits_type::off_type off_type; 287a984708SDavid Chisnall 297a984708SDavid Chisnall // 27.7.1.1.1 Constructor/destructor: 307a984708SDavid Chisnall explicit basic_istream(basic_streambuf<char_type, traits_type>* sb); 317a984708SDavid Chisnall basic_istream(basic_istream&& rhs); 327a984708SDavid Chisnall virtual ~basic_istream(); 337a984708SDavid Chisnall 347a984708SDavid Chisnall // 27.7.1.1.2 Assign/swap: 357a984708SDavid Chisnall basic_istream& operator=(basic_istream&& rhs); 367a984708SDavid Chisnall void swap(basic_istream& rhs); 377a984708SDavid Chisnall 387a984708SDavid Chisnall // 27.7.1.1.3 Prefix/suffix: 397a984708SDavid Chisnall class sentry; 407a984708SDavid Chisnall 417a984708SDavid Chisnall // 27.7.1.2 Formatted input: 427a984708SDavid Chisnall basic_istream& operator>>(basic_istream& (*pf)(basic_istream&)); 437a984708SDavid Chisnall basic_istream& operator>>(basic_ios<char_type, traits_type>& 447a984708SDavid Chisnall (*pf)(basic_ios<char_type, traits_type>&)); 457a984708SDavid Chisnall basic_istream& operator>>(ios_base& (*pf)(ios_base&)); 467a984708SDavid Chisnall basic_istream& operator>>(basic_streambuf<char_type, traits_type>* sb); 477a984708SDavid Chisnall basic_istream& operator>>(bool& n); 487a984708SDavid Chisnall basic_istream& operator>>(short& n); 497a984708SDavid Chisnall basic_istream& operator>>(unsigned short& n); 507a984708SDavid Chisnall basic_istream& operator>>(int& n); 517a984708SDavid Chisnall basic_istream& operator>>(unsigned int& n); 527a984708SDavid Chisnall basic_istream& operator>>(long& n); 537a984708SDavid Chisnall basic_istream& operator>>(unsigned long& n); 547a984708SDavid Chisnall basic_istream& operator>>(long long& n); 557a984708SDavid Chisnall basic_istream& operator>>(unsigned long long& n); 567a984708SDavid Chisnall basic_istream& operator>>(float& f); 577a984708SDavid Chisnall basic_istream& operator>>(double& f); 587a984708SDavid Chisnall basic_istream& operator>>(long double& f); 597a984708SDavid Chisnall basic_istream& operator>>(void*& p); 607a984708SDavid Chisnall 617a984708SDavid Chisnall // 27.7.1.3 Unformatted input: 627a984708SDavid Chisnall streamsize gcount() const; 637a984708SDavid Chisnall int_type get(); 647a984708SDavid Chisnall basic_istream& get(char_type& c); 657a984708SDavid Chisnall basic_istream& get(char_type* s, streamsize n); 667a984708SDavid Chisnall basic_istream& get(char_type* s, streamsize n, char_type delim); 677a984708SDavid Chisnall basic_istream& get(basic_streambuf<char_type,traits_type>& sb); 687a984708SDavid Chisnall basic_istream& get(basic_streambuf<char_type,traits_type>& sb, char_type delim); 697a984708SDavid Chisnall 707a984708SDavid Chisnall basic_istream& getline(char_type* s, streamsize n); 717a984708SDavid Chisnall basic_istream& getline(char_type* s, streamsize n, char_type delim); 727a984708SDavid Chisnall 737a984708SDavid Chisnall basic_istream& ignore(streamsize n = 1, int_type delim = traits_type::eof()); 747a984708SDavid Chisnall int_type peek(); 757a984708SDavid Chisnall basic_istream& read (char_type* s, streamsize n); 767a984708SDavid Chisnall streamsize readsome(char_type* s, streamsize n); 777a984708SDavid Chisnall 787a984708SDavid Chisnall basic_istream& putback(char_type c); 797a984708SDavid Chisnall basic_istream& unget(); 807a984708SDavid Chisnall int sync(); 817a984708SDavid Chisnall 827a984708SDavid Chisnall pos_type tellg(); 837a984708SDavid Chisnall basic_istream& seekg(pos_type); 847a984708SDavid Chisnall basic_istream& seekg(off_type, ios_base::seekdir); 85d72607e9SDimitry Andricprotected: 86d72607e9SDimitry Andric basic_istream(const basic_istream& rhs) = delete; 87d72607e9SDimitry Andric basic_istream(basic_istream&& rhs); 88d72607e9SDimitry Andric // 27.7.2.1.2 Assign/swap: 89d72607e9SDimitry Andric basic_istream& operator=(const basic_istream& rhs) = delete; 90d72607e9SDimitry Andric basic_istream& operator=(basic_istream&& rhs); 91d72607e9SDimitry Andric void swap(basic_istream& rhs); 927a984708SDavid Chisnall}; 937a984708SDavid Chisnall 947a984708SDavid Chisnall// 27.7.1.2.3 character extraction templates: 957a984708SDavid Chisnalltemplate<class charT, class traits> 967a984708SDavid Chisnall basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT&); 977a984708SDavid Chisnall 987a984708SDavid Chisnalltemplate<class traits> 997a984708SDavid Chisnall basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char&); 1007a984708SDavid Chisnall 1017a984708SDavid Chisnalltemplate<class traits> 1027a984708SDavid Chisnall basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char&); 1037a984708SDavid Chisnall 1047a984708SDavid Chisnalltemplate<class charT, class traits> 1057a984708SDavid Chisnall basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT*); 1067a984708SDavid Chisnall 1077a984708SDavid Chisnalltemplate<class traits> 1087a984708SDavid Chisnall basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char*); 1097a984708SDavid Chisnall 1107a984708SDavid Chisnalltemplate<class traits> 1117a984708SDavid Chisnall basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char*); 1127a984708SDavid Chisnall 1137a984708SDavid Chisnalltemplate <class charT, class traits> 1147a984708SDavid Chisnall void 1157a984708SDavid Chisnall swap(basic_istream<charT, traits>& x, basic_istream<charT, traits>& y); 1167a984708SDavid Chisnall 1177a984708SDavid Chisnalltypedef basic_istream<char> istream; 1187a984708SDavid Chisnalltypedef basic_istream<wchar_t> wistream; 1197a984708SDavid Chisnall 1207a984708SDavid Chisnalltemplate <class charT, class traits = char_traits<charT> > 1217a984708SDavid Chisnallclass basic_iostream : 1227a984708SDavid Chisnall public basic_istream<charT,traits>, 1237a984708SDavid Chisnall public basic_ostream<charT,traits> 1247a984708SDavid Chisnall{ 1257a984708SDavid Chisnallpublic: 1267a984708SDavid Chisnall // types: 1277a984708SDavid Chisnall typedef charT char_type; 1287a984708SDavid Chisnall typedef traits traits_type; 1297a984708SDavid Chisnall typedef typename traits_type::int_type int_type; 1307a984708SDavid Chisnall typedef typename traits_type::pos_type pos_type; 1317a984708SDavid Chisnall typedef typename traits_type::off_type off_type; 1327a984708SDavid Chisnall 1337a984708SDavid Chisnall // constructor/destructor 1347a984708SDavid Chisnall explicit basic_iostream(basic_streambuf<char_type, traits_type>* sb); 1357a984708SDavid Chisnall basic_iostream(basic_iostream&& rhs); 1367a984708SDavid Chisnall virtual ~basic_iostream(); 1377a984708SDavid Chisnall 1387a984708SDavid Chisnall // assign/swap 1397a984708SDavid Chisnall basic_iostream& operator=(basic_iostream&& rhs); 1407a984708SDavid Chisnall void swap(basic_iostream& rhs); 1417a984708SDavid Chisnall}; 1427a984708SDavid Chisnall 1437a984708SDavid Chisnalltemplate <class charT, class traits> 1447a984708SDavid Chisnall void 1457a984708SDavid Chisnall swap(basic_iostream<charT, traits>& x, basic_iostream<charT, traits>& y); 1467a984708SDavid Chisnall 1477a984708SDavid Chisnalltypedef basic_iostream<char> iostream; 1487a984708SDavid Chisnalltypedef basic_iostream<wchar_t> wiostream; 1497a984708SDavid Chisnall 1507a984708SDavid Chisnalltemplate <class charT, class traits> 1517a984708SDavid Chisnall basic_istream<charT,traits>& 1527a984708SDavid Chisnall ws(basic_istream<charT,traits>& is); 1537a984708SDavid Chisnall 1547a984708SDavid Chisnalltemplate <class charT, class traits, class T> 1557a984708SDavid Chisnall basic_istream<charT, traits>& 1567a984708SDavid Chisnall operator>>(basic_istream<charT, traits>&& is, T& x); 1577a984708SDavid Chisnall 1587a984708SDavid Chisnall} // std 1597a984708SDavid Chisnall 1607a984708SDavid Chisnall*/ 1617a984708SDavid Chisnall 1627a984708SDavid Chisnall#include <__config> 163*b5893f02SDimitry Andric#include <version> 1647a984708SDavid Chisnall#include <ostream> 1657a984708SDavid Chisnall 1667a984708SDavid Chisnall#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1677a984708SDavid Chisnall#pragma GCC system_header 1687a984708SDavid Chisnall#endif 1697a984708SDavid Chisnall 170f9448bf3SDimitry Andric_LIBCPP_PUSH_MACROS 171f9448bf3SDimitry Andric#include <__undef_macros> 172f9448bf3SDimitry Andric 173f9448bf3SDimitry Andric 1747a984708SDavid Chisnall_LIBCPP_BEGIN_NAMESPACE_STD 1757a984708SDavid Chisnall 1767a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 177aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_istream 1787a984708SDavid Chisnall : virtual public basic_ios<_CharT, _Traits> 1797a984708SDavid Chisnall{ 1807a984708SDavid Chisnall streamsize __gc_; 1817a984708SDavid Chisnallpublic: 1827a984708SDavid Chisnall // types (inherited from basic_ios (27.5.4)): 1837a984708SDavid Chisnall typedef _CharT char_type; 1847a984708SDavid Chisnall typedef _Traits traits_type; 1857a984708SDavid Chisnall typedef typename traits_type::int_type int_type; 1867a984708SDavid Chisnall typedef typename traits_type::pos_type pos_type; 1877a984708SDavid Chisnall typedef typename traits_type::off_type off_type; 1887a984708SDavid Chisnall 1897a984708SDavid Chisnall // 27.7.1.1.1 Constructor/destructor: 190*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 191aed8d94eSDimitry Andric explicit basic_istream(basic_streambuf<char_type, traits_type>* __sb) : __gc_(0) 192aed8d94eSDimitry Andric { this->init(__sb); } 1937a984708SDavid Chisnall virtual ~basic_istream(); 1947a984708SDavid Chisnallprotected: 195540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 196aed8d94eSDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 1977a984708SDavid Chisnall basic_istream(basic_istream&& __rhs); 198540d2a8bSDimitry Andric 1997a984708SDavid Chisnall // 27.7.1.1.2 Assign/swap: 200aed8d94eSDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 2017a984708SDavid Chisnall basic_istream& operator=(basic_istream&& __rhs); 2027a984708SDavid Chisnall#endif 203aed8d94eSDimitry Andric 204*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 205aed8d94eSDimitry Andric void swap(basic_istream& __rhs) { 206aed8d94eSDimitry Andric _VSTD::swap(__gc_, __rhs.__gc_); 207aed8d94eSDimitry Andric basic_ios<char_type, traits_type>::swap(__rhs); 208aed8d94eSDimitry Andric } 209d72607e9SDimitry Andric 21080779b37SDimitry Andric#ifndef _LIBCPP_CXX03_LANG 211d72607e9SDimitry Andric basic_istream (const basic_istream& __rhs) = delete; 212d72607e9SDimitry Andric basic_istream& operator=(const basic_istream& __rhs) = delete; 213d72607e9SDimitry Andric#endif 2147a984708SDavid Chisnallpublic: 2157a984708SDavid Chisnall 2167a984708SDavid Chisnall // 27.7.1.1.3 Prefix/suffix: 217aed8d94eSDimitry Andric class _LIBCPP_TEMPLATE_VIS sentry; 2187a984708SDavid Chisnall 2197a984708SDavid Chisnall // 27.7.1.2 Formatted input: 220*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 221aed8d94eSDimitry Andric basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&)) 222aed8d94eSDimitry Andric { return __pf(*this); } 223aed8d94eSDimitry Andric 224*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2257a984708SDavid Chisnall basic_istream& operator>>(basic_ios<char_type, traits_type>& 226aed8d94eSDimitry Andric (*__pf)(basic_ios<char_type, traits_type>&)) 227aed8d94eSDimitry Andric { __pf(*this); return *this; } 228aed8d94eSDimitry Andric 229*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 230aed8d94eSDimitry Andric basic_istream& operator>>(ios_base& (*__pf)(ios_base&)) 231aed8d94eSDimitry Andric { __pf(*this); return *this; } 232aed8d94eSDimitry Andric 2337a984708SDavid Chisnall basic_istream& operator>>(basic_streambuf<char_type, traits_type>* __sb); 2347a984708SDavid Chisnall basic_istream& operator>>(bool& __n); 2357a984708SDavid Chisnall basic_istream& operator>>(short& __n); 2367a984708SDavid Chisnall basic_istream& operator>>(unsigned short& __n); 2377a984708SDavid Chisnall basic_istream& operator>>(int& __n); 2387a984708SDavid Chisnall basic_istream& operator>>(unsigned int& __n); 2397a984708SDavid Chisnall basic_istream& operator>>(long& __n); 2407a984708SDavid Chisnall basic_istream& operator>>(unsigned long& __n); 2417a984708SDavid Chisnall basic_istream& operator>>(long long& __n); 2427a984708SDavid Chisnall basic_istream& operator>>(unsigned long long& __n); 2437a984708SDavid Chisnall basic_istream& operator>>(float& __f); 2447a984708SDavid Chisnall basic_istream& operator>>(double& __f); 2457a984708SDavid Chisnall basic_istream& operator>>(long double& __f); 2467a984708SDavid Chisnall basic_istream& operator>>(void*& __p); 2477a984708SDavid Chisnall 2487a984708SDavid Chisnall // 27.7.1.3 Unformatted input: 2497a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2507a984708SDavid Chisnall streamsize gcount() const {return __gc_;} 2517a984708SDavid Chisnall int_type get(); 252aed8d94eSDimitry Andric 253*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 254aed8d94eSDimitry Andric basic_istream& get(char_type& __c) { 255aed8d94eSDimitry Andric int_type __ch = get(); 256aed8d94eSDimitry Andric if (__ch != traits_type::eof()) 257aed8d94eSDimitry Andric __c = traits_type::to_char_type(__ch); 258aed8d94eSDimitry Andric return *this; 259aed8d94eSDimitry Andric } 260aed8d94eSDimitry Andric 261*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 262aed8d94eSDimitry Andric basic_istream& get(char_type* __s, streamsize __n) 263aed8d94eSDimitry Andric { return get(__s, __n, this->widen('\n')); } 264aed8d94eSDimitry Andric 2657a984708SDavid Chisnall basic_istream& get(char_type* __s, streamsize __n, char_type __dlm); 266aed8d94eSDimitry Andric 267*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 268aed8d94eSDimitry Andric basic_istream& get(basic_streambuf<char_type, traits_type>& __sb) 269aed8d94eSDimitry Andric { return get(__sb, this->widen('\n')); } 270aed8d94eSDimitry Andric 2717a984708SDavid Chisnall basic_istream& get(basic_streambuf<char_type, traits_type>& __sb, char_type __dlm); 2727a984708SDavid Chisnall 273*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 274aed8d94eSDimitry Andric basic_istream& getline(char_type* __s, streamsize __n) 275aed8d94eSDimitry Andric { return getline(__s, __n, this->widen('\n')); } 276aed8d94eSDimitry Andric 2777a984708SDavid Chisnall basic_istream& getline(char_type* __s, streamsize __n, char_type __dlm); 2787a984708SDavid Chisnall 2797a984708SDavid Chisnall basic_istream& ignore(streamsize __n = 1, int_type __dlm = traits_type::eof()); 2807a984708SDavid Chisnall int_type peek(); 2817a984708SDavid Chisnall basic_istream& read (char_type* __s, streamsize __n); 2827a984708SDavid Chisnall streamsize readsome(char_type* __s, streamsize __n); 2837a984708SDavid Chisnall 2847a984708SDavid Chisnall basic_istream& putback(char_type __c); 2857a984708SDavid Chisnall basic_istream& unget(); 2867a984708SDavid Chisnall int sync(); 2877a984708SDavid Chisnall 2887a984708SDavid Chisnall pos_type tellg(); 2897a984708SDavid Chisnall basic_istream& seekg(pos_type __pos); 2907a984708SDavid Chisnall basic_istream& seekg(off_type __off, ios_base::seekdir __dir); 2917a984708SDavid Chisnall}; 2927a984708SDavid Chisnall 2937a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 294aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_istream<_CharT, _Traits>::sentry 2957a984708SDavid Chisnall{ 2967a984708SDavid Chisnall bool __ok_; 2977a984708SDavid Chisnall 2987a984708SDavid Chisnall sentry(const sentry&); // = delete; 2997a984708SDavid Chisnall sentry& operator=(const sentry&); // = delete; 3007a984708SDavid Chisnall 3017a984708SDavid Chisnallpublic: 3027a984708SDavid Chisnall explicit sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false); 3037a984708SDavid Chisnall// ~sentry() = default; 3047a984708SDavid Chisnall 3057a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 30694e3ee44SDavid Chisnall _LIBCPP_EXPLICIT 3077a984708SDavid Chisnall operator bool() const {return __ok_;} 3087a984708SDavid Chisnall}; 3097a984708SDavid Chisnall 3107a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 3117a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::sentry::sentry(basic_istream<_CharT, _Traits>& __is, 3127a984708SDavid Chisnall bool __noskipws) 3137a984708SDavid Chisnall : __ok_(false) 3147a984708SDavid Chisnall{ 3157a984708SDavid Chisnall if (__is.good()) 3167a984708SDavid Chisnall { 3177a984708SDavid Chisnall if (__is.tie()) 3187a984708SDavid Chisnall __is.tie()->flush(); 3197a984708SDavid Chisnall if (!__noskipws && (__is.flags() & ios_base::skipws)) 3207a984708SDavid Chisnall { 32194e3ee44SDavid Chisnall typedef istreambuf_iterator<_CharT, _Traits> _Ip; 3227a984708SDavid Chisnall const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()); 32394e3ee44SDavid Chisnall _Ip __i(__is); 32494e3ee44SDavid Chisnall _Ip __eof; 3257a984708SDavid Chisnall for (; __i != __eof; ++__i) 3267a984708SDavid Chisnall if (!__ct.is(__ct.space, *__i)) 3277a984708SDavid Chisnall break; 3287a984708SDavid Chisnall if (__i == __eof) 3297a984708SDavid Chisnall __is.setstate(ios_base::failbit | ios_base::eofbit); 3307a984708SDavid Chisnall } 3317a984708SDavid Chisnall __ok_ = __is.good(); 3327a984708SDavid Chisnall } 3337a984708SDavid Chisnall else 3347a984708SDavid Chisnall __is.setstate(ios_base::failbit); 3357a984708SDavid Chisnall} 3367a984708SDavid Chisnall 337540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 3387a984708SDavid Chisnall 3397a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 3407a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::basic_istream(basic_istream&& __rhs) 3417a984708SDavid Chisnall : __gc_(__rhs.__gc_) 3427a984708SDavid Chisnall{ 3437a984708SDavid Chisnall __rhs.__gc_ = 0; 3447a984708SDavid Chisnall this->move(__rhs); 3457a984708SDavid Chisnall} 3467a984708SDavid Chisnall 3477a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 3487a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 3497a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator=(basic_istream&& __rhs) 3507a984708SDavid Chisnall{ 3517a984708SDavid Chisnall swap(__rhs); 3527a984708SDavid Chisnall return *this; 3537a984708SDavid Chisnall} 3547a984708SDavid Chisnall 355540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 3567a984708SDavid Chisnall 3577a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 3587a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::~basic_istream() 3597a984708SDavid Chisnall{ 3607a984708SDavid Chisnall} 3617a984708SDavid Chisnall 3624ba319b5SDimitry Andrictemplate <class _Tp, class _CharT, class _Traits> 3634ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY 3647a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 3654ba319b5SDimitry Andric__input_arithmetic(basic_istream<_CharT, _Traits>& __is, _Tp& __n) { 3667a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 3677a984708SDavid Chisnall try 3687a984708SDavid Chisnall { 3697a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 3704ba319b5SDimitry Andric typename basic_istream<_CharT, _Traits>::sentry __s(__is); 3717a984708SDavid Chisnall if (__s) 3727a984708SDavid Chisnall { 3734ba319b5SDimitry Andric typedef istreambuf_iterator<_CharT, _Traits> _Ip; 3744ba319b5SDimitry Andric typedef num_get<_CharT, _Ip> _Fp; 3757a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 3764ba319b5SDimitry Andric use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __err, __n); 3774ba319b5SDimitry Andric __is.setstate(__err); 3787a984708SDavid Chisnall } 3797a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 3807a984708SDavid Chisnall } 3817a984708SDavid Chisnall catch (...) 3827a984708SDavid Chisnall { 3834ba319b5SDimitry Andric __is.__set_badbit_and_consider_rethrow(); 3847a984708SDavid Chisnall } 3857a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 3864ba319b5SDimitry Andric return __is; 3874ba319b5SDimitry Andric} 3884ba319b5SDimitry Andric 3894ba319b5SDimitry Andrictemplate <class _CharT, class _Traits> 3904ba319b5SDimitry Andricbasic_istream<_CharT, _Traits>& 3914ba319b5SDimitry Andricbasic_istream<_CharT, _Traits>::operator>>(unsigned short& __n) 3924ba319b5SDimitry Andric{ 3934ba319b5SDimitry Andric return _VSTD::__input_arithmetic<unsigned short>(*this, __n); 3947a984708SDavid Chisnall} 3957a984708SDavid Chisnall 3967a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 3977a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 3987a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(unsigned int& __n) 3997a984708SDavid Chisnall{ 4004ba319b5SDimitry Andric return _VSTD::__input_arithmetic<unsigned int>(*this, __n); 4017a984708SDavid Chisnall} 4027a984708SDavid Chisnall 4037a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4047a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4057a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(long& __n) 4067a984708SDavid Chisnall{ 4074ba319b5SDimitry Andric return _VSTD::__input_arithmetic<long>(*this, __n); 4087a984708SDavid Chisnall} 4097a984708SDavid Chisnall 4107a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4117a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4127a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(unsigned long& __n) 4137a984708SDavid Chisnall{ 4144ba319b5SDimitry Andric return _VSTD::__input_arithmetic<unsigned long>(*this, __n); 4157a984708SDavid Chisnall} 4167a984708SDavid Chisnall 4177a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4187a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4197a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(long long& __n) 4207a984708SDavid Chisnall{ 4214ba319b5SDimitry Andric return _VSTD::__input_arithmetic<long long>(*this, __n); 4227a984708SDavid Chisnall} 4237a984708SDavid Chisnall 4247a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4257a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4267a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(unsigned long long& __n) 4277a984708SDavid Chisnall{ 4284ba319b5SDimitry Andric return _VSTD::__input_arithmetic<unsigned long long>(*this, __n); 4297a984708SDavid Chisnall} 4307a984708SDavid Chisnall 4317a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4327a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4337a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(float& __n) 4347a984708SDavid Chisnall{ 4354ba319b5SDimitry Andric return _VSTD::__input_arithmetic<float>(*this, __n); 4367a984708SDavid Chisnall} 4377a984708SDavid Chisnall 4387a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4397a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4407a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(double& __n) 4417a984708SDavid Chisnall{ 4424ba319b5SDimitry Andric return _VSTD::__input_arithmetic<double>(*this, __n); 4437a984708SDavid Chisnall} 4447a984708SDavid Chisnall 4457a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4467a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4477a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(long double& __n) 4487a984708SDavid Chisnall{ 4494ba319b5SDimitry Andric return _VSTD::__input_arithmetic<long double>(*this, __n); 4507a984708SDavid Chisnall} 4517a984708SDavid Chisnall 4527a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4537a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4547a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(bool& __n) 4557a984708SDavid Chisnall{ 4564ba319b5SDimitry Andric return _VSTD::__input_arithmetic<bool>(*this, __n); 4577a984708SDavid Chisnall} 4587a984708SDavid Chisnall 4597a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 4607a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 4617a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(void*& __n) 4627a984708SDavid Chisnall{ 4634ba319b5SDimitry Andric return _VSTD::__input_arithmetic<void*>(*this, __n); 4644ba319b5SDimitry Andric} 4654ba319b5SDimitry Andric 4664ba319b5SDimitry Andrictemplate <class _Tp, class _CharT, class _Traits> 4674ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY 4684ba319b5SDimitry Andricbasic_istream<_CharT, _Traits>& 4694ba319b5SDimitry Andric__input_arithmetic_with_numeric_limits(basic_istream<_CharT, _Traits>& __is, _Tp& __n) { 4707a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 4717a984708SDavid Chisnall try 4727a984708SDavid Chisnall { 4737a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 4744ba319b5SDimitry Andric typename basic_istream<_CharT, _Traits>::sentry __s(__is); 4757a984708SDavid Chisnall if (__s) 4767a984708SDavid Chisnall { 4774ba319b5SDimitry Andric typedef istreambuf_iterator<_CharT, _Traits> _Ip; 4784ba319b5SDimitry Andric typedef num_get<_CharT, _Ip> _Fp; 4797a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 4804ba319b5SDimitry Andric long __temp; 4814ba319b5SDimitry Andric use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __err, __temp); 4824ba319b5SDimitry Andric if (__temp < numeric_limits<_Tp>::min()) 4834ba319b5SDimitry Andric { 4844ba319b5SDimitry Andric __err |= ios_base::failbit; 4854ba319b5SDimitry Andric __n = numeric_limits<_Tp>::min(); 4864ba319b5SDimitry Andric } 4874ba319b5SDimitry Andric else if (__temp > numeric_limits<_Tp>::max()) 4884ba319b5SDimitry Andric { 4894ba319b5SDimitry Andric __err |= ios_base::failbit; 4904ba319b5SDimitry Andric __n = numeric_limits<_Tp>::max(); 4914ba319b5SDimitry Andric } 4924ba319b5SDimitry Andric else 4934ba319b5SDimitry Andric __n = static_cast<_Tp>(__temp); 4944ba319b5SDimitry Andric __is.setstate(__err); 4957a984708SDavid Chisnall } 4967a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 4977a984708SDavid Chisnall } 4987a984708SDavid Chisnall catch (...) 4997a984708SDavid Chisnall { 5004ba319b5SDimitry Andric __is.__set_badbit_and_consider_rethrow(); 5017a984708SDavid Chisnall } 5027a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 5034ba319b5SDimitry Andric return __is; 5047a984708SDavid Chisnall} 5057a984708SDavid Chisnall 5067a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 5077a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 5087a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(short& __n) 5097a984708SDavid Chisnall{ 5104ba319b5SDimitry Andric return _VSTD::__input_arithmetic_with_numeric_limits<short>(*this, __n); 5117a984708SDavid Chisnall} 5127a984708SDavid Chisnall 5137a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 5147a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 5157a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(int& __n) 5167a984708SDavid Chisnall{ 5174ba319b5SDimitry Andric return _VSTD::__input_arithmetic_with_numeric_limits<int>(*this, __n); 5187a984708SDavid Chisnall} 5197a984708SDavid Chisnall 5207a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 521*b5893f02SDimitry Andric_LIBCPP_INLINE_VISIBILITY 5227a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 523*b5893f02SDimitry Andric__input_c_string(basic_istream<_CharT, _Traits>& __is, _CharT* __p, size_t __n) 5247a984708SDavid Chisnall{ 5257a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 5267a984708SDavid Chisnall try 5277a984708SDavid Chisnall { 5287a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 5297a984708SDavid Chisnall typename basic_istream<_CharT, _Traits>::sentry __sen(__is); 5307a984708SDavid Chisnall if (__sen) 5317a984708SDavid Chisnall { 532*b5893f02SDimitry Andric auto __s = __p; 5337a984708SDavid Chisnall const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()); 5347a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 535*b5893f02SDimitry Andric while (__s != __p + (__n-1)) 5367a984708SDavid Chisnall { 5377a984708SDavid Chisnall typename _Traits::int_type __i = __is.rdbuf()->sgetc(); 5387a984708SDavid Chisnall if (_Traits::eq_int_type(__i, _Traits::eof())) 5397a984708SDavid Chisnall { 5407a984708SDavid Chisnall __err |= ios_base::eofbit; 5417a984708SDavid Chisnall break; 5427a984708SDavid Chisnall } 5437a984708SDavid Chisnall _CharT __ch = _Traits::to_char_type(__i); 5447a984708SDavid Chisnall if (__ct.is(__ct.space, __ch)) 5457a984708SDavid Chisnall break; 5467a984708SDavid Chisnall *__s++ = __ch; 5477a984708SDavid Chisnall __is.rdbuf()->sbumpc(); 5487a984708SDavid Chisnall } 5497a984708SDavid Chisnall *__s = _CharT(); 5507a984708SDavid Chisnall __is.width(0); 551*b5893f02SDimitry Andric if (__s == __p) 5527a984708SDavid Chisnall __err |= ios_base::failbit; 5537a984708SDavid Chisnall __is.setstate(__err); 5547a984708SDavid Chisnall } 5557a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 5567a984708SDavid Chisnall } 5577a984708SDavid Chisnall catch (...) 5587a984708SDavid Chisnall { 5597a984708SDavid Chisnall __is.__set_badbit_and_consider_rethrow(); 5607a984708SDavid Chisnall } 5617a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 5627a984708SDavid Chisnall return __is; 5637a984708SDavid Chisnall} 5647a984708SDavid Chisnall 565*b5893f02SDimitry Andric#if _LIBCPP_STD_VER > 17 566*b5893f02SDimitry Andric 567*b5893f02SDimitry Andrictemplate<class _CharT, class _Traits, size_t _Np> 568*b5893f02SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 569*b5893f02SDimitry Andricbasic_istream<_CharT, _Traits>& 570*b5893f02SDimitry Andricoperator>>(basic_istream<_CharT, _Traits>& __is, _CharT (&__buf)[_Np]) 571*b5893f02SDimitry Andric{ 572*b5893f02SDimitry Andric auto __n = _Np; 573*b5893f02SDimitry Andric if (__is.width() > 0) 574*b5893f02SDimitry Andric __n = _VSTD::min(size_t(__is.width()), _Np); 575*b5893f02SDimitry Andric return _VSTD::__input_c_string(__is, __buf, __n); 576*b5893f02SDimitry Andric} 577*b5893f02SDimitry Andric 578*b5893f02SDimitry Andrictemplate<class _Traits, size_t _Np> 579*b5893f02SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 580*b5893f02SDimitry Andricbasic_istream<char, _Traits>& 581*b5893f02SDimitry Andricoperator>>(basic_istream<char, _Traits>& __is, unsigned char (&__buf)[_Np]) 582*b5893f02SDimitry Andric{ 583*b5893f02SDimitry Andric return __is >> (char(&)[_Np])__buf; 584*b5893f02SDimitry Andric} 585*b5893f02SDimitry Andric 586*b5893f02SDimitry Andrictemplate<class _Traits, size_t _Np> 587*b5893f02SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 588*b5893f02SDimitry Andricbasic_istream<char, _Traits>& 589*b5893f02SDimitry Andricoperator>>(basic_istream<char, _Traits>& __is, signed char (&__buf)[_Np]) 590*b5893f02SDimitry Andric{ 591*b5893f02SDimitry Andric return __is >> (char(&)[_Np])__buf; 592*b5893f02SDimitry Andric} 593*b5893f02SDimitry Andric 594*b5893f02SDimitry Andric#else 595*b5893f02SDimitry Andric 596*b5893f02SDimitry Andrictemplate<class _CharT, class _Traits> 597*b5893f02SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 598*b5893f02SDimitry Andricbasic_istream<_CharT, _Traits>& 599*b5893f02SDimitry Andricoperator>>(basic_istream<_CharT, _Traits>& __is, _CharT* __s) 600*b5893f02SDimitry Andric{ 601*b5893f02SDimitry Andric streamsize __n = __is.width(); 602*b5893f02SDimitry Andric if (__n <= 0) 603*b5893f02SDimitry Andric __n = numeric_limits<streamsize>::max() / sizeof(_CharT) - 1; 604*b5893f02SDimitry Andric return _VSTD::__input_c_string(__is, __s, size_t(__n)); 605*b5893f02SDimitry Andric} 606*b5893f02SDimitry Andric 6077a984708SDavid Chisnalltemplate<class _Traits> 6087a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 6097a984708SDavid Chisnallbasic_istream<char, _Traits>& 6107a984708SDavid Chisnalloperator>>(basic_istream<char, _Traits>& __is, unsigned char* __s) 6117a984708SDavid Chisnall{ 6127a984708SDavid Chisnall return __is >> (char*)__s; 6137a984708SDavid Chisnall} 6147a984708SDavid Chisnall 6157a984708SDavid Chisnalltemplate<class _Traits> 6167a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 6177a984708SDavid Chisnallbasic_istream<char, _Traits>& 6187a984708SDavid Chisnalloperator>>(basic_istream<char, _Traits>& __is, signed char* __s) 6197a984708SDavid Chisnall{ 6207a984708SDavid Chisnall return __is >> (char*)__s; 6217a984708SDavid Chisnall} 6227a984708SDavid Chisnall 623*b5893f02SDimitry Andric#endif // _LIBCPP_STD_VER > 17 624*b5893f02SDimitry Andric 6257a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 6267a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 6277a984708SDavid Chisnalloperator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c) 6287a984708SDavid Chisnall{ 6297a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 6307a984708SDavid Chisnall try 6317a984708SDavid Chisnall { 6327a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 6337a984708SDavid Chisnall typename basic_istream<_CharT, _Traits>::sentry __sen(__is); 6347a984708SDavid Chisnall if (__sen) 6357a984708SDavid Chisnall { 6367a984708SDavid Chisnall typename _Traits::int_type __i = __is.rdbuf()->sbumpc(); 6377a984708SDavid Chisnall if (_Traits::eq_int_type(__i, _Traits::eof())) 6387a984708SDavid Chisnall __is.setstate(ios_base::eofbit | ios_base::failbit); 6397a984708SDavid Chisnall else 6407a984708SDavid Chisnall __c = _Traits::to_char_type(__i); 6417a984708SDavid Chisnall } 6427a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 6437a984708SDavid Chisnall } 6447a984708SDavid Chisnall catch (...) 6457a984708SDavid Chisnall { 6467a984708SDavid Chisnall __is.__set_badbit_and_consider_rethrow(); 6477a984708SDavid Chisnall } 6487a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 6497a984708SDavid Chisnall return __is; 6507a984708SDavid Chisnall} 6517a984708SDavid Chisnall 6527a984708SDavid Chisnalltemplate<class _Traits> 6537a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 6547a984708SDavid Chisnallbasic_istream<char, _Traits>& 6557a984708SDavid Chisnalloperator>>(basic_istream<char, _Traits>& __is, unsigned char& __c) 6567a984708SDavid Chisnall{ 6577a984708SDavid Chisnall return __is >> (char&)__c; 6587a984708SDavid Chisnall} 6597a984708SDavid Chisnall 6607a984708SDavid Chisnalltemplate<class _Traits> 6617a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 6627a984708SDavid Chisnallbasic_istream<char, _Traits>& 6637a984708SDavid Chisnalloperator>>(basic_istream<char, _Traits>& __is, signed char& __c) 6647a984708SDavid Chisnall{ 6657a984708SDavid Chisnall return __is >> (char&)__c; 6667a984708SDavid Chisnall} 6677a984708SDavid Chisnall 6687a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 6697a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 6707a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::operator>>(basic_streambuf<char_type, traits_type>* __sb) 6717a984708SDavid Chisnall{ 6727a984708SDavid Chisnall __gc_ = 0; 6737a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 6747a984708SDavid Chisnall try 6757a984708SDavid Chisnall { 6767a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 6777a984708SDavid Chisnall sentry __s(*this, true); 6787a984708SDavid Chisnall if (__s) 6797a984708SDavid Chisnall { 6807a984708SDavid Chisnall if (__sb) 6817a984708SDavid Chisnall { 6827a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 6837a984708SDavid Chisnall try 6847a984708SDavid Chisnall { 6857a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 6867a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 6877a984708SDavid Chisnall while (true) 6887a984708SDavid Chisnall { 6897a984708SDavid Chisnall typename traits_type::int_type __i = this->rdbuf()->sgetc(); 6907a984708SDavid Chisnall if (traits_type::eq_int_type(__i, _Traits::eof())) 6917a984708SDavid Chisnall { 6927a984708SDavid Chisnall __err |= ios_base::eofbit; 6937a984708SDavid Chisnall break; 6947a984708SDavid Chisnall } 6957a984708SDavid Chisnall if (traits_type::eq_int_type( 6967a984708SDavid Chisnall __sb->sputc(traits_type::to_char_type(__i)), 6977a984708SDavid Chisnall traits_type::eof())) 6987a984708SDavid Chisnall break; 6997a984708SDavid Chisnall ++__gc_; 7007a984708SDavid Chisnall this->rdbuf()->sbumpc(); 7017a984708SDavid Chisnall } 7027a984708SDavid Chisnall if (__gc_ == 0) 7037a984708SDavid Chisnall __err |= ios_base::failbit; 7047a984708SDavid Chisnall this->setstate(__err); 7057a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 7067a984708SDavid Chisnall } 7077a984708SDavid Chisnall catch (...) 7087a984708SDavid Chisnall { 7097a984708SDavid Chisnall if (__gc_ == 0) 7107a984708SDavid Chisnall this->__set_failbit_and_consider_rethrow(); 7117a984708SDavid Chisnall } 7127a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 7137a984708SDavid Chisnall } 7147a984708SDavid Chisnall else 7157a984708SDavid Chisnall this->setstate(ios_base::failbit); 7167a984708SDavid Chisnall } 7177a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 7187a984708SDavid Chisnall } 7197a984708SDavid Chisnall catch (...) 7207a984708SDavid Chisnall { 7217a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 7227a984708SDavid Chisnall } 7237a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 7247a984708SDavid Chisnall return *this; 7257a984708SDavid Chisnall} 7267a984708SDavid Chisnall 7277a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 7287a984708SDavid Chisnalltypename basic_istream<_CharT, _Traits>::int_type 7297a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::get() 7307a984708SDavid Chisnall{ 7317a984708SDavid Chisnall __gc_ = 0; 7327a984708SDavid Chisnall int_type __r = traits_type::eof(); 7337a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 7347a984708SDavid Chisnall try 7357a984708SDavid Chisnall { 7367a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 7377a984708SDavid Chisnall sentry __s(*this, true); 7387a984708SDavid Chisnall if (__s) 7397a984708SDavid Chisnall { 7407a984708SDavid Chisnall __r = this->rdbuf()->sbumpc(); 7417a984708SDavid Chisnall if (traits_type::eq_int_type(__r, traits_type::eof())) 7427a984708SDavid Chisnall this->setstate(ios_base::failbit | ios_base::eofbit); 7437a984708SDavid Chisnall else 7447a984708SDavid Chisnall __gc_ = 1; 7457a984708SDavid Chisnall } 7467a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 7477a984708SDavid Chisnall } 7487a984708SDavid Chisnall catch (...) 7497a984708SDavid Chisnall { 7507a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 7517a984708SDavid Chisnall } 7527a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 7537a984708SDavid Chisnall return __r; 7547a984708SDavid Chisnall} 7557a984708SDavid Chisnall 7567a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 7577a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 7587a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n, char_type __dlm) 7597a984708SDavid Chisnall{ 7607a984708SDavid Chisnall __gc_ = 0; 7617a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 7627a984708SDavid Chisnall try 7637a984708SDavid Chisnall { 7647a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 7657a984708SDavid Chisnall sentry __sen(*this, true); 7667a984708SDavid Chisnall if (__sen) 7677a984708SDavid Chisnall { 7687a984708SDavid Chisnall if (__n > 0) 7697a984708SDavid Chisnall { 7707a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 7717a984708SDavid Chisnall while (__gc_ < __n-1) 7727a984708SDavid Chisnall { 7737a984708SDavid Chisnall int_type __i = this->rdbuf()->sgetc(); 7747a984708SDavid Chisnall if (traits_type::eq_int_type(__i, traits_type::eof())) 7757a984708SDavid Chisnall { 7767a984708SDavid Chisnall __err |= ios_base::eofbit; 7777a984708SDavid Chisnall break; 7787a984708SDavid Chisnall } 7797a984708SDavid Chisnall char_type __ch = traits_type::to_char_type(__i); 7807a984708SDavid Chisnall if (traits_type::eq(__ch, __dlm)) 7817a984708SDavid Chisnall break; 7827a984708SDavid Chisnall *__s++ = __ch; 7837a984708SDavid Chisnall ++__gc_; 7847a984708SDavid Chisnall this->rdbuf()->sbumpc(); 7857a984708SDavid Chisnall } 7867a984708SDavid Chisnall if (__gc_ == 0) 7877a984708SDavid Chisnall __err |= ios_base::failbit; 7887a984708SDavid Chisnall this->setstate(__err); 7897a984708SDavid Chisnall } 7907a984708SDavid Chisnall else 7917a984708SDavid Chisnall this->setstate(ios_base::failbit); 7927a984708SDavid Chisnall } 7934ba319b5SDimitry Andric if (__n > 0) 7944ba319b5SDimitry Andric *__s = char_type(); 7957a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 7967a984708SDavid Chisnall } 7977a984708SDavid Chisnall catch (...) 7987a984708SDavid Chisnall { 7994ba319b5SDimitry Andric if (__n > 0) 8004ba319b5SDimitry Andric *__s = char_type(); 8017a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 8027a984708SDavid Chisnall } 8037a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 8047a984708SDavid Chisnall return *this; 8057a984708SDavid Chisnall} 8067a984708SDavid Chisnall 8077a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 8087a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 8097a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __sb, 8107a984708SDavid Chisnall char_type __dlm) 8117a984708SDavid Chisnall{ 8127a984708SDavid Chisnall __gc_ = 0; 8137a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 8147a984708SDavid Chisnall try 8157a984708SDavid Chisnall { 8167a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 8177a984708SDavid Chisnall sentry __sen(*this, true); 8187a984708SDavid Chisnall if (__sen) 8197a984708SDavid Chisnall { 8207a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 8217a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 8227a984708SDavid Chisnall try 8237a984708SDavid Chisnall { 8247a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 8257a984708SDavid Chisnall while (true) 8267a984708SDavid Chisnall { 8277a984708SDavid Chisnall typename traits_type::int_type __i = this->rdbuf()->sgetc(); 8287a984708SDavid Chisnall if (traits_type::eq_int_type(__i, traits_type::eof())) 8297a984708SDavid Chisnall { 8307a984708SDavid Chisnall __err |= ios_base::eofbit; 8317a984708SDavid Chisnall break; 8327a984708SDavid Chisnall } 8337a984708SDavid Chisnall char_type __ch = traits_type::to_char_type(__i); 8347a984708SDavid Chisnall if (traits_type::eq(__ch, __dlm)) 8357a984708SDavid Chisnall break; 8367a984708SDavid Chisnall if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type::eof())) 8377a984708SDavid Chisnall break; 8387a984708SDavid Chisnall ++__gc_; 8397a984708SDavid Chisnall this->rdbuf()->sbumpc(); 8407a984708SDavid Chisnall } 8417a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 8427a984708SDavid Chisnall } 8437a984708SDavid Chisnall catch (...) 8447a984708SDavid Chisnall { 8457a984708SDavid Chisnall } 8467a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 8477a984708SDavid Chisnall if (__gc_ == 0) 8487a984708SDavid Chisnall __err |= ios_base::failbit; 8497a984708SDavid Chisnall this->setstate(__err); 8507a984708SDavid Chisnall } 8517a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 8527a984708SDavid Chisnall } 8537a984708SDavid Chisnall catch (...) 8547a984708SDavid Chisnall { 8557a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 8567a984708SDavid Chisnall } 8577a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 8587a984708SDavid Chisnall return *this; 8597a984708SDavid Chisnall} 8607a984708SDavid Chisnall 8617a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 8627a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 8637a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_type __dlm) 8647a984708SDavid Chisnall{ 8657a984708SDavid Chisnall __gc_ = 0; 8667a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 8677a984708SDavid Chisnall try 8687a984708SDavid Chisnall { 8697a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 8707a984708SDavid Chisnall sentry __sen(*this, true); 8717a984708SDavid Chisnall if (__sen) 8727a984708SDavid Chisnall { 8737a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 8747a984708SDavid Chisnall while (true) 8757a984708SDavid Chisnall { 8767a984708SDavid Chisnall typename traits_type::int_type __i = this->rdbuf()->sgetc(); 8777a984708SDavid Chisnall if (traits_type::eq_int_type(__i, traits_type::eof())) 8787a984708SDavid Chisnall { 8797a984708SDavid Chisnall __err |= ios_base::eofbit; 8807a984708SDavid Chisnall break; 8817a984708SDavid Chisnall } 8827a984708SDavid Chisnall char_type __ch = traits_type::to_char_type(__i); 8837a984708SDavid Chisnall if (traits_type::eq(__ch, __dlm)) 8847a984708SDavid Chisnall { 8857a984708SDavid Chisnall this->rdbuf()->sbumpc(); 8867a984708SDavid Chisnall ++__gc_; 8877a984708SDavid Chisnall break; 8887a984708SDavid Chisnall } 8897a984708SDavid Chisnall if (__gc_ >= __n-1) 8907a984708SDavid Chisnall { 8917a984708SDavid Chisnall __err |= ios_base::failbit; 8927a984708SDavid Chisnall break; 8937a984708SDavid Chisnall } 8947a984708SDavid Chisnall *__s++ = __ch; 8957a984708SDavid Chisnall this->rdbuf()->sbumpc(); 8967a984708SDavid Chisnall ++__gc_; 8977a984708SDavid Chisnall } 8987a984708SDavid Chisnall if (__gc_ == 0) 8997a984708SDavid Chisnall __err |= ios_base::failbit; 9007a984708SDavid Chisnall this->setstate(__err); 9017a984708SDavid Chisnall } 902b2c7081bSDimitry Andric if (__n > 0) 903b2c7081bSDimitry Andric *__s = char_type(); 9047a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 9057a984708SDavid Chisnall } 9067a984708SDavid Chisnall catch (...) 9077a984708SDavid Chisnall { 908b2c7081bSDimitry Andric if (__n > 0) 909b2c7081bSDimitry Andric *__s = char_type(); 9107a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 9117a984708SDavid Chisnall } 9127a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 9137a984708SDavid Chisnall return *this; 9147a984708SDavid Chisnall} 9157a984708SDavid Chisnall 9167a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 9177a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 9187a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::ignore(streamsize __n, int_type __dlm) 9197a984708SDavid Chisnall{ 9207a984708SDavid Chisnall __gc_ = 0; 9217a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 9227a984708SDavid Chisnall try 9237a984708SDavid Chisnall { 9247a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 9257a984708SDavid Chisnall sentry __sen(*this, true); 9267a984708SDavid Chisnall if (__sen) 9277a984708SDavid Chisnall { 9287a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 9297a984708SDavid Chisnall if (__n == numeric_limits<streamsize>::max()) 9307a984708SDavid Chisnall { 9317a984708SDavid Chisnall while (true) 9327a984708SDavid Chisnall { 9337a984708SDavid Chisnall typename traits_type::int_type __i = this->rdbuf()->sbumpc(); 9347a984708SDavid Chisnall if (traits_type::eq_int_type(__i, traits_type::eof())) 9357a984708SDavid Chisnall { 9367a984708SDavid Chisnall __err |= ios_base::eofbit; 9377a984708SDavid Chisnall break; 9387a984708SDavid Chisnall } 9397a984708SDavid Chisnall ++__gc_; 9404bab9fd9SDavid Chisnall if (traits_type::eq_int_type(__i, __dlm)) 9417a984708SDavid Chisnall break; 9427a984708SDavid Chisnall } 9437a984708SDavid Chisnall } 9447a984708SDavid Chisnall else 9457a984708SDavid Chisnall { 9467a984708SDavid Chisnall while (__gc_ < __n) 9477a984708SDavid Chisnall { 9487a984708SDavid Chisnall typename traits_type::int_type __i = this->rdbuf()->sbumpc(); 9497a984708SDavid Chisnall if (traits_type::eq_int_type(__i, traits_type::eof())) 9507a984708SDavid Chisnall { 9517a984708SDavid Chisnall __err |= ios_base::eofbit; 9527a984708SDavid Chisnall break; 9537a984708SDavid Chisnall } 9547a984708SDavid Chisnall ++__gc_; 9554bab9fd9SDavid Chisnall if (traits_type::eq_int_type(__i, __dlm)) 9567a984708SDavid Chisnall break; 9577a984708SDavid Chisnall } 9587a984708SDavid Chisnall } 9597a984708SDavid Chisnall this->setstate(__err); 9607a984708SDavid Chisnall } 9617a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 9627a984708SDavid Chisnall } 9637a984708SDavid Chisnall catch (...) 9647a984708SDavid Chisnall { 9657a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 9667a984708SDavid Chisnall } 9677a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 9687a984708SDavid Chisnall return *this; 9697a984708SDavid Chisnall} 9707a984708SDavid Chisnall 9717a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 9727a984708SDavid Chisnalltypename basic_istream<_CharT, _Traits>::int_type 9737a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::peek() 9747a984708SDavid Chisnall{ 9757a984708SDavid Chisnall __gc_ = 0; 9767a984708SDavid Chisnall int_type __r = traits_type::eof(); 9777a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 9787a984708SDavid Chisnall try 9797a984708SDavid Chisnall { 9807a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 9817a984708SDavid Chisnall sentry __sen(*this, true); 9827a984708SDavid Chisnall if (__sen) 9831e0896acSDavid Chisnall { 9847a984708SDavid Chisnall __r = this->rdbuf()->sgetc(); 9851e0896acSDavid Chisnall if (traits_type::eq_int_type(__r, traits_type::eof())) 9861e0896acSDavid Chisnall this->setstate(ios_base::eofbit); 9871e0896acSDavid Chisnall } 9887a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 9897a984708SDavid Chisnall } 9907a984708SDavid Chisnall catch (...) 9917a984708SDavid Chisnall { 9927a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 9937a984708SDavid Chisnall } 9947a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 9957a984708SDavid Chisnall return __r; 9967a984708SDavid Chisnall} 9977a984708SDavid Chisnall 9987a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 9997a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 10007a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::read(char_type* __s, streamsize __n) 10017a984708SDavid Chisnall{ 10027a984708SDavid Chisnall __gc_ = 0; 10037a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 10047a984708SDavid Chisnall try 10057a984708SDavid Chisnall { 10067a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 10077a984708SDavid Chisnall sentry __sen(*this, true); 10087a984708SDavid Chisnall if (__sen) 10097a984708SDavid Chisnall { 10101bf9f7c1SDimitry Andric __gc_ = this->rdbuf()->sgetn(__s, __n); 10111bf9f7c1SDimitry Andric if (__gc_ != __n) 10127a984708SDavid Chisnall this->setstate(ios_base::failbit | ios_base::eofbit); 10137a984708SDavid Chisnall } 10147a984708SDavid Chisnall else 10157a984708SDavid Chisnall this->setstate(ios_base::failbit); 10167a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 10177a984708SDavid Chisnall } 10187a984708SDavid Chisnall catch (...) 10197a984708SDavid Chisnall { 10207a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 10217a984708SDavid Chisnall } 10227a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 10237a984708SDavid Chisnall return *this; 10247a984708SDavid Chisnall} 10257a984708SDavid Chisnall 10267a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 10277a984708SDavid Chisnallstreamsize 10287a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::readsome(char_type* __s, streamsize __n) 10297a984708SDavid Chisnall{ 1030cfdf2879SDavid Chisnall __gc_ = 0; 10317c82a1ecSDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 10327c82a1ecSDimitry Andric try 10337c82a1ecSDimitry Andric { 10347c82a1ecSDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 10357c82a1ecSDimitry Andric sentry __sen(*this, true); 10367c82a1ecSDimitry Andric if (__sen) 10377c82a1ecSDimitry Andric { 10387a984708SDavid Chisnall streamsize __c = this->rdbuf()->in_avail(); 10397a984708SDavid Chisnall switch (__c) 10407a984708SDavid Chisnall { 10417a984708SDavid Chisnall case -1: 10427a984708SDavid Chisnall this->setstate(ios_base::eofbit); 10437a984708SDavid Chisnall break; 10447a984708SDavid Chisnall case 0: 10457a984708SDavid Chisnall break; 10467a984708SDavid Chisnall default: 10477a984708SDavid Chisnall read(__s, _VSTD::min(__c, __n)); 10487a984708SDavid Chisnall break; 10497a984708SDavid Chisnall } 10507c82a1ecSDimitry Andric } 10517c82a1ecSDimitry Andric else 10527c82a1ecSDimitry Andric this->setstate(ios_base::failbit); 10537c82a1ecSDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 10547c82a1ecSDimitry Andric } 10557c82a1ecSDimitry Andric catch (...) 10567c82a1ecSDimitry Andric { 10577c82a1ecSDimitry Andric this->__set_badbit_and_consider_rethrow(); 10587c82a1ecSDimitry Andric } 10597c82a1ecSDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 10607a984708SDavid Chisnall return __gc_; 10617a984708SDavid Chisnall} 10627a984708SDavid Chisnall 10637a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 10647a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 10657a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::putback(char_type __c) 10667a984708SDavid Chisnall{ 10677a984708SDavid Chisnall __gc_ = 0; 10687a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 10697a984708SDavid Chisnall try 10707a984708SDavid Chisnall { 10717a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 1072936e9439SDimitry Andric this->clear(this->rdstate() & ~ios_base::eofbit); 10737a984708SDavid Chisnall sentry __sen(*this, true); 10747a984708SDavid Chisnall if (__sen) 10757a984708SDavid Chisnall { 10767a984708SDavid Chisnall if (this->rdbuf() == 0 || this->rdbuf()->sputbackc(__c) == traits_type::eof()) 10777a984708SDavid Chisnall this->setstate(ios_base::badbit); 10787a984708SDavid Chisnall } 10797a984708SDavid Chisnall else 10807a984708SDavid Chisnall this->setstate(ios_base::failbit); 10817a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 10827a984708SDavid Chisnall } 10837a984708SDavid Chisnall catch (...) 10847a984708SDavid Chisnall { 10857a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 10867a984708SDavid Chisnall } 10877a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 10887a984708SDavid Chisnall return *this; 10897a984708SDavid Chisnall} 10907a984708SDavid Chisnall 10917a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 10927a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 10937a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::unget() 10947a984708SDavid Chisnall{ 10957a984708SDavid Chisnall __gc_ = 0; 10967a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 10977a984708SDavid Chisnall try 10987a984708SDavid Chisnall { 10997a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 1100936e9439SDimitry Andric this->clear(this->rdstate() & ~ios_base::eofbit); 11017a984708SDavid Chisnall sentry __sen(*this, true); 11027a984708SDavid Chisnall if (__sen) 11037a984708SDavid Chisnall { 11047a984708SDavid Chisnall if (this->rdbuf() == 0 || this->rdbuf()->sungetc() == traits_type::eof()) 11057a984708SDavid Chisnall this->setstate(ios_base::badbit); 11067a984708SDavid Chisnall } 11077a984708SDavid Chisnall else 11087a984708SDavid Chisnall this->setstate(ios_base::failbit); 11097a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 11107a984708SDavid Chisnall } 11117a984708SDavid Chisnall catch (...) 11127a984708SDavid Chisnall { 11137a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 11147a984708SDavid Chisnall } 11157a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 11167a984708SDavid Chisnall return *this; 11177a984708SDavid Chisnall} 11187a984708SDavid Chisnall 11197a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 11207a984708SDavid Chisnallint 11217a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::sync() 11227a984708SDavid Chisnall{ 11237a984708SDavid Chisnall int __r = 0; 11247a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 11257a984708SDavid Chisnall try 11267a984708SDavid Chisnall { 11277a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 11287a984708SDavid Chisnall sentry __sen(*this, true); 11297a984708SDavid Chisnall if (__sen) 11307a984708SDavid Chisnall { 11317a984708SDavid Chisnall if (this->rdbuf() == 0) 11327a984708SDavid Chisnall return -1; 11337a984708SDavid Chisnall if (this->rdbuf()->pubsync() == -1) 11347a984708SDavid Chisnall { 11357a984708SDavid Chisnall this->setstate(ios_base::badbit); 11367a984708SDavid Chisnall return -1; 11377a984708SDavid Chisnall } 11387a984708SDavid Chisnall } 11397a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 11407a984708SDavid Chisnall } 11417a984708SDavid Chisnall catch (...) 11427a984708SDavid Chisnall { 11437a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 11447a984708SDavid Chisnall } 11457a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 11467a984708SDavid Chisnall return __r; 11477a984708SDavid Chisnall} 11487a984708SDavid Chisnall 11497a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 11507a984708SDavid Chisnalltypename basic_istream<_CharT, _Traits>::pos_type 11517a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::tellg() 11527a984708SDavid Chisnall{ 11537a984708SDavid Chisnall pos_type __r(-1); 11547a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 11557a984708SDavid Chisnall try 11567a984708SDavid Chisnall { 11577a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 11587a984708SDavid Chisnall sentry __sen(*this, true); 11597a984708SDavid Chisnall if (__sen) 11607a984708SDavid Chisnall __r = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in); 11617a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 11627a984708SDavid Chisnall } 11637a984708SDavid Chisnall catch (...) 11647a984708SDavid Chisnall { 11657a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 11667a984708SDavid Chisnall } 11677a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 11687a984708SDavid Chisnall return __r; 11697a984708SDavid Chisnall} 11707a984708SDavid Chisnall 11717a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 11727a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 11737a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::seekg(pos_type __pos) 11747a984708SDavid Chisnall{ 11757a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 11767a984708SDavid Chisnall try 11777a984708SDavid Chisnall { 11787a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 1179936e9439SDimitry Andric this->clear(this->rdstate() & ~ios_base::eofbit); 11807a984708SDavid Chisnall sentry __sen(*this, true); 11817a984708SDavid Chisnall if (__sen) 11824f7ab58eSDimitry Andric { 11837a984708SDavid Chisnall if (this->rdbuf()->pubseekpos(__pos, ios_base::in) == pos_type(-1)) 11847a984708SDavid Chisnall this->setstate(ios_base::failbit); 11854f7ab58eSDimitry Andric } 11867a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 11877a984708SDavid Chisnall } 11887a984708SDavid Chisnall catch (...) 11897a984708SDavid Chisnall { 11907a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 11917a984708SDavid Chisnall } 11927a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 11937a984708SDavid Chisnall return *this; 11947a984708SDavid Chisnall} 11957a984708SDavid Chisnall 11967a984708SDavid Chisnalltemplate<class _CharT, class _Traits> 11977a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 11987a984708SDavid Chisnallbasic_istream<_CharT, _Traits>::seekg(off_type __off, ios_base::seekdir __dir) 11997a984708SDavid Chisnall{ 12007a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 12017a984708SDavid Chisnall try 12027a984708SDavid Chisnall { 12037a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 12049729cf09SDimitry Andric this->clear(this->rdstate() & ~ios_base::eofbit); 12057a984708SDavid Chisnall sentry __sen(*this, true); 12067a984708SDavid Chisnall if (__sen) 12074f7ab58eSDimitry Andric { 12084f7ab58eSDimitry Andric if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::in) == pos_type(-1)) 12094f7ab58eSDimitry Andric this->setstate(ios_base::failbit); 12104f7ab58eSDimitry Andric } 12117a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 12127a984708SDavid Chisnall } 12137a984708SDavid Chisnall catch (...) 12147a984708SDavid Chisnall { 12157a984708SDavid Chisnall this->__set_badbit_and_consider_rethrow(); 12167a984708SDavid Chisnall } 12177a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 12187a984708SDavid Chisnall return *this; 12197a984708SDavid Chisnall} 12207a984708SDavid Chisnall 12217a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 12227a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 12237a984708SDavid Chisnallws(basic_istream<_CharT, _Traits>& __is) 12247a984708SDavid Chisnall{ 12257a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 12267a984708SDavid Chisnall try 12277a984708SDavid Chisnall { 12287a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 12297a984708SDavid Chisnall typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true); 12307a984708SDavid Chisnall if (__sen) 12317a984708SDavid Chisnall { 12327a984708SDavid Chisnall const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()); 12337a984708SDavid Chisnall while (true) 12347a984708SDavid Chisnall { 12357a984708SDavid Chisnall typename _Traits::int_type __i = __is.rdbuf()->sgetc(); 12367a984708SDavid Chisnall if (_Traits::eq_int_type(__i, _Traits::eof())) 12377a984708SDavid Chisnall { 12387a984708SDavid Chisnall __is.setstate(ios_base::eofbit); 12397a984708SDavid Chisnall break; 12407a984708SDavid Chisnall } 12417a984708SDavid Chisnall if (!__ct.is(__ct.space, _Traits::to_char_type(__i))) 12427a984708SDavid Chisnall break; 12437a984708SDavid Chisnall __is.rdbuf()->sbumpc(); 12447a984708SDavid Chisnall } 12457a984708SDavid Chisnall } 12467a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 12477a984708SDavid Chisnall } 12487a984708SDavid Chisnall catch (...) 12497a984708SDavid Chisnall { 12507a984708SDavid Chisnall __is.__set_badbit_and_consider_rethrow(); 12517a984708SDavid Chisnall } 12527a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 12537a984708SDavid Chisnall return __is; 12547a984708SDavid Chisnall} 12557a984708SDavid Chisnall 1256540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 12577a984708SDavid Chisnall 12587a984708SDavid Chisnalltemplate <class _CharT, class _Traits, class _Tp> 12597a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 12607a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 1261aed8d94eSDimitry Andricoperator>>(basic_istream<_CharT, _Traits>&& __is, _Tp&& __x) 12627a984708SDavid Chisnall{ 1263aed8d94eSDimitry Andric __is >> _VSTD::forward<_Tp>(__x); 12647a984708SDavid Chisnall return __is; 12657a984708SDavid Chisnall} 12667a984708SDavid Chisnall 1267540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 12687a984708SDavid Chisnall 12697a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 1270aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_iostream 12717a984708SDavid Chisnall : public basic_istream<_CharT, _Traits>, 12727a984708SDavid Chisnall public basic_ostream<_CharT, _Traits> 12737a984708SDavid Chisnall{ 12747a984708SDavid Chisnallpublic: 12757a984708SDavid Chisnall // types: 12767a984708SDavid Chisnall typedef _CharT char_type; 12777a984708SDavid Chisnall typedef _Traits traits_type; 12787a984708SDavid Chisnall typedef typename traits_type::int_type int_type; 12797a984708SDavid Chisnall typedef typename traits_type::pos_type pos_type; 12807a984708SDavid Chisnall typedef typename traits_type::off_type off_type; 12817a984708SDavid Chisnall 12827a984708SDavid Chisnall // constructor/destructor 1283*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 1284aed8d94eSDimitry Andric explicit basic_iostream(basic_streambuf<char_type, traits_type>* __sb) 1285aed8d94eSDimitry Andric : basic_istream<_CharT, _Traits>(__sb) 1286aed8d94eSDimitry Andric {} 1287aed8d94eSDimitry Andric 12887a984708SDavid Chisnall virtual ~basic_iostream(); 12897a984708SDavid Chisnallprotected: 1290540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 1291aed8d94eSDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 12927a984708SDavid Chisnall basic_iostream(basic_iostream&& __rhs); 12937a984708SDavid Chisnall 12947a984708SDavid Chisnall // assign/swap 1295aed8d94eSDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 12967a984708SDavid Chisnall basic_iostream& operator=(basic_iostream&& __rhs); 12977a984708SDavid Chisnall#endif 1298*b5893f02SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 1299aed8d94eSDimitry Andric void swap(basic_iostream& __rhs) 1300aed8d94eSDimitry Andric { basic_istream<char_type, traits_type>::swap(__rhs); } 13017a984708SDavid Chisnallpublic: 13027a984708SDavid Chisnall}; 13037a984708SDavid Chisnall 1304540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 13057a984708SDavid Chisnall 13067a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 13077a984708SDavid Chisnallbasic_iostream<_CharT, _Traits>::basic_iostream(basic_iostream&& __rhs) 13087a984708SDavid Chisnall : basic_istream<_CharT, _Traits>(_VSTD::move(__rhs)) 13097a984708SDavid Chisnall{ 13107a984708SDavid Chisnall} 13117a984708SDavid Chisnall 13127a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 13137a984708SDavid Chisnallbasic_iostream<_CharT, _Traits>& 13147a984708SDavid Chisnallbasic_iostream<_CharT, _Traits>::operator=(basic_iostream&& __rhs) 13157a984708SDavid Chisnall{ 13167a984708SDavid Chisnall swap(__rhs); 13177a984708SDavid Chisnall return *this; 13187a984708SDavid Chisnall} 13197a984708SDavid Chisnall 1320540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 13217a984708SDavid Chisnall 13227a984708SDavid Chisnalltemplate <class _CharT, class _Traits> 13237a984708SDavid Chisnallbasic_iostream<_CharT, _Traits>::~basic_iostream() 13247a984708SDavid Chisnall{ 13257a984708SDavid Chisnall} 13267a984708SDavid Chisnall 13277a984708SDavid Chisnalltemplate<class _CharT, class _Traits, class _Allocator> 13287a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 13297a984708SDavid Chisnalloperator>>(basic_istream<_CharT, _Traits>& __is, 13307a984708SDavid Chisnall basic_string<_CharT, _Traits, _Allocator>& __str) 13317a984708SDavid Chisnall{ 13327a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 13337a984708SDavid Chisnall try 13347a984708SDavid Chisnall { 13357a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 13367a984708SDavid Chisnall typename basic_istream<_CharT, _Traits>::sentry __sen(__is); 13377a984708SDavid Chisnall if (__sen) 13387a984708SDavid Chisnall { 13397a984708SDavid Chisnall __str.clear(); 13407a984708SDavid Chisnall streamsize __n = __is.width(); 13417a984708SDavid Chisnall if (__n <= 0) 13427a984708SDavid Chisnall __n = __str.max_size(); 13437a984708SDavid Chisnall if (__n <= 0) 13447a984708SDavid Chisnall __n = numeric_limits<streamsize>::max(); 13457a984708SDavid Chisnall streamsize __c = 0; 13467a984708SDavid Chisnall const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()); 13477a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 13487a984708SDavid Chisnall while (__c < __n) 13497a984708SDavid Chisnall { 13507a984708SDavid Chisnall typename _Traits::int_type __i = __is.rdbuf()->sgetc(); 13517a984708SDavid Chisnall if (_Traits::eq_int_type(__i, _Traits::eof())) 13527a984708SDavid Chisnall { 13537a984708SDavid Chisnall __err |= ios_base::eofbit; 13547a984708SDavid Chisnall break; 13557a984708SDavid Chisnall } 13567a984708SDavid Chisnall _CharT __ch = _Traits::to_char_type(__i); 13577a984708SDavid Chisnall if (__ct.is(__ct.space, __ch)) 13587a984708SDavid Chisnall break; 13597a984708SDavid Chisnall __str.push_back(__ch); 13607a984708SDavid Chisnall ++__c; 13617a984708SDavid Chisnall __is.rdbuf()->sbumpc(); 13627a984708SDavid Chisnall } 13637a984708SDavid Chisnall __is.width(0); 13647a984708SDavid Chisnall if (__c == 0) 13657a984708SDavid Chisnall __err |= ios_base::failbit; 13667a984708SDavid Chisnall __is.setstate(__err); 13677a984708SDavid Chisnall } 13687a984708SDavid Chisnall else 13697a984708SDavid Chisnall __is.setstate(ios_base::failbit); 13707a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 13717a984708SDavid Chisnall } 13727a984708SDavid Chisnall catch (...) 13737a984708SDavid Chisnall { 13747a984708SDavid Chisnall __is.__set_badbit_and_consider_rethrow(); 13757a984708SDavid Chisnall } 13767a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 13777a984708SDavid Chisnall return __is; 13787a984708SDavid Chisnall} 13797a984708SDavid Chisnall 13807a984708SDavid Chisnalltemplate<class _CharT, class _Traits, class _Allocator> 13817a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 13827a984708SDavid Chisnallgetline(basic_istream<_CharT, _Traits>& __is, 13837a984708SDavid Chisnall basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm) 13847a984708SDavid Chisnall{ 13857a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 13867a984708SDavid Chisnall try 13877a984708SDavid Chisnall { 13887a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 13897a984708SDavid Chisnall typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true); 13907a984708SDavid Chisnall if (__sen) 13917a984708SDavid Chisnall { 13927a984708SDavid Chisnall __str.clear(); 13937a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 13947a984708SDavid Chisnall streamsize __extr = 0; 13957a984708SDavid Chisnall while (true) 13967a984708SDavid Chisnall { 13977a984708SDavid Chisnall typename _Traits::int_type __i = __is.rdbuf()->sbumpc(); 13987a984708SDavid Chisnall if (_Traits::eq_int_type(__i, _Traits::eof())) 13997a984708SDavid Chisnall { 14007a984708SDavid Chisnall __err |= ios_base::eofbit; 14017a984708SDavid Chisnall break; 14027a984708SDavid Chisnall } 14037a984708SDavid Chisnall ++__extr; 14047a984708SDavid Chisnall _CharT __ch = _Traits::to_char_type(__i); 14057a984708SDavid Chisnall if (_Traits::eq(__ch, __dlm)) 14067a984708SDavid Chisnall break; 14077a984708SDavid Chisnall __str.push_back(__ch); 14087a984708SDavid Chisnall if (__str.size() == __str.max_size()) 14097a984708SDavid Chisnall { 14107a984708SDavid Chisnall __err |= ios_base::failbit; 14117a984708SDavid Chisnall break; 14127a984708SDavid Chisnall } 14137a984708SDavid Chisnall } 14147a984708SDavid Chisnall if (__extr == 0) 14157a984708SDavid Chisnall __err |= ios_base::failbit; 14167a984708SDavid Chisnall __is.setstate(__err); 14177a984708SDavid Chisnall } 14187a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 14197a984708SDavid Chisnall } 14207a984708SDavid Chisnall catch (...) 14217a984708SDavid Chisnall { 14227a984708SDavid Chisnall __is.__set_badbit_and_consider_rethrow(); 14237a984708SDavid Chisnall } 14247a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 14257a984708SDavid Chisnall return __is; 14267a984708SDavid Chisnall} 14277a984708SDavid Chisnall 14287a984708SDavid Chisnalltemplate<class _CharT, class _Traits, class _Allocator> 14297a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 14307a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 14317a984708SDavid Chisnallgetline(basic_istream<_CharT, _Traits>& __is, 14327a984708SDavid Chisnall basic_string<_CharT, _Traits, _Allocator>& __str) 14337a984708SDavid Chisnall{ 14347a984708SDavid Chisnall return getline(__is, __str, __is.widen('\n')); 14357a984708SDavid Chisnall} 14367a984708SDavid Chisnall 1437540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 14387a984708SDavid Chisnall 14397a984708SDavid Chisnalltemplate<class _CharT, class _Traits, class _Allocator> 14407a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 14417a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 14427a984708SDavid Chisnallgetline(basic_istream<_CharT, _Traits>&& __is, 14437a984708SDavid Chisnall basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm) 14447a984708SDavid Chisnall{ 14457a984708SDavid Chisnall return getline(__is, __str, __dlm); 14467a984708SDavid Chisnall} 14477a984708SDavid Chisnall 14487a984708SDavid Chisnalltemplate<class _CharT, class _Traits, class _Allocator> 14497a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 14507a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 14517a984708SDavid Chisnallgetline(basic_istream<_CharT, _Traits>&& __is, 14527a984708SDavid Chisnall basic_string<_CharT, _Traits, _Allocator>& __str) 14537a984708SDavid Chisnall{ 14547a984708SDavid Chisnall return getline(__is, __str, __is.widen('\n')); 14557a984708SDavid Chisnall} 14567a984708SDavid Chisnall 1457540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 14587a984708SDavid Chisnall 14597a984708SDavid Chisnalltemplate <class _CharT, class _Traits, size_t _Size> 14607a984708SDavid Chisnallbasic_istream<_CharT, _Traits>& 14617a984708SDavid Chisnalloperator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Size>& __x) 14627a984708SDavid Chisnall{ 14637a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 14647a984708SDavid Chisnall try 14657a984708SDavid Chisnall { 14667a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 14677a984708SDavid Chisnall typename basic_istream<_CharT, _Traits>::sentry __sen(__is); 14687a984708SDavid Chisnall if (__sen) 14697a984708SDavid Chisnall { 14707a984708SDavid Chisnall basic_string<_CharT, _Traits> __str; 14717a984708SDavid Chisnall const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc()); 1472aed8d94eSDimitry Andric size_t __c = 0; 14737a984708SDavid Chisnall ios_base::iostate __err = ios_base::goodbit; 14747a984708SDavid Chisnall _CharT __zero = __ct.widen('0'); 14757a984708SDavid Chisnall _CharT __one = __ct.widen('1'); 14767a984708SDavid Chisnall while (__c < _Size) 14777a984708SDavid Chisnall { 14787a984708SDavid Chisnall typename _Traits::int_type __i = __is.rdbuf()->sgetc(); 14797a984708SDavid Chisnall if (_Traits::eq_int_type(__i, _Traits::eof())) 14807a984708SDavid Chisnall { 14817a984708SDavid Chisnall __err |= ios_base::eofbit; 14827a984708SDavid Chisnall break; 14837a984708SDavid Chisnall } 14847a984708SDavid Chisnall _CharT __ch = _Traits::to_char_type(__i); 14857a984708SDavid Chisnall if (!_Traits::eq(__ch, __zero) && !_Traits::eq(__ch, __one)) 14867a984708SDavid Chisnall break; 14877a984708SDavid Chisnall __str.push_back(__ch); 14887a984708SDavid Chisnall ++__c; 14897a984708SDavid Chisnall __is.rdbuf()->sbumpc(); 14907a984708SDavid Chisnall } 14917a984708SDavid Chisnall __x = bitset<_Size>(__str); 14927a984708SDavid Chisnall if (__c == 0) 14937a984708SDavid Chisnall __err |= ios_base::failbit; 14947a984708SDavid Chisnall __is.setstate(__err); 14957a984708SDavid Chisnall } 14967a984708SDavid Chisnall else 14977a984708SDavid Chisnall __is.setstate(ios_base::failbit); 14987a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS 14997a984708SDavid Chisnall } 15007a984708SDavid Chisnall catch (...) 15017a984708SDavid Chisnall { 15027a984708SDavid Chisnall __is.__set_badbit_and_consider_rethrow(); 15037a984708SDavid Chisnall } 15047a984708SDavid Chisnall#endif // _LIBCPP_NO_EXCEPTIONS 15057a984708SDavid Chisnall return __is; 15067a984708SDavid Chisnall} 15077a984708SDavid Chisnall 1508*b5893f02SDimitry Andric#ifndef _LIBCPP_DO_NOT_ASSUME_STREAMS_EXPLICIT_INSTANTIATION_IN_DYLIB 1509aed8d94eSDimitry Andric_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_istream<char>) 1510aed8d94eSDimitry Andric_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_istream<wchar_t>) 1511aed8d94eSDimitry Andric_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_iostream<char>) 15120f5676f4SDimitry Andric#endif 15137a984708SDavid Chisnall 15147a984708SDavid Chisnall_LIBCPP_END_NAMESPACE_STD 15157a984708SDavid Chisnall 1516f9448bf3SDimitry Andric_LIBCPP_POP_MACROS 1517f9448bf3SDimitry Andric 15187a984708SDavid Chisnall#endif // _LIBCPP_ISTREAM 1519