Files
admin
base
basedrv
boot
busdrv
cluster
cmd
crts
asms
crtw32
bsku
convert
direct
dllstuff
dos
eh
exec
h
hack
heap
helper
iostream
linkopts
lowio
mbstring
misc
rtc
startup
stdcpp
stdcpp64
stdhpp
stdhpp64
algorithm
bitset
cassert
cctype
cerrno
cfloat
ciso646
climits
clocale
cmath
complex
csetjmp
csignal
cstdarg
cstddef
cstdio
cstdlib
cstring
ctime
cwchar
cwctype
deque
exception
fstream
functional
iomanip
ios
iosfwd
iostream
iso646.h
istream
iterator
limits
list
locale
map
memory
new
numeric
ostream
queue
set
sstream
stack
stdexcept
stl.h
streambuf
string
strstream
typeinfo
use_ansi.h
utility
valarray
vector
wctype.h
xcomplex
xiosbase
xlocale
xlocinfo
xlocinfo.h
xlocmon
xlocnum
xloctime
xmemory
xstddef
xstring
xtree
xutility
ymath.h
yvals.h
stdio
string
time
tools
crt32.nt
dirs
oldv2log.txt
doc
fpw32
langapi
libw32
srcrel
cb.cmd
clean.bat
clean.cmd
cleanbld.cmd
clns_bld.bat
depsed.sed
dirs
log.txt
log_64.txt
log_v40.txt
log_v41.txt
log_v42.txt
log_v50.txt
log_v60.txt
make.cmd
makefile
makefile.inc
makefile.sub
mk.bat
mkbld.cmd
ntia64bld.cmd
prebld.sed
rmdepend.bat
ddk
dload
dloadhandler
efiutil
eventlog
firmware
fs
fsrec
hals
headless
inc
mspatch
mvdm
ntdll
ntdllsym
ntos
ntsetup
pnp
published
qfe
remoteboot
screg
seaudit
strsafe
stublibs
subsys
testlockout
tools
urtl
wdmdrv
wdmlib
win32
wmi
wow64
xip
zlib
dirs
prerelease.inc
project.mk
com
developer
drivers
ds
enduser
inetcore
inetsrv
loc
mergedcomponents
multimedia
net
printscan
public
published
sdktools
shell
termsrv
tools
windows
dirs
makefil0
2025-04-27 07:49:33 -04:00

211 lines
6.3 KiB
Plaintext

// streambuf standard header
#ifndef _STREAMBUF_
#define _STREAMBUF_
#include <xlocnum>
#ifdef _MSC_VER
#pragma pack(push,8)
#endif /* _MSC_VER */
_STD_BEGIN
// TEMPLATE CLASS basic_streambuf
template<class _E, class _Tr = char_traits<_E> >
class basic_streambuf {
protected:
basic_streambuf()
: _Loc() {_Init(); }
basic_streambuf(_Uninitialized)
: _Loc(_Noinit) {}
public:
typedef basic_streambuf<_E, _Tr> _Myt;
typedef _E char_type;
typedef _Tr traits_type;
virtual ~basic_streambuf()
{}
typedef _Tr::int_type int_type;
typedef _Tr::pos_type pos_type;
typedef _Tr::off_type off_type;
pos_type pubseekoff(off_type _O, ios_base::seekdir _W,
ios_base::openmode _M = ios_base::in | ios_base::out)
{return (seekoff(_O, _W, _M)); }
pos_type pubseekoff(off_type _O, ios_base::seek_dir _W,
ios_base::open_mode _M)
{return (pubseekoff(_O, (ios_base::seekdir)_W,
(ios_base::openmode)_M)); }
pos_type pubseekpos(pos_type _P,
ios_base::openmode _M = ios_base::in | ios_base::out)
{return (seekpos(_P, _M)); }
pos_type pubseekpos(pos_type _P, ios_base::open_mode _M)
{return (seekpos(_P, (ios_base::openmode)_M)); }
_Myt *pubsetbuf(_E *_S, streamsize _N)
{return (setbuf(_S, _N)); }
locale pubimbue(const locale &_Ln)
{locale _Lo = _Loc;
imbue(_Ln);
_Loc = _Ln;
return (_Lo); }
locale getloc()
{return (_Loc); }
streamsize in_avail()
{return (gptr() != 0 && gptr() < egptr()
? egptr() - gptr() : showmanyc()); }
int pubsync()
{return (sync()); }
int_type sbumpc()
{return (gptr() != 0 && gptr() < egptr()
? _Tr::to_int_type(*_Gninc()) : uflow()); }
int_type sgetc()
{return (gptr() != 0 && gptr() < egptr()
? _Tr::to_int_type(*gptr()) : underflow()); }
streamsize sgetn(_E *_S, streamsize _N)
{return (xsgetn(_S, _N)); }
int_type snextc()
{return (_Tr::eq_int_type(_Tr::eof(), sbumpc())
? _Tr::eof() : sgetc()); }
int_type sputbackc(_E _C)
{return (gptr() != 0 && eback() < gptr()
&& _Tr::eq(_C, gptr()[-1])
? _Tr::to_int_type(*_Gndec())
: pbackfail(_Tr::to_int_type(_C))); }
void stossc()
{if (gptr() != 0 && gptr() < egptr())
_Gninc();
else
uflow(); }
int_type sungetc()
{return (gptr() != 0 && eback() < gptr()
? _Tr::to_int_type(*_Gndec()) : pbackfail()); }
int_type sputc(_E _C)
{return (pptr() != 0 && pptr() < epptr()
? _Tr::to_int_type(*_Pninc() = _C)
: overflow(_Tr::to_int_type(_C))); }
streamsize sputn(const _E *_S, streamsize _N)
{return (xsputn(_S, _N)); }
protected:
_E *eback() const
{return (*_IGbeg); }
_E *gptr() const
{return (*_IGnext); }
_E *pbase() const
{return (*_IPbeg); }
_E *pptr() const
{return (*_IPnext); }
_E *egptr() const
{return (*_IGnext + *_IGcnt); }
void gbump(int _N)
{*_IGcnt -= _N;
*_IGnext += _N; }
void setg(_E *_B, _E *_N, _E *_L)
{*_IGbeg = _B, *_IGnext = _N, *_IGcnt = (int) (_L - _N); }
_E *epptr() const
{return (*_IPnext + *_IPcnt); }
_E *_Gndec()
{++*_IGcnt;
return (--*_IGnext); }
_E *_Gninc()
{--*_IGcnt;
return ((*_IGnext)++); }
void pbump(int _N)
{*_IPcnt -= _N;
*_IPnext += _N; }
void setp(_E *_B, _E *_L)
{*_IPbeg = _B, *_IPnext = _B, *_IPcnt = (int) (_L - _B); }
void setp(_E *_B, _E *_N, _E *_L)
{*_IPbeg = _B, *_IPnext = _N, *_IPcnt = (int) (_L - _N); }
_E *_Pninc()
{--*_IPcnt;
return ((*_IPnext)++); }
void _Init()
{_IGbeg = &_Gbeg, _IPbeg = &_Pbeg;
_IGnext = &_Gnext, _IPnext = &_Pnext;
_IGcnt = &_Gcnt, _IPcnt = &_Pcnt;
setp(0, 0), setg(0, 0, 0); }
void _Init(_E **_Gb, _E **_Gn, int *_Gc,
_E **_Pb, _E **_Pn, int *_Pc)
{_IGbeg = _Gb, _IPbeg = _Pb;
_IGnext = _Gn, _IPnext = _Pn;
_IGcnt = _Gc, _IPcnt = _Pc; }
virtual int_type overflow(int_type = _Tr::eof())
{return (_Tr::eof()); }
virtual int_type pbackfail(int_type = _Tr::eof())
{return (_Tr::eof()); }
virtual int showmanyc()
{return (0); }
virtual int_type underflow()
{return (_Tr::eof()); }
virtual int_type uflow()
{return (_Tr::eq_int_type(_Tr::eof(), underflow())
? _Tr::eof() : _Tr::to_int_type(*_Gninc())); }
virtual streamsize xsgetn(_E * _S, streamsize _N)
{int_type _C;
streamsize _M, _Ns;
for (_Ns = 0; 0 < _N; )
if (gptr() != 0 && 0 < (_M = (streamsize) (egptr() - gptr())))
{if (_N < _M)
_M = _N;
_Tr::copy(_S, gptr(), _M);
_S += _M, _Ns += _M, _N -= _M, gbump((int)_M); }
else if (_Tr::eq_int_type(_Tr::eof(), _C = uflow()))
break;
else
*_S++ = _Tr::to_char_type(_C), ++_Ns, --_N;
return (_Ns); }
virtual streamsize xsputn(const _E *_S, streamsize _N)
{streamsize _M, _Ns;
for (_Ns = 0; 0 < _N; )
if (pptr() != 0 && 0 < (_M = (streamsize) (epptr() - pptr())))
{if (_N < _M)
_M = _N;
_Tr::copy(pptr(), _S, _M);
_S += _M, _Ns += _M, _N -= _M, pbump((int)_M); }
else if (_Tr::eq_int_type(_Tr::eof(),
overflow(_Tr::to_int_type(*_S))))
break;
else
++_S, ++_Ns, --_N;
return (_Ns); }
virtual pos_type seekoff(off_type, ios_base::seekdir,
ios_base::openmode = ios_base::in | ios_base::out)
{return (streampos(_BADOFF)); }
virtual pos_type seekpos(pos_type,
ios_base::openmode = ios_base::in | ios_base::out)
{return (streampos(_BADOFF)); }
virtual _Myt *setbuf(_E *, streamsize)
{return (this); }
virtual int sync()
{return (0); }
virtual void imbue(const locale& _Loc)
{}
private:
_E *_Gbeg, *_Pbeg;
_E **_IGbeg, **_IPbeg;
_E *_Gnext, *_Pnext;
_E **_IGnext, **_IPnext;
int _Gcnt, _Pcnt;
int *_IGcnt, *_IPcnt;
locale _Loc;
};
#ifdef _DLL
#ifdef __FORCE_INSTANCE
template class _CRTIMP2 basic_streambuf<char, char_traits<char> >;
template class _CRTIMP2 basic_streambuf<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_streambuf<char, char_traits<char> >;
extern template class _CRTIMP2 basic_streambuf<wchar_t, char_traits<wchar_t> >;
#pragma warning(default:4231) /* restore previous warning */
#endif // __FORCE_INSTANCE
#endif // _DLL
_STD_END
#ifdef _MSC_VER
#pragma pack(pop)
#endif /* _MSC_VER */
#endif /* _STREAMBUF_ */
/*
* Copyright (c) 1994 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
*/