?? istream
字號:
for (; ; )
{int_type _C;
if (_N != INT_MAX && --_N < 0)
break;
else if (_Tr::eq_int_type(_Tr::eof(),
_C = rdbuf()->sbumpc()))
{_St |= eofbit;
break; }
else
{++_Chcount;
if (_C == _Di)
break; }}
_CATCH_IO_END }
setstate(_St);
return (*this); }
_Myt& read(_E *_S, streamsize _N)
{iostate _St = goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);
if (_Ok)
{_TRY_IO_BEGIN
const streamsize _M = rdbuf()->sgetn(_S, _N);
_Chcount += _M;
if (_M != _N)
_St |= eofbit | failbit;
_CATCH_IO_END }
setstate(_St);
return (*this); }
streamsize readsome(_E *_S, streamsize _N)
{iostate _St = goodbit;
_Chcount = 0;
int _M;
if (rdbuf() == 0)
_St |= failbit;
else if ((_M = rdbuf()->in_avail()) < 0)
_St |= eofbit;
else if (0 < _M)
read(_S, _M < _N ? _M : _N);
setstate(_St);
return (gcount()); }
int_type peek()
{iostate _St = goodbit;
_Chcount = 0;
int_type _C;
const sentry _Ok(*this, true);
if (!_Ok)
_C = _Tr::eof();
else
{_TRY_IO_BEGIN
if (_Tr::eq_int_type(_Tr::eof(),
_C = rdbuf()->sgetc()))
_St |= eofbit;
_CATCH_IO_END }
setstate(_St);
return (_C); }
_Myt& putback(_E _X)
{iostate _St = goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);
if (_Ok)
{_TRY_IO_BEGIN
if (_Tr::eq_int_type(_Tr::eof(),
rdbuf()->sputbackc(_X)))
_St |= badbit;
_CATCH_IO_END }
setstate(_St);
return (*this); }
_Myt& unget()
{iostate _St = goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);
if (_Ok)
{_TRY_IO_BEGIN
if (_Tr::eq_int_type(_Tr::eof(),
rdbuf()->sungetc()))
_St |= badbit;
_CATCH_IO_END }
setstate(_St);
return (*this); }
streamsize gcount() const
{return (_Chcount); }
int sync()
{iostate _St = goodbit;
int _Ans;
if (rdbuf() == 0)
_Ans = -1;
else if (rdbuf()->pubsync() == -1)
_St |= badbit, _Ans = -1;
else
_Ans = 0;
setstate(_St);
return (_Ans); }
_Myt& seekg(pos_type _P)
{if (!fail())
rdbuf()->pubseekpos(_P, in);
return (*this); }
_Myt& seekg(off_type _O, ios_base::seekdir _W)
{if (!fail())
rdbuf()->pubseekoff(_O, _W, in);
return (*this); }
pos_type tellg()
{if (!fail())
return (rdbuf()->pubseekoff(0, cur, in));
else
return (streampos(_BADOFF)); }
private:
streamsize _Chcount;
};
#ifdef _DLL
#ifdef __FORCE_INSTANCE
template class _CRTIMP2 basic_istream<char, char_traits<char> >;
template class _CRTIMP2 basic_istream<wchar_t, char_traits<wchar_t> >;
#else // __FORCE_INSTANCE
#pragma warning(disable:4231) /* the extern before template is a non-standard extension */
extern template class _CRTIMP2 basic_istream<char, char_traits<char> >;
extern template class _CRTIMP2 basic_istream<wchar_t, char_traits<wchar_t> >;
#pragma warning(default:4231) /* restore previous warning */
#endif // __FORCE_INSTANCE
#endif // _DLL
// TEMPLATE CLASS basic_iostream
template<class _E, class _Tr = char_traits<_E> >
class basic_iostream : public basic_istream<_E, _Tr>,
public basic_ostream<_E, _Tr> {
public:
explicit basic_iostream(basic_streambuf<_E, _Tr> *_S)
: basic_istream<_E, _Tr>(_S), basic_ostream<_E, _Tr>(_S, false, false)
{}
virtual ~basic_iostream()
{}
};
#ifdef _DLL
#ifdef __FORCE_INSTANCE
template class _CRTIMP2 basic_iostream<char, char_traits<char> >;
template class _CRTIMP2 basic_iostream<wchar_t, char_traits<wchar_t> >;
#else // __FORCE_INSTANCE
#pragma warning(disable:4231) /* the extern before template is a non-standard extension */
extern template class _CRTIMP2 basic_iostream<char, char_traits<char> >;
extern template class _CRTIMP2 basic_iostream<wchar_t, char_traits<wchar_t> >;
#pragma warning(default:4231) /* restore previous warning */
#endif // __FORCE_INSTANCE
#endif // _DLL
// EXTRACTORS
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl operator>>(
basic_istream<_E, _Tr>& _I, _E *_X)
{typedef basic_istream<_E, _Tr> _Myis;
typedef ctype<_E> _Ctype;
ios_base::iostate _St = ios_base::goodbit;
_E *_S = _X;
const _Myis::sentry _Ok(_I);
if (_Ok)
{const _Ctype& _Fac = _USE(_I.getloc(), _Ctype);
_TRY_IO_BEGIN
int _N = 0 < _I.width() ? _I.width() : INT_MAX;
_Myis::int_type _C = _I.rdbuf()->sgetc();
for (; 0 < --_N; _C = _I.rdbuf()->snextc())
if (_Tr::eq_int_type(_Tr::eof(), _C))
{_St |= ios_base::eofbit;
break; }
else if (_Fac.is(_Ctype::space,
_Tr::to_char_type(_C)))
break;
else
*_S++ = _Tr::to_char_type(_C);
_CATCH_IO_(_I) }
*_S = _E(0);
_I.width(0);
_I.setstate(_S == _X ? _St | ios_base::failbit : _St);
return (_I); }
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl operator>>(
basic_istream<_E, _Tr>& _I, _E& _X)
{typedef basic_istream<_E, _Tr> _Myis;
_Myis::int_type _C;
ios_base::iostate _St = ios_base::goodbit;
const _Myis::sentry _Ok(_I);
if (_Ok)
{_TRY_IO_BEGIN
_C = _I.rdbuf()->sbumpc();
if (_Tr::eq_int_type(_Tr::eof(), _C))
_St |= ios_base::eofbit | ios_base::failbit;
else
_X = _Tr::to_char_type(_C);
_CATCH_IO_(_I) }
_I.setstate(_St);
return (_I); }
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl operator>>(
basic_istream<_E, _Tr>& _I, signed char *_X)
{return (_I >> (char *)_X); }
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl operator>>(
basic_istream<_E, _Tr>& _I, signed char& _C)
{return (_I >> (char&)_C); }
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl operator>>(
basic_istream<_E, _Tr>& _I, unsigned char *_X)
{return (_I >> (char *)_X); }
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl operator>>(
basic_istream<_E, _Tr>& _I, unsigned char& _C)
{return (_I >> (char&)_C); }
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl operator>>(
basic_istream<_E, _Tr>& _I, signed short * _X)
{return (_I >> (wchar_t *)_X); }
// MANIPULATORS
template<class _E, class _Tr> inline
basic_istream<_E, _Tr>& __cdecl ws(basic_istream<_E, _Tr>& _I)
{typedef basic_istream<_E, _Tr> _Myis;
typedef ctype<_E> _Ctype;
ios_base::iostate _St = ios_base::goodbit;
const _Myis::sentry _Ok(_I, true);
if (_Ok)
{const _Ctype& _Fac = _USE(_I.getloc(), _Ctype);
_TRY_IO_BEGIN
for (_Tr::int_type _C = _I.rdbuf()->sgetc(); ;
_C = _I.rdbuf()->snextc())
if (_Tr::eq_int_type(_Tr::eof(), _C))
{_St |= ios_base::eofbit;
break; }
else if (!_Fac.is(_Ctype::space,
_Tr::to_char_type(_C)))
break;
_CATCH_IO_(_I) }
_I.setstate(_St);
return (_I); }
_CRTIMP2 inline basic_istream<char, char_traits<char> >&
__cdecl ws(basic_istream<char, char_traits<char> >& _I)
{typedef char _E;
typedef char_traits<_E> _Tr;
ios_base::iostate _St = ios_base::goodbit;
const basic_istream<_E, _Tr>::sentry _Ok(_I, true);
if (_Ok)
{const ctype<_E>& _Fac = _USE(_I.getloc(), ctype<_E>);
_TRY_IO_BEGIN
for (_Tr::int_type _C = _I.rdbuf()->sgetc(); ;
_C = _I.rdbuf()->snextc())
if (_Tr::eq_int_type(_Tr::eof(), _C))
{_St |= ios_base::eofbit;
break; }
else if (!_Fac.is(ctype<_E>::space,
_Tr::to_char_type(_C)))
break;
_CATCH_IO_(_I) }
_I.setstate(_St);
return (_I); }
_CRTIMP2 inline basic_istream<wchar_t, char_traits<wchar_t> >&
__cdecl ws(basic_istream<wchar_t, char_traits<wchar_t> >& _I)
{typedef wchar_t _E;
typedef char_traits<_E> _Tr;
ios_base::iostate _St = ios_base::goodbit;
const basic_istream<_E, _Tr>::sentry _Ok(_I, true);
if (_Ok)
{const ctype<_E>& _Fac = _USE(_I.getloc(), ctype<_E>);
_TRY_IO_BEGIN
for (_Tr::int_type _C = _I.rdbuf()->sgetc(); ;
_C = _I.rdbuf()->snextc())
if (_Tr::eq_int_type(_Tr::eof(), _C))
{_St |= ios_base::eofbit;
break; }
else if (_Fac.is(ctype<_E>::space,
_Tr::to_char_type(_C)))
break;
_CATCH_IO_(_I) }
_I.setstate(_St);
return (_I); }
#ifdef _DLL
#ifndef CRTDLL2
#pragma warning(disable:4231) /* the extern before template is a non-standard extension */
extern template _CRTIMP2 basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, char *);
extern template _CRTIMP2 basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, char&);
extern template _CRTIMP2 basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, signed char *);
extern template _CRTIMP2 basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, signed char&);
extern template _CRTIMP2 basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, unsigned char *);
extern template _CRTIMP2 basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, unsigned char&);
extern template _CRTIMP2 basic_istream<wchar_t, char_traits<wchar_t> >& __cdecl operator>>(
basic_istream<wchar_t, char_traits<wchar_t> >&, wchar_t *);
extern template _CRTIMP2 basic_istream<wchar_t, char_traits<wchar_t> >& __cdecl operator>>(
basic_istream<wchar_t, char_traits<wchar_t> >&, wchar_t&);
extern template _CRTIMP2 basic_istream<wchar_t, char_traits<wchar_t> >& __cdecl operator>>(
basic_istream<wchar_t, char_traits<wchar_t> >&, signed short *);
#pragma warning(default:4231) /* restore previous warning */
#endif // CRTDLL2
#endif // _DLL
_STD_END
#ifdef _MSC_VER
#pragma pack(pop)
#endif /* _MSC_VER */
#endif /* _ISTREAM_ */
/*
* Copyright (c) 1994 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -