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