Source code of Windows XP (NT5)
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.0 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 */