// ios standard header #pragma once #ifndef _IOS_ #define _IOS_ #include #pragma pack(push,8) #pragma warning(push,3) _STD_BEGIN // TEMPLATE CLASS basic_ios template 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 >; template class _CRTIMP2 basic_ios >; #ifdef _CRTBLD_NATIVE_WCHAR_T template class _CRTIMP2 basic_ios >; #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 */