// iomanip standard header
#pragma once
#ifndef _IOMANIP_
#define _IOMANIP_
#include <istream>

#pragma pack(push,8)
#pragma warning(push,3)
_STD_BEGIN

		// TEMPLATE STRUCT _Fillobj
template<class _Elem>
	struct _Fillobj
	{	// store fill character
	_Fillobj(_Elem _Ch)
		: _Fill(_Ch)
		{	// construct from fill character
		}

	_Elem _Fill;	// the fill character
	};

		// TEMPLATE FUNCTION setfill
template<class _Elem> inline
	_Fillobj<_Elem> __cdecl setfill(_Elem _Ch)
	{	// return a _Fillobj manipulator
	return (_Fillobj<_Elem>(_Ch));
	}

template<class _Elem, class _Traits> inline
	basic_istream<_Elem, _Traits>&
		__cdecl operator>>(basic_istream<_Elem, _Traits>& _Istr,
			const _Fillobj<_Elem>& _Manip)
	{	// set fill character in input stream
	_Istr.fill(_Manip._Fill);
	return (_Istr);
	}

template<class _Elem, class _Traits> inline
	basic_ostream<_Elem, _Traits>&
		__cdecl operator<<(basic_ostream<_Elem, _Traits>& _Ostr,
			const _Fillobj<_Elem>& _Manip)
	{	// set fill character in output stream
	_Ostr.fill(_Manip._Fill);
	return (_Ostr);
	}

		// TEMPLATE STRUCT _Smanip
template<class _Arg>
	struct _Smanip
	{	// store function pointer and argument value
	_Smanip(void (__cdecl *_Left)(ios_base&, _Arg), _Arg _Val)
		: _Pfun(_Left), _Manarg(_Val)
		{	// construct from function pointer and argument value
		}

	void (__cdecl *_Pfun)(ios_base&, _Arg);	// the function pointer
	_Arg _Manarg;	// the argument value
	};

template<class _Elem, class _Traits, class _Arg> inline
	basic_istream<_Elem, _Traits>& __cdecl operator>>(
		basic_istream<_Elem, _Traits>& _Istr, const _Smanip<_Arg>& _Manip)
	{	// extract by calling function with input stream and argument
	(*_Manip._Pfun)(_Istr, _Manip._Manarg);
	return (_Istr);
	}

template<class _Elem, class _Traits, class _Arg> inline
	basic_ostream<_Elem, _Traits>& __cdecl operator<<(
		basic_ostream<_Elem, _Traits>& _Ostr, const _Smanip<_Arg>& _Manip)
	{	// insert by calling function with output stream and argument
	(*_Manip._Pfun)(_Ostr, _Manip._Manarg);
	return (_Ostr);
	}

		// INSTANTIATIONS
_CRTIMP2 _Smanip<ios_base::fmtflags> __cdecl resetiosflags(ios_base::fmtflags);
_CRTIMP2 _Smanip<ios_base::fmtflags> __cdecl setiosflags(ios_base::fmtflags);
_CRTIMP2 _Smanip<int> __cdecl setbase(int);
_CRTIMP2 _Smanip<streamsize> __cdecl setprecision(streamsize);
_CRTIMP2 _Smanip<streamsize> __cdecl setw(streamsize);
_STD_END
#pragma warning(pop)
#pragma pack(pop)

#endif /* _IOMANIP_ */

/*
 * Copyright (c) 1992-2002 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
 V3.13:0009 */
