_iomanip.h revision 9720d5f59b9c1f5d1b9ecbc9173dbcb71bd557be
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 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_IOMANIP 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_IOMANIP 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_OUTERMOST_HEADER_ID 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_OUTERMOST_HEADER_ID 0x1030 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_prolog.h> 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_PRAGMA_ONCE 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# pragma once 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/_ioserr.h> 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/_istream.h> // Includes <ostream> and <ios> 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Machinery for defining manipulators. 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class that calls one of ios_base's single-argument member functions. 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Arg> 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Ios_Manip_1 { 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Arg (ios_base::*__f_ptr_type)(_Arg); 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Manip_1(__f_ptr_type __f, const _Arg& __arg) 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_f(__f), _M_arg(__arg) {} 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void operator()(ios_base& __ios) const 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { (__ios.*_M_f)(_M_arg); } 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f_ptr_type _M_f; 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Arg _M_arg; 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class that calls one of ios_base's two-argument member functions. 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Ios_Setf_Manip { 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags _M_flag; 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags _M_mask; 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_two_args; 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Setf_Manip(ios_base::fmtflags __f) 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_flag(__f), _M_mask(0), _M_two_args(false) {} 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Setf_Manip(ios_base::fmtflags __f, ios_base::fmtflags __m) 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_flag(__f), _M_mask(__m), _M_two_args(true) {} 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void operator()(ios_base& __ios) const { 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (_M_two_args) 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __ios.setf(_M_flag, _M_mask); 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __ios.setf(_M_flag); 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Arg> 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __istr, 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Ios_Manip_1<_Arg>& __f) { 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__istr); 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __istr; 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Arg> 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Ios_Manip_1<_Arg>& __f) { 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__os); 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __istr, const _Ios_Setf_Manip& __f) { 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__istr); 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __istr; 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, const _Ios_Setf_Manip& __f) { 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __f(__os); 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The ios_base manipulators. 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Ios_Setf_Manip _STLP_CALL resetiosflags(ios_base::fmtflags __mask) 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _Ios_Setf_Manip(0, __mask); } 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Ios_Setf_Manip _STLP_CALL setiosflags(ios_base::fmtflags __flag) 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _Ios_Setf_Manip(__flag); } 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Ios_Setf_Manip _STLP_CALL setbase(int __n) { 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags __base = __n == 8 ? ios_base::oct : 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __n == 10 ? ios_base::dec : 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __n == 16 ? ios_base::hex : 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ios_base::fmtflags(0); 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Ios_Setf_Manip(__base, ios_base::basefield); 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Ios_Manip_1<streamsize> _STLP_CALL 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksetprecision(int __n) { 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::precision; 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Ios_Manip_1<streamsize>(__f, __n); 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Ios_Manip_1<streamsize> _STLP_CALL 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksetw(int __n) { 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::width; 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Ios_Manip_1<streamsize>(__f, __n); 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// setfill, a manipulator that operates on basic_ios<> instead of ios_base. 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT> 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Setfill_Manip { 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Setfill_Manip(_CharT __c) : _M_c(__c) {} 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CharT _M_c; 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _CharT2, class _Traits> 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_ostream<_CharT, _Traits>& _STLP_CALL 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Setfill_Manip<_CharT2>& __m) { 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __os.fill(__m._M_c); 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __os; 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _CharT2, class _Traits> 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __is, 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Setfill_Manip<_CharT2>& __m) { 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __is.fill(__m._M_c); 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __is; 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT> 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Setfill_Manip<_CharT> _STLP_CALL 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksetfill(_CharT __c) { 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Setfill_Manip<_CharT>(__c); 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if (_STLP_OUTERMOST_HEADER_ID == 0x1030) 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_epilog.h> 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef _STLP_OUTERMOST_HEADER_ID 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_IOMANIP */ 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 176