_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