williamr@4: /* williamr@4: * Copyright (c) 1999 williamr@4: * Silicon Graphics Computer Systems, Inc. williamr@4: * williamr@4: * Copyright (c) 1999 williamr@4: * Boris Fomitchev williamr@4: * williamr@4: * This material is provided "as is", with absolutely no warranty expressed williamr@4: * or implied. Any use is at your own risk. williamr@4: * williamr@4: * Permission to use or copy this software for any purpose is hereby granted williamr@4: * without fee, provided the above notices are retained on all copies. williamr@4: * Permission to modify the code and to distribute modified code is granted, williamr@4: * provided the above notices are retained, and a notice that the code was williamr@4: * modified is included with the above copyright notice. williamr@4: * williamr@4: */ williamr@4: williamr@4: #ifndef _STLP_IOMANIP williamr@4: #define _STLP_IOMANIP williamr@4: williamr@4: #ifndef _STLP_OUTERMOST_HEADER_ID williamr@4: # define _STLP_OUTERMOST_HEADER_ID 0x1030 williamr@4: # include williamr@4: #endif williamr@4: williamr@4: #ifdef _STLP_PRAGMA_ONCE williamr@4: # pragma once williamr@4: #endif williamr@4: williamr@4: #include williamr@4: #include // includes and williamr@4: williamr@4: _STLP_BEGIN_NAMESPACE williamr@4: williamr@4: //---------------------------------------------------------------------- williamr@4: // Machinery for defining manipulators. williamr@4: williamr@4: // Class that calls one of ios_base's single-argument member functions. williamr@4: template williamr@4: struct _Ios_Manip_1 { williamr@4: typedef _Arg (ios_base::*__f_ptr_type)(_Arg); williamr@4: williamr@4: _Ios_Manip_1(__f_ptr_type __f, const _Arg& __arg) williamr@4: : _M_f(__f), _M_arg(__arg) {} williamr@4: williamr@4: void operator()(ios_base& __ios) const williamr@4: { (__ios.*_M_f)(_M_arg); } williamr@4: williamr@4: __f_ptr_type _M_f; williamr@4: _Arg _M_arg; williamr@4: }; williamr@4: williamr@4: // Class that calls one of ios_base's two-argument member functions. williamr@4: struct _Ios_Setf_Manip { williamr@4: ios_base::fmtflags _M_flag; williamr@4: ios_base::fmtflags _M_mask; williamr@4: bool _M_two_args; williamr@4: williamr@4: _Ios_Setf_Manip(ios_base::fmtflags __f) williamr@4: : _M_flag(__f), _M_mask(0), _M_two_args(false) {} williamr@4: williamr@4: _Ios_Setf_Manip(ios_base::fmtflags __f, ios_base::fmtflags __m) williamr@4: : _M_flag(__f), _M_mask(__m), _M_two_args(true) {} williamr@4: williamr@4: void operator()(ios_base& __ios) const { williamr@4: if (_M_two_args) williamr@4: __ios.setf(_M_flag, _M_mask); williamr@4: else williamr@4: __ios.setf(_M_flag); williamr@4: } williamr@4: }; williamr@4: williamr@4: williamr@4: template williamr@4: inline basic_istream<_CharT, _Traits>& _STLP_CALL williamr@4: operator>>(basic_istream<_CharT, _Traits>& __istr, williamr@4: const _Ios_Manip_1<_Arg>& __f) { williamr@4: __f(__istr); williamr@4: return __istr; williamr@4: } williamr@4: williamr@4: template williamr@4: inline basic_ostream<_CharT, _Traits>& _STLP_CALL williamr@4: operator<<(basic_ostream<_CharT, _Traits>& __os, williamr@4: const _Ios_Manip_1<_Arg>& __f) { williamr@4: __f(__os); williamr@4: return __os; williamr@4: } williamr@4: williamr@4: template williamr@4: inline basic_istream<_CharT, _Traits>& _STLP_CALL williamr@4: operator>>(basic_istream<_CharT, _Traits>& __istr, const _Ios_Setf_Manip& __f) { williamr@4: __f(__istr); williamr@4: return __istr; williamr@4: } williamr@4: williamr@4: template williamr@4: inline basic_ostream<_CharT, _Traits>& _STLP_CALL williamr@4: operator<<(basic_ostream<_CharT, _Traits>& __os, const _Ios_Setf_Manip& __f) { williamr@4: __f(__os); williamr@4: return __os; williamr@4: } williamr@4: williamr@4: //---------------------------------------------------------------------- williamr@4: // The ios_base manipulators. williamr@4: inline _Ios_Setf_Manip _STLP_CALL resetiosflags(ios_base::fmtflags __mask) williamr@4: { return _Ios_Setf_Manip(0, __mask); } williamr@4: williamr@4: inline _Ios_Setf_Manip _STLP_CALL setiosflags(ios_base::fmtflags __flag) williamr@4: { return _Ios_Setf_Manip(__flag); } williamr@4: williamr@4: inline _Ios_Setf_Manip _STLP_CALL setbase(int __n) { williamr@4: ios_base::fmtflags __base = __n == 8 ? ios_base::oct : williamr@4: __n == 10 ? ios_base::dec : williamr@4: __n == 16 ? ios_base::hex : williamr@4: ios_base::fmtflags(0); williamr@4: return _Ios_Setf_Manip(__base, ios_base::basefield); williamr@4: } williamr@4: williamr@4: inline _Ios_Manip_1 _STLP_CALL williamr@4: setprecision(int __n) { williamr@4: _Ios_Manip_1::__f_ptr_type __f = &ios_base::precision; williamr@4: return _Ios_Manip_1(__f, __n); williamr@4: } williamr@4: williamr@4: inline _Ios_Manip_1 _STLP_CALL williamr@4: setw(int __n) { williamr@4: _Ios_Manip_1::__f_ptr_type __f = &ios_base::width; williamr@4: return _Ios_Manip_1(__f, __n); williamr@4: } williamr@4: williamr@4: //---------------------------------------------------------------------- williamr@4: // setfill, a manipulator that operates on basic_ios<> instead of ios_base. williamr@4: williamr@4: template williamr@4: struct _Setfill_Manip { williamr@4: _Setfill_Manip(_CharT __c) : _M_c(__c) {} williamr@4: _CharT _M_c; williamr@4: }; williamr@4: williamr@4: template williamr@4: inline basic_ostream<_CharT, _Traits>& _STLP_CALL williamr@4: operator<<(basic_ostream<_CharT, _Traits>& __os, williamr@4: const _Setfill_Manip<_CharT2>& __m) { williamr@4: __os.fill(__m._M_c); williamr@4: return __os; williamr@4: } williamr@4: williamr@4: template williamr@4: inline basic_istream<_CharT, _Traits>& _STLP_CALL williamr@4: operator>>(basic_istream<_CharT, _Traits>& __is, williamr@4: const _Setfill_Manip<_CharT2>& __m) { williamr@4: __is.fill(__m._M_c); williamr@4: return __is; williamr@4: } williamr@4: williamr@4: template williamr@4: inline _Setfill_Manip<_CharT> _STLP_CALL williamr@4: setfill(_CharT __c) { williamr@4: return _Setfill_Manip<_CharT>(__c); williamr@4: } williamr@4: williamr@4: _STLP_END_NAMESPACE williamr@4: williamr@4: #if (_STLP_OUTERMOST_HEADER_ID == 0x1030) williamr@4: # include williamr@4: # undef _STLP_OUTERMOST_HEADER_ID williamr@4: #endif williamr@4: williamr@4: #endif /* _STLP_IOMANIP */ williamr@4: williamr@4: // Local Variables: williamr@4: // mode:C++ williamr@4: // End: