⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 istream.tcc

📁 gcc-you can use this code to learn something about gcc, and inquire further into linux,
💻 TCC
📖 第 1 页 / 共 3 页
字号:
	    {	      // Cannot compare int_type with streamsize generically.	      streamsize __num = this->rdbuf()->in_avail();	      if (__num >= 0)		{		  __num = min(__num, __n);		  if (__num)		    _M_gcount = this->rdbuf()->sgetn(__s, __num);		}	      else		this->setstate(ios_base::eofbit);		    	    }	  catch(...)	    {	      // 27.6.1.3 paragraph 1	      // Turn this on without causing an ios::failure to be thrown.	      this->_M_setstate(ios_base::badbit);	      if ((this->exceptions() & ios_base::badbit) != 0)		__throw_exception_again;	    }	}      else	this->setstate(ios_base::failbit);      return _M_gcount;    }        template<typename _CharT, typename _Traits>    basic_istream<_CharT, _Traits>&    basic_istream<_CharT, _Traits>::    putback(char_type __c)    {#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS// 60. What is a formatted input function?      _M_gcount = 0;#endif      sentry __cerb(*this, true);      if (__cerb) 	{	  try 	    {	      const int_type __eof = traits_type::eof();	      __streambuf_type* __sb = this->rdbuf();	      if (!__sb 		  || traits_type::eq_int_type(__sb->sputbackc(__c), __eof))		this->setstate(ios_base::badbit);		    	    }	  catch(...)	    {	      // 27.6.1.3 paragraph 1	      // Turn this on without causing an ios::failure to be thrown.	      this->_M_setstate(ios_base::badbit);	      if ((this->exceptions() & ios_base::badbit) != 0)		__throw_exception_again;	    }	}      else	this->setstate(ios_base::failbit);      return *this;    }    template<typename _CharT, typename _Traits>    basic_istream<_CharT, _Traits>&    basic_istream<_CharT, _Traits>::    unget(void)    {#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS// 60. What is a formatted input function?      _M_gcount = 0;#endif      sentry __cerb(*this, true);      if (__cerb) 	{	  try 	    {	      const int_type __eof = traits_type::eof();	      __streambuf_type* __sb = this->rdbuf();	      if (!__sb 		  || traits_type::eq_int_type(__sb->sungetc(), __eof))		this->setstate(ios_base::badbit);		    	    }	  catch(...)	    {	      // 27.6.1.3 paragraph 1	      // Turn this on without causing an ios::failure to be thrown.	      this->_M_setstate(ios_base::badbit);	      if ((this->exceptions() & ios_base::badbit) != 0)		__throw_exception_again;	    }	}      else	this->setstate(ios_base::failbit);      return *this;    }    template<typename _CharT, typename _Traits>    int    basic_istream<_CharT, _Traits>::    sync(void)    {      // DR60.  Do not change _M_gcount.      int __ret = -1;      sentry __cerb(*this, true);      if (__cerb) 	{	  try 	    {	      __streambuf_type* __sb = this->rdbuf();	      if (__sb)		{		  if (__sb->pubsync() == -1)		    this->setstate(ios_base::badbit);		    		  else 		    __ret = 0;		}	    }	  catch(...)	    {	      // 27.6.1.3 paragraph 1	      // Turn this on without causing an ios::failure to be thrown.	      this->_M_setstate(ios_base::badbit);	      if ((this->exceptions() & ios_base::badbit) != 0)		__throw_exception_again;	    }	}      return __ret;    }    template<typename _CharT, typename _Traits>    typename basic_istream<_CharT, _Traits>::pos_type    basic_istream<_CharT, _Traits>::    tellg(void)    {      // DR60.  Do not change _M_gcount.      pos_type __ret = pos_type(-1);      if (!this->fail())	__ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);      return __ret;    }  template<typename _CharT, typename _Traits>    basic_istream<_CharT, _Traits>&    basic_istream<_CharT, _Traits>::    seekg(pos_type __pos)    {      // DR60.  Do not change _M_gcount.      if (!this->fail())	{#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS// 136.  seekp, seekg setting wrong streams?	  pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::in);// 129. Need error indication from seekp() and seekg()	  if (__err == pos_type(off_type(-1)))	    this->setstate(ios_base::failbit);#endif	}      return *this;    }  template<typename _CharT, typename _Traits>    basic_istream<_CharT, _Traits>&    basic_istream<_CharT, _Traits>::    seekg(off_type __off, ios_base::seekdir __dir)    {      // DR60.  Do not change _M_gcount.      if (!this->fail())	{#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS// 136.  seekp, seekg setting wrong streams?	  pos_type __err = this->rdbuf()->pubseekoff(__off, __dir, 						     ios_base::in);// 129. Need error indication from seekp() and seekg()	  if (__err == pos_type(off_type(-1)))	    this->setstate(ios_base::failbit);#endif	}      return *this;    }  // 27.6.1.2.3 Character extraction templates  template<typename _CharT, typename _Traits>    basic_istream<_CharT, _Traits>&    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)    {      typedef basic_istream<_CharT, _Traits> 		__istream_type;      typename __istream_type::sentry __cerb(__in, false);      if (__cerb)	{	  try 	    { __in.get(__c); }	  catch(...)	    {	      // 27.6.1.2.1 Common requirements.	      // Turn this on without causing an ios::failure to be thrown.	      __in._M_setstate(ios_base::badbit);	      if ((__in.exceptions() & ios_base::badbit) != 0)		__throw_exception_again;	    }	}      else	__in.setstate(ios_base::failbit);      return __in;    }  template<typename _CharT, typename _Traits>    basic_istream<_CharT, _Traits>&    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)    {      typedef basic_istream<_CharT, _Traits> 		__istream_type;      typedef typename __istream_type::__streambuf_type __streambuf_type;      typedef typename _Traits::int_type 		int_type;      typedef _CharT                     		char_type;      typedef ctype<_CharT>     			__ctype_type;      streamsize __extracted = 0;      typename __istream_type::sentry __cerb(__in, false);      if (__cerb)	{	  try 	    {	      // Figure out how many characters to extract.	      streamsize __num = __in.width();	      if (__num <= 0)		__num = numeric_limits<streamsize>::max();	      	      const __ctype_type& __ctype = use_facet<__ctype_type>(__in.getloc());	      const int_type __eof = _Traits::eof();	      __streambuf_type* __sb = __in.rdbuf();	      int_type __c = __sb->sgetc();	      	      while (__extracted < __num - 1 		     && !_Traits::eq_int_type(__c, __eof)		     && !__ctype.is(ctype_base::space, _Traits::to_char_type(__c)))		{		  *__s++ = _Traits::to_char_type(__c);		  ++__extracted;		  __c = __sb->snextc();		}	      if (_Traits::eq_int_type(__c, __eof))		__in.setstate(ios_base::eofbit);#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS//68.  Extractors for char* should store null at end	      *__s = char_type();#endif	      __in.width(0);	    }	  catch(...)	    {	      // 27.6.1.2.1 Common requirements.	      // Turn this on without causing an ios::failure to be thrown.	      __in._M_setstate(ios_base::badbit);	      if ((__in.exceptions() & ios_base::badbit) != 0)		__throw_exception_again;	    }	}      if (!__extracted)	__in.setstate(ios_base::failbit);      return __in;    }  // 27.6.1.4 Standard basic_istream manipulators  template<typename _CharT, typename _Traits>    basic_istream<_CharT,_Traits>&     ws(basic_istream<_CharT,_Traits>& __in)    {      typedef basic_istream<_CharT, _Traits> 		__istream_type;      typedef typename __istream_type::__streambuf_type __streambuf_type;      typedef typename __istream_type::__ctype_type 	__ctype_type;      typedef typename __istream_type::int_type 	__int_type;      const __ctype_type& __ctype = use_facet<__ctype_type>(__in.getloc());      const __int_type __eof = _Traits::eof();	            __streambuf_type* __sb = __in.rdbuf();      __int_type __c = __sb->sgetc();      while (!_Traits::eq_int_type(__c, __eof) 	     && __ctype.is(ctype_base::space, _Traits::to_char_type(__c)))	__c = __sb->snextc();       if (_Traits::eq_int_type(__c, __eof))	__in.setstate(ios_base::eofbit);      return __in;    }  // 21.3.7.9 basic_string::getline and operators  template<typename _CharT, typename _Traits, typename _Alloc>    basic_istream<_CharT, _Traits>&    operator>>(basic_istream<_CharT, _Traits>& __in,	       basic_string<_CharT, _Traits, _Alloc>& __str)    {      typedef basic_istream<_CharT, _Traits> 		__istream_type;      typedef typename __istream_type::int_type 	__int_type;      typedef typename __istream_type::__streambuf_type __streambuf_type;      typedef typename __istream_type::__ctype_type 	__ctype_type;      typedef basic_string<_CharT, _Traits, _Alloc> 	__string_type;      typedef typename __string_type::size_type		__size_type;      __size_type __extracted = 0;      typename __istream_type::sentry __cerb(__in, false);      if (__cerb) 	{	  __str.erase();	  streamsize __w = __in.width();	  __size_type __n;	  __n = __w > 0 ? static_cast<__size_type>(__w) : __str.max_size();	  const __ctype_type& __ctype = use_facet<__ctype_type>(__in.getloc());	  const __int_type __eof = _Traits::eof();	  __streambuf_type* __sb = __in.rdbuf();	  __int_type __c = __sb->sgetc();	  	  while (__extracted < __n 		 && !_Traits::eq_int_type(__c, __eof)		 && !__ctype.is(ctype_base::space, _Traits::to_char_type(__c)))	    {	      __str += _Traits::to_char_type(__c);	      ++__extracted;	      __c = __sb->snextc();	    }	  if (_Traits::eq_int_type(__c, __eof))	    __in.setstate(ios_base::eofbit);	  __in.width(0);	}#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS//211.  operator>>(istream&, string&) doesn't set failbit      if (!__extracted)	__in.setstate (ios_base::failbit);#endif      return __in;    }  template<typename _CharT, typename _Traits, typename _Alloc>    basic_istream<_CharT, _Traits>&    getline(basic_istream<_CharT, _Traits>& __in,	    basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)    {      typedef basic_istream<_CharT, _Traits> 		__istream_type;      typedef typename __istream_type::int_type 	__int_type;      typedef typename __istream_type::__streambuf_type __streambuf_type;      typedef typename __istream_type::__ctype_type 	__ctype_type;      typedef basic_string<_CharT, _Traits, _Alloc> 	__string_type;      typedef typename __string_type::size_type		__size_type;      __size_type __extracted = 0;      bool __testdelim = false;      typename __istream_type::sentry __cerb(__in, true);      if (__cerb) 	{	  __str.erase();	  __size_type __n = __str.max_size();	  __int_type __idelim = _Traits::to_int_type(__delim);	  __streambuf_type* __sb = __in.rdbuf();	  __int_type __c = __sb->sbumpc();	  const __int_type __eof = _Traits::eof();	  __testdelim = _Traits::eq_int_type(__c, __idelim);	  while (__extracted <= __n 		 && !_Traits::eq_int_type(__c, __eof)		 && !__testdelim)	    {	      __str += _Traits::to_char_type(__c);	      ++__extracted;	      __c = __sb->sbumpc();	      __testdelim = _Traits::eq_int_type(__c, __idelim);	    }	  if (_Traits::eq_int_type(__c, __eof))	    __in.setstate(ios_base::eofbit);	}      if (!__extracted && !__testdelim)	__in.setstate(ios_base::failbit);      return __in;    }  template<class _CharT, class _Traits, class _Alloc>    inline basic_istream<_CharT,_Traits>&    getline(basic_istream<_CharT, _Traits>& __in, 	    basic_string<_CharT,_Traits,_Alloc>& __str)    { return getline(__in, __str, __in.widen('\n')); }  // Inhibit implicit instantiations for required instantiations,  // which are defined via explicit instantiations elsewhere.    // NB:  This syntax is a GNU extension.#if _GLIBCPP_EXTERN_TEMPLATE  extern template class basic_istream<char>;  extern template istream& ws(istream&);  extern template istream& operator>>(istream&, char&);  extern template istream& operator>>(istream&, char*);  extern template istream& operator>>(istream&, unsigned char&);  extern template istream& operator>>(istream&, signed char&);  extern template istream& operator>>(istream&, unsigned char*);  extern template istream& operator>>(istream&, signed char*);#ifdef _GLIBCPP_USE_WCHAR_T  extern template class basic_istream<wchar_t>;  extern template wistream& ws(wistream&);  extern template wistream& operator>>(wistream&, wchar_t&);  extern template wistream& operator>>(wistream&, wchar_t*);#endif#endif} // namespace std

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -