189 lines
6.5 KiB
Plaintext
189 lines
6.5 KiB
Plaintext
|
// xiosbase internal header (from <ios>)
|
||
|
#ifndef _XIOSBASE_
|
||
|
#define _XIOSBASE_
|
||
|
#include <xlocale>
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
#pragma pack(push,8)
|
||
|
#if 1200 <= _MSC_VER
|
||
|
#pragma warning(push,3)
|
||
|
#pragma warning(disable:4786)
|
||
|
#endif
|
||
|
#endif /* _MSC_VER */
|
||
|
_STD_BEGIN
|
||
|
// CLASS ios_base
|
||
|
class _CRTIMP ios_base {
|
||
|
public:
|
||
|
// CLASS failure
|
||
|
class failure : public runtime_error {
|
||
|
public:
|
||
|
explicit failure(const string &_S)
|
||
|
: runtime_error(_S) {}
|
||
|
virtual ~failure()
|
||
|
{}
|
||
|
protected:
|
||
|
virtual void _Doraise() const
|
||
|
{_RAISE(*this); }
|
||
|
};
|
||
|
enum _Fmtflags {skipws = 0x0001, unitbuf = 0x0002,
|
||
|
uppercase = 0x0004, showbase = 0x0008,
|
||
|
showpoint = 0x0010, showpos = 0x0020,
|
||
|
left = 0x0040, right = 0x0080, internal = 0x0100,
|
||
|
dec = 0x0200, oct = 0x0400, hex = 0x0800,
|
||
|
scientific = 0x1000, fixed = 0x2000, boolalpha = 0x4000,
|
||
|
adjustfield = 0x01c0, basefield = 0x0e00,
|
||
|
floatfield = 0x3000, _Fmtmask = 0x7fff, _Fmtzero = 0};
|
||
|
enum _Iostate {goodbit = 0x0, eofbit = 0x1,
|
||
|
failbit = 0x2, badbit = 0x4, _Statmask = 0x7};
|
||
|
enum _Openmode {in = 0x01, out = 0x02, ate = 0x04,
|
||
|
app = 0x08, trunc = 0x10, binary = 0x20};
|
||
|
enum seekdir {beg = 0, cur = 1, end = 2};
|
||
|
enum event {erase_event, imbue_event, copyfmt_event};
|
||
|
typedef void (__cdecl *event_callback)(event, ios_base&, int);
|
||
|
_BITMASK(_Fmtflags, fmtflags);
|
||
|
_BITMASK(_Iostate, iostate);
|
||
|
_BITMASK(_Openmode, openmode);
|
||
|
typedef short io_state, open_mode, seek_dir;
|
||
|
// CLASS Init
|
||
|
class _CRTIMP Init {
|
||
|
public:
|
||
|
Init();
|
||
|
~Init();
|
||
|
private:
|
||
|
static int _Init_cnt;
|
||
|
};
|
||
|
ios_base& operator=(const ios_base& _R)
|
||
|
{if (this != &_R)
|
||
|
{_State = _R._State;
|
||
|
copyfmt(_R); }
|
||
|
return (*this); }
|
||
|
operator void *() const
|
||
|
{return (fail() ? 0 : (void *)this); }
|
||
|
bool operator!() const
|
||
|
{return (fail()); }
|
||
|
void clear(iostate = goodbit, bool = false);
|
||
|
void clear(io_state _St)
|
||
|
{clear((iostate)_St); }
|
||
|
iostate rdstate() const
|
||
|
{return (_State); }
|
||
|
void setstate(iostate _St, bool _Ex = false)
|
||
|
{if (_St != goodbit)
|
||
|
clear((iostate)((int)rdstate() | (int)_St), _Ex); }
|
||
|
void setstate(io_state _St)
|
||
|
{setstate((iostate)_St); }
|
||
|
bool good() const
|
||
|
{return (rdstate() == goodbit); }
|
||
|
bool eof() const
|
||
|
{return ((int)rdstate() & (int)eofbit); }
|
||
|
bool fail() const
|
||
|
{return (((int)rdstate() & ((int)badbit | (int)failbit)) != 0); }
|
||
|
bool bad() const
|
||
|
{return (((int)rdstate() & (int)badbit) != 0); }
|
||
|
iostate exceptions() const
|
||
|
{return (_Except); }
|
||
|
void exceptions(iostate _Ne)
|
||
|
{_Except = _Ne & _Statmask;
|
||
|
clear(_State); }
|
||
|
void exceptions(io_state _St)
|
||
|
{exceptions((iostate)_St); }
|
||
|
fmtflags flags() const
|
||
|
{return (_Fmtfl); }
|
||
|
fmtflags flags(fmtflags _Nf)
|
||
|
{fmtflags _Of = _Fmtfl;
|
||
|
_Fmtfl = _Nf & _Fmtmask;
|
||
|
return (_Of); }
|
||
|
fmtflags setf(fmtflags _Nf)
|
||
|
{ios_base::fmtflags _Of = _Fmtfl;
|
||
|
_Fmtfl |= _Nf & _Fmtmask;
|
||
|
return (_Of); }
|
||
|
fmtflags setf(fmtflags _Nf, fmtflags _M)
|
||
|
{ios_base::fmtflags _Of = _Fmtfl;
|
||
|
_Fmtfl = (_Fmtfl & ~_M) | (_Nf & _M & _Fmtmask);
|
||
|
return (_Of); }
|
||
|
void unsetf(fmtflags _M)
|
||
|
{_Fmtfl &= ~_M; }
|
||
|
streamsize precision() const
|
||
|
{return (_Prec); }
|
||
|
streamsize precision(int _Np)
|
||
|
{streamsize _Op = _Prec;
|
||
|
_Prec = _Np;
|
||
|
return (_Op); }
|
||
|
streamsize width() const
|
||
|
{return (_Wide); }
|
||
|
streamsize width(streamsize _Nw)
|
||
|
{streamsize _Ow = _Wide;
|
||
|
_Wide = (int)_Nw;
|
||
|
return (_Ow); }
|
||
|
locale getloc() const
|
||
|
{return (_Loc); }
|
||
|
locale imbue(const locale&);
|
||
|
static int __cdecl xalloc()
|
||
|
{_Lockit _Lk;
|
||
|
return (_Index++); }
|
||
|
long& iword(int _Idx)
|
||
|
{return (_Findarr(_Idx)._Lo); }
|
||
|
void *& pword(int _Idx)
|
||
|
{return (_Findarr(_Idx)._Vp); }
|
||
|
void register_callback(event_callback, int);
|
||
|
ios_base& copyfmt(const ios_base&);
|
||
|
virtual ~ios_base();
|
||
|
static bool __cdecl sync_with_stdio(bool _Sfl = true)
|
||
|
{_Lockit _Lk;
|
||
|
const bool _Osfl = _Sync;
|
||
|
_Sync = _Sfl;
|
||
|
return (_Osfl); }
|
||
|
protected:
|
||
|
ios_base()
|
||
|
: _Loc(_Noinit), _Stdstr(0) {}
|
||
|
void _Addstd();
|
||
|
void _Init();
|
||
|
private:
|
||
|
// STRUCT _Iosarray
|
||
|
struct _Iosarray {
|
||
|
public:
|
||
|
_Iosarray(int _Idx, _Iosarray *_Link)
|
||
|
: _Next(_Link), _Index(_Idx), _Lo(0), _Vp(0) {}
|
||
|
_Iosarray *_Next;
|
||
|
int _Index;
|
||
|
long _Lo;
|
||
|
void *_Vp;
|
||
|
};
|
||
|
// STRUCT _Fnarray
|
||
|
struct _Fnarray {
|
||
|
_Fnarray(int _Idx, event_callback _P, _Fnarray *_Link)
|
||
|
: _Next(_Link), _Index(_Idx), _Pfn(_P) {}
|
||
|
_Fnarray *_Next;
|
||
|
int _Index;
|
||
|
event_callback _Pfn;
|
||
|
};
|
||
|
void _Callfns(event);
|
||
|
_Iosarray& _Findarr(int);
|
||
|
void _Tidy();
|
||
|
iostate _State, _Except;
|
||
|
fmtflags _Fmtfl;
|
||
|
int _Prec, _Wide;
|
||
|
_Iosarray *_Arr;
|
||
|
_Fnarray *_Calls;
|
||
|
locale _Loc;
|
||
|
size_t _Stdstr;
|
||
|
static int _Index;
|
||
|
static bool _Sync;
|
||
|
};
|
||
|
_BITMASK_OPS(ios_base::_Fmtflags)
|
||
|
_BITMASK_OPS(ios_base::_Iostate)
|
||
|
_BITMASK_OPS(ios_base::_Openmode)
|
||
|
_STD_END
|
||
|
#ifdef _MSC_VER
|
||
|
#if 1200 <= _MSC_VER
|
||
|
#pragma warning(pop)
|
||
|
#endif
|
||
|
#pragma pack(pop)
|
||
|
#endif /* _MSC_VER */
|
||
|
|
||
|
#endif /* _XIOSBASE_ */
|
||
|
|
||
|
/*
|
||
|
* Copyright (c) 1995 by P.J. Plauger. ALL RIGHTS RESERVED.
|
||
|
* Consult your license regarding permissions and restrictions.
|
||
|
*/
|