You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
305 lines
7.3 KiB
305 lines
7.3 KiB
// ios standard header
|
|
#pragma once
|
|
#ifndef _IOS_
|
|
#define _IOS_
|
|
#include <xlocnum>
|
|
|
|
#pragma pack(push,8)
|
|
#pragma warning(push,3)
|
|
_STD_BEGIN
|
|
|
|
// TEMPLATE CLASS basic_ios
|
|
template<class _Elem,
|
|
class _Traits>
|
|
class basic_ios
|
|
: public ios_base
|
|
{ // base class for basic_istream/basic_ostream
|
|
public:
|
|
typedef basic_ios<_Elem, _Traits> _Myt;
|
|
typedef basic_ostream<_Elem, _Traits> _Myos;
|
|
typedef basic_streambuf<_Elem, _Traits> _Mysb;
|
|
typedef ctype<_Elem> _Ctype;
|
|
typedef _Elem char_type;
|
|
typedef _Traits traits_type;
|
|
typedef typename _Traits::int_type int_type;
|
|
typedef typename _Traits::pos_type pos_type;
|
|
typedef typename _Traits::off_type off_type;
|
|
|
|
explicit basic_ios(_Mysb *_Strbuf)
|
|
{ // construct from stream buffer pointer
|
|
init(_Strbuf);
|
|
}
|
|
|
|
virtual ~basic_ios()
|
|
{ // destroy the object
|
|
}
|
|
|
|
void clear(iostate _State = goodbit, bool _Except = false)
|
|
{ // set state, possibly reraise exception
|
|
ios_base::clear((iostate)(_Mystrbuf == 0
|
|
? (int)_State | (int)badbit : (int)_State), _Except);
|
|
}
|
|
|
|
void clear(io_state _State)
|
|
{ // set state to _State
|
|
clear((iostate)_State);
|
|
}
|
|
|
|
void setstate(iostate _State, bool _Except = false)
|
|
{ // merge _State into state, possible reraise exception
|
|
if (_State != goodbit)
|
|
clear((iostate)((int)rdstate() | (int)_State), _Except);
|
|
}
|
|
|
|
void setstate(io_state _State)
|
|
{ // merge _State into state
|
|
setstate((iostate)_State);
|
|
}
|
|
|
|
_Myt& copyfmt(const _Myt& _Right)
|
|
{ // copy format parameters
|
|
_Tiestr = _Right.tie();
|
|
_Fillch = _Right.fill();
|
|
ios_base::copyfmt(_Right);
|
|
return (*this);
|
|
}
|
|
|
|
_Myos *tie() const
|
|
{ // return tie pointer
|
|
return (_Tiestr);
|
|
}
|
|
|
|
_Myos *tie(_Myos *_Newtie)
|
|
{ // set tie pointer
|
|
_Myos *_Oldtie = _Tiestr;
|
|
_Tiestr = _Newtie;
|
|
return (_Oldtie);
|
|
}
|
|
|
|
_Mysb *rdbuf() const
|
|
{ // return stream buffer pointer
|
|
return (_Mystrbuf);
|
|
}
|
|
|
|
_Mysb *rdbuf(_Mysb *_Strbuf)
|
|
{ // set stream buffer pointer
|
|
_Mysb *_Oldstrbuf = _Mystrbuf;
|
|
_Mystrbuf = _Strbuf;
|
|
clear();
|
|
return (_Oldstrbuf);
|
|
}
|
|
|
|
locale imbue(const locale& _Loc)
|
|
{ // set locale to argument
|
|
locale _Oldlocale = ios_base::imbue(_Loc);
|
|
if (rdbuf() != 0)
|
|
rdbuf()->pubimbue(_Loc);
|
|
return (_Oldlocale);
|
|
}
|
|
|
|
_Elem fill() const
|
|
{ // return fill character
|
|
return (_Fillch);
|
|
}
|
|
|
|
_Elem fill(_Elem _Newfill)
|
|
{ // set fill character
|
|
_Elem _Oldfill = _Fillch;
|
|
_Fillch = _Newfill;
|
|
return (_Oldfill);
|
|
}
|
|
|
|
char narrow(_Elem _Ch, char _Dflt = '\0') const
|
|
{ // convert _Ch to byte using imbued locale
|
|
const _Ctype& _Facet = _USE(getloc(), _Ctype);
|
|
return (_Facet.narrow(_Ch, _Dflt));
|
|
}
|
|
|
|
_Elem widen(char _Byte) const
|
|
{ // convert _Byte to character using imbued locale
|
|
const _Ctype& _Facet = _USE(getloc(), _Ctype);
|
|
return (_Facet.widen(_Byte));
|
|
}
|
|
|
|
protected:
|
|
void init(_Mysb *_Strbuf = 0, bool _Isstd = false)
|
|
{ // initialize with stream buffer pointer
|
|
_Mystrbuf = _Strbuf;
|
|
_Tiestr = 0;
|
|
_Fillch = _WIDEN(_Elem, ' ');
|
|
_Init(); // initialize ios_base
|
|
|
|
if (_Mystrbuf == 0)
|
|
setstate(badbit);
|
|
if (_Isstd)
|
|
_Addstd(); // special handling for standard streams
|
|
}
|
|
|
|
basic_ios()
|
|
{ // default constructor, do nothing
|
|
}
|
|
|
|
private:
|
|
basic_ios(const _Myt&); // not defined
|
|
_Myt& operator=(const _Myt&); // not defined
|
|
|
|
_Mysb *_Mystrbuf; // pointer to stream buffer
|
|
_Myos *_Tiestr; // pointer to tied output stream
|
|
_Elem _Fillch; // the fill character
|
|
};
|
|
|
|
#ifdef _DLL_CPPLIB
|
|
#ifdef __FORCE_INSTANCE
|
|
template class _CRTIMP2 basic_ios<char,
|
|
char_traits<char> >;
|
|
template class _CRTIMP2 basic_ios<wchar_t,
|
|
char_traits<wchar_t> >;
|
|
#ifdef _CRTBLD_NATIVE_WCHAR_T
|
|
template class _CRTIMP2 basic_ios<unsigned short,
|
|
char_traits<unsigned short> >;
|
|
#endif
|
|
#endif // __FORCE_INSTANCE
|
|
#endif // _DLL_CPPLIB
|
|
|
|
// MANIPULATORS
|
|
inline ios_base& __cdecl boolalpha(ios_base& _Iosbase)
|
|
{ // set boolalpha
|
|
_Iosbase.setf(ios_base::boolalpha);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl dec(ios_base& _Iosbase)
|
|
{ // set basefield to dec
|
|
_Iosbase.setf(ios_base::dec, ios_base::basefield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl fixed(ios_base& _Iosbase)
|
|
{ // set floatfield to fixed
|
|
_Iosbase.setf(ios_base::fixed, ios_base::floatfield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl hex(ios_base& _Iosbase)
|
|
{ // set basefield to hex
|
|
_Iosbase.setf(ios_base::hex, ios_base::basefield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl internal(ios_base& _Iosbase)
|
|
{ // set adjustfield to internal
|
|
_Iosbase.setf(ios_base::internal, ios_base::adjustfield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl left(ios_base& _Iosbase)
|
|
{ // set adjustfield to left
|
|
_Iosbase.setf(ios_base::left, ios_base::adjustfield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl noboolalpha(ios_base& _Iosbase)
|
|
{ // clear boolalpha
|
|
_Iosbase.unsetf(ios_base::boolalpha);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl noshowbase(ios_base& _Iosbase)
|
|
{ // clear showbase
|
|
_Iosbase.unsetf(ios_base::showbase);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl noshowpoint(ios_base& _Iosbase)
|
|
{ // clear showpoint
|
|
_Iosbase.unsetf(ios_base::showpoint);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl noshowpos(ios_base& _Iosbase)
|
|
{ // clear showpos
|
|
_Iosbase.unsetf(ios_base::showpos);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl noskipws(ios_base& _Iosbase)
|
|
{ // clear skipws
|
|
_Iosbase.unsetf(ios_base::skipws);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl nounitbuf(ios_base& _Iosbase)
|
|
{ // clear unitbuf
|
|
_Iosbase.unsetf(ios_base::unitbuf);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl nouppercase(ios_base& _Iosbase)
|
|
{ // clear uppercase
|
|
_Iosbase.unsetf(ios_base::uppercase);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl oct(ios_base& _Iosbase)
|
|
{ // set oct in basefield
|
|
_Iosbase.setf(ios_base::oct, ios_base::basefield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl right(ios_base& _Iosbase)
|
|
{ // set right in adjustfield
|
|
_Iosbase.setf(ios_base::right, ios_base::adjustfield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl scientific(ios_base& _Iosbase)
|
|
{ // set scientific in floatfield
|
|
_Iosbase.setf(ios_base::scientific, ios_base::floatfield);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl showbase(ios_base& _Iosbase)
|
|
{ // set showbase
|
|
_Iosbase.setf(ios_base::showbase);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl showpoint(ios_base& _Iosbase)
|
|
{ // set showpoint
|
|
_Iosbase.setf(ios_base::showpoint);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl showpos(ios_base& _Iosbase)
|
|
{ // set showpos
|
|
_Iosbase.setf(ios_base::showpos);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl skipws(ios_base& _Iosbase)
|
|
{ // set skipws
|
|
_Iosbase.setf(ios_base::skipws);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl unitbuf(ios_base& _Iosbase)
|
|
{ // set unitbuf
|
|
_Iosbase.setf(ios_base::unitbuf);
|
|
return (_Iosbase);
|
|
}
|
|
|
|
inline ios_base& __cdecl uppercase(ios_base& _Iosbase)
|
|
{ // set uppercase
|
|
_Iosbase.setf(ios_base::uppercase);
|
|
return (_Iosbase);
|
|
}
|
|
_STD_END
|
|
#pragma warning(pop)
|
|
#pragma pack(pop)
|
|
|
|
#endif /* _IOS_ */
|
|
|
|
/*
|
|
* Copyright (c) 1992-2001 by P.J. Plauger. ALL RIGHTS RESERVED.
|
|
* Consult your license regarding permissions and restrictions.
|
|
V3.10:0009 */
|