_iomanip.h revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_INTERNAL_IOMANIP 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_INTERNAL_IOMANIP 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_INTERNAL_ISTREAM 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stl/_istream.h> // Includes <ostream> and <ios> 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Machinery for defining manipulators. 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class that calls one of ios_base's single-argument member functions. 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg> 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Ios_Manip_1 { 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Arg (ios_base::*__f_ptr_type)(_Arg); 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Manip_1(__f_ptr_type __f, const _Arg& __arg) 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_f(__f), _M_arg(__arg) {} 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void operator()(ios_base& __ios) const 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { (__ios.*_M_f)(_M_arg); } 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f_ptr_type _M_f; 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Arg _M_arg; 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class that calls one of ios_base's two-argument member functions. 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Ios_Setf_Manip { 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags _M_flag; 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags _M_mask; 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_two_args; 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Setf_Manip(ios_base::fmtflags __f) 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_flag(__f), _M_mask(0), _M_two_args(false) {} 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Setf_Manip(ios_base::fmtflags __f, ios_base::fmtflags __m) 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_flag(__f), _M_mask(__m), _M_two_args(true) {} 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void operator()(ios_base& __ios) const { 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (_M_two_args) 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __ios.setf(_M_flag, _M_mask); 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __ios.setf(_M_flag); 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Arg> 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __istr, 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _STLP_PRIV _Ios_Manip_1<_Arg>& __f) { 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__istr); 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __istr; 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Arg> 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _STLP_PRIV _Ios_Manip_1<_Arg>& __f) { 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__os); 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottoperator>>(basic_istream<_CharT, _Traits>& __istr, 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _STLP_PRIV _Ios_Setf_Manip& __f) { 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__istr); 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __istr; 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottoperator<<(basic_ostream<_CharT, _Traits>& __os, 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _STLP_PRIV _Ios_Setf_Manip& __f) { 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__os); 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The ios_base manipulators. 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_PRIV _Ios_Setf_Manip _STLP_CALL resetiosflags(ios_base::fmtflags __mask) 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV _Ios_Setf_Manip(0, __mask); } 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_PRIV _Ios_Setf_Manip _STLP_CALL setiosflags(ios_base::fmtflags __flag) 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV _Ios_Setf_Manip(__flag); } 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_PRIV _Ios_Setf_Manip _STLP_CALL setbase(int __n) { 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags __base = __n == 8 ? ios_base::oct : 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __n == 10 ? ios_base::dec : 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __n == 16 ? ios_base::hex : 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags(0); 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV _Ios_Setf_Manip(__base, ios_base::basefield); 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_PRIV _Ios_Manip_1<streamsize> _STLP_CALL 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksetprecision(int __n) { 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::precision; 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV _Ios_Manip_1<streamsize>(__f, __n); 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_PRIV _Ios_Manip_1<streamsize> _STLP_CALL 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksetw(int __n) { 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::width; 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV _Ios_Manip_1<streamsize>(__f, __n); 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// setfill, a manipulator that operates on basic_ios<> instead of ios_base. 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT> 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Setfill_Manip { 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Setfill_Manip(_CharT __c) : _M_c(__c) {} 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CharT _M_c; 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _CharT2, class _Traits> 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _STLP_PRIV _Setfill_Manip<_CharT2>& __m) { 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os.fill(__m._M_c); 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _CharT2, class _Traits> 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __is, 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _STLP_PRIV _Setfill_Manip<_CharT2>& __m) { 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __is.fill(__m._M_c); 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __is; 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT> 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_PRIV _Setfill_Manip<_CharT> _STLP_CALL setfill(_CharT __c) 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV _Setfill_Manip<_CharT>(__c); } 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_INTERNAL_IOMANIP */ 166