// iomanip standard header
#ifndef_IOMANIP_
#define_IOMANIP_
#include <istream>
#include <ostream>
// template class smanip
template<class_T> class smanip {
public:
smanip(ios& (*_F)(ios&,_T),_T_A)
:_Pf(_F),_Manarg(_A) {}
ios& (*_Pf)(ios&,_T);
_T_Manarg;
};
template<class _T> inline
istream& operator>>(istream& _I, const smanip<_T>& _M)
{ // apply manipulator to input stream
_TRY_BEGIN
(*_M._Pf) (_I, _M._Manarg);
_CATCH_ALL
_I.setstate(ios::failbit);
_CATCH_END
return (_I);
}
template<class _T> inline
ostream& operator<<(ostream& _0, const smanip<_T>& _M)
{ // apply manipulator to output stream
_TRY_BEGIN
(*_M._Pf)(_O, _M._Manarg);
_CATCH_ALL
_0.setstate(ios::failbit);
_CATCH_END
return (_0);
}
// template class imanip
template<class _T> class imanip {
public:
imanip(istream& (*_F)(istream&, _T), _T_A)
: _Pf(F), _Manarg(_A) {}
istream& (*_Pf)(istream&, _T);
_T_Manarg;
};
template<class _T> inline
istream& operator>>(istream& _I, const imanip<_T>& _M)
{ // apply input manipulator to input stream
_TRY_BEGIN
(*_M._Pf)(_I,_M._Manarg);
_CATCH_ALL
_I.setstate(ios::failbit);
_CATCH_END
return (_I);
}
// template class omanip
template<class _T> class omanip {
public:
omanip(ostream& (*_F)(ostream&, _T),_T _A)
: _Pf(_F), _Manarg(_A) {}
ostream& (*_Pf)(ostream&, _T);
_T _Manarg;
};
template<class _T> inline
ostream& operator<<(ostream& _0, const omanip<_T>& _M)
{ // apply manipulator to output stream
_TRY_BEGIN
(*_M._Pf)(_0, _M._Manarg);
_CATCH_ALL
_0.setstate(ios::failbit);
_CATCH_END
return (0);
}
// instantiations
smanip<ios::fmtflags> resetiosflags(ios::fmtflags);
smanip<ios::fmtflags> setiosflags(ios::fmtflags);
smanip<int> setbase(int);
smanip<int> setfill(int);
smanip<int> setprecision(int);
smanip<int> setw(int);
#endif