epoc32/include/tools/stlport/iomanip
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
/*
williamr@4
     2
 * Copyright (c) 1999
williamr@4
     3
 * Silicon Graphics Computer Systems, Inc.
williamr@4
     4
 *
williamr@4
     5
 * Copyright (c) 1999
williamr@4
     6
 * Boris Fomitchev
williamr@4
     7
 *
williamr@4
     8
 * This material is provided "as is", with absolutely no warranty expressed
williamr@4
     9
 * or implied. Any use is at your own risk.
williamr@4
    10
 *
williamr@4
    11
 * Permission to use or copy this software for any purpose is hereby granted
williamr@4
    12
 * without fee, provided the above notices are retained on all copies.
williamr@4
    13
 * Permission to modify the code and to distribute modified code is granted,
williamr@4
    14
 * provided the above notices are retained, and a notice that the code was
williamr@4
    15
 * modified is included with the above copyright notice.
williamr@4
    16
 *
williamr@4
    17
 */
williamr@4
    18
williamr@4
    19
#ifndef _STLP_IOMANIP
williamr@4
    20
#define _STLP_IOMANIP
williamr@4
    21
williamr@4
    22
#ifndef _STLP_OUTERMOST_HEADER_ID
williamr@4
    23
#  define _STLP_OUTERMOST_HEADER_ID 0x1030
williamr@4
    24
#  include <stl/_prolog.h>
williamr@4
    25
#endif
williamr@4
    26
williamr@4
    27
#ifdef _STLP_PRAGMA_ONCE
williamr@4
    28
#  pragma once
williamr@4
    29
#endif
williamr@4
    30
williamr@4
    31
#include <stl/_ioserr.h>
williamr@4
    32
#include <stl/_istream.h>              // Includes <ostream> and <ios>
williamr@4
    33
williamr@4
    34
_STLP_BEGIN_NAMESPACE
williamr@4
    35
williamr@4
    36
//----------------------------------------------------------------------
williamr@4
    37
// Machinery for defining manipulators.
williamr@4
    38
williamr@4
    39
// Class that calls one of ios_base's single-argument member functions.
williamr@4
    40
template <class _Arg>
williamr@4
    41
struct _Ios_Manip_1 {
williamr@4
    42
   typedef _Arg (ios_base::*__f_ptr_type)(_Arg);
williamr@4
    43
williamr@4
    44
  _Ios_Manip_1(__f_ptr_type __f, const _Arg& __arg)
williamr@4
    45
    : _M_f(__f), _M_arg(__arg) {}
williamr@4
    46
williamr@4
    47
  void operator()(ios_base& __ios) const
williamr@4
    48
  { (__ios.*_M_f)(_M_arg); }
williamr@4
    49
williamr@4
    50
  __f_ptr_type _M_f;
williamr@4
    51
  _Arg _M_arg;
williamr@4
    52
};
williamr@4
    53
williamr@4
    54
// Class that calls one of ios_base's two-argument member functions.
williamr@4
    55
struct _Ios_Setf_Manip {
williamr@4
    56
  ios_base::fmtflags _M_flag;
williamr@4
    57
  ios_base::fmtflags _M_mask;
williamr@4
    58
  bool _M_two_args;
williamr@4
    59
williamr@4
    60
  _Ios_Setf_Manip(ios_base::fmtflags __f)
williamr@4
    61
    : _M_flag(__f), _M_mask(0), _M_two_args(false) {}
williamr@4
    62
williamr@4
    63
  _Ios_Setf_Manip(ios_base::fmtflags __f, ios_base::fmtflags __m)
williamr@4
    64
    : _M_flag(__f), _M_mask(__m), _M_two_args(true) {}
williamr@4
    65
williamr@4
    66
  void operator()(ios_base& __ios) const {
williamr@4
    67
    if (_M_two_args)
williamr@4
    68
      __ios.setf(_M_flag, _M_mask);
williamr@4
    69
    else
williamr@4
    70
      __ios.setf(_M_flag);
williamr@4
    71
  }
williamr@4
    72
};
williamr@4
    73
williamr@4
    74
williamr@4
    75
template <class _CharT, class _Traits, class _Arg>
williamr@4
    76
inline basic_istream<_CharT, _Traits>& _STLP_CALL
williamr@4
    77
operator>>(basic_istream<_CharT, _Traits>& __istr,
williamr@4
    78
           const _Ios_Manip_1<_Arg>& __f) {
williamr@4
    79
  __f(__istr);
williamr@4
    80
  return __istr;
williamr@4
    81
}
williamr@4
    82
williamr@4
    83
template <class _CharT, class _Traits, class _Arg>
williamr@4
    84
inline basic_ostream<_CharT, _Traits>& _STLP_CALL
williamr@4
    85
operator<<(basic_ostream<_CharT, _Traits>& __os,
williamr@4
    86
           const _Ios_Manip_1<_Arg>& __f) {
williamr@4
    87
  __f(__os);
williamr@4
    88
  return __os;
williamr@4
    89
}
williamr@4
    90
williamr@4
    91
template <class _CharT, class _Traits>
williamr@4
    92
inline basic_istream<_CharT, _Traits>& _STLP_CALL
williamr@4
    93
operator>>(basic_istream<_CharT, _Traits>& __istr, const _Ios_Setf_Manip& __f) {
williamr@4
    94
  __f(__istr);
williamr@4
    95
  return __istr;
williamr@4
    96
}
williamr@4
    97
williamr@4
    98
template <class _CharT, class _Traits>
williamr@4
    99
inline basic_ostream<_CharT, _Traits>& _STLP_CALL
williamr@4
   100
operator<<(basic_ostream<_CharT, _Traits>& __os, const _Ios_Setf_Manip& __f) {
williamr@4
   101
  __f(__os);
williamr@4
   102
  return __os;
williamr@4
   103
}
williamr@4
   104
williamr@4
   105
//----------------------------------------------------------------------
williamr@4
   106
// The ios_base manipulators.
williamr@4
   107
inline _Ios_Setf_Manip  _STLP_CALL resetiosflags(ios_base::fmtflags __mask)
williamr@4
   108
{ return _Ios_Setf_Manip(0, __mask); }
williamr@4
   109
williamr@4
   110
inline _Ios_Setf_Manip _STLP_CALL setiosflags(ios_base::fmtflags __flag)
williamr@4
   111
{ return _Ios_Setf_Manip(__flag); }
williamr@4
   112
williamr@4
   113
inline _Ios_Setf_Manip _STLP_CALL setbase(int __n) {
williamr@4
   114
  ios_base::fmtflags __base = __n == 8  ? ios_base::oct :
williamr@4
   115
                              __n == 10 ? ios_base::dec :
williamr@4
   116
                              __n == 16 ? ios_base::hex :
williamr@4
   117
                              ios_base::fmtflags(0);
williamr@4
   118
  return _Ios_Setf_Manip(__base, ios_base::basefield);
williamr@4
   119
}
williamr@4
   120
williamr@4
   121
inline _Ios_Manip_1<streamsize> _STLP_CALL
williamr@4
   122
setprecision(int __n) {
williamr@4
   123
  _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::precision;
williamr@4
   124
  return _Ios_Manip_1<streamsize>(__f, __n);
williamr@4
   125
}
williamr@4
   126
williamr@4
   127
inline _Ios_Manip_1<streamsize>  _STLP_CALL
williamr@4
   128
setw(int __n) {
williamr@4
   129
  _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::width;  
williamr@4
   130
  return _Ios_Manip_1<streamsize>(__f, __n);
williamr@4
   131
}
williamr@4
   132
williamr@4
   133
//----------------------------------------------------------------------
williamr@4
   134
// setfill, a manipulator that operates on basic_ios<> instead of ios_base.
williamr@4
   135
williamr@4
   136
template <class _CharT>
williamr@4
   137
struct _Setfill_Manip {
williamr@4
   138
  _Setfill_Manip(_CharT __c) : _M_c(__c) {}
williamr@4
   139
  _CharT _M_c;
williamr@4
   140
};
williamr@4
   141
williamr@4
   142
template <class _CharT, class _CharT2, class _Traits>
williamr@4
   143
inline basic_ostream<_CharT, _Traits>& _STLP_CALL
williamr@4
   144
operator<<(basic_ostream<_CharT, _Traits>& __os,
williamr@4
   145
           const _Setfill_Manip<_CharT2>& __m) {
williamr@4
   146
  __os.fill(__m._M_c);
williamr@4
   147
  return __os;
williamr@4
   148
}
williamr@4
   149
williamr@4
   150
template <class _CharT, class _CharT2, class _Traits>
williamr@4
   151
inline basic_istream<_CharT, _Traits>& _STLP_CALL
williamr@4
   152
operator>>(basic_istream<_CharT, _Traits>& __is,
williamr@4
   153
           const _Setfill_Manip<_CharT2>& __m) {
williamr@4
   154
  __is.fill(__m._M_c);
williamr@4
   155
  return __is;
williamr@4
   156
}
williamr@4
   157
williamr@4
   158
template <class _CharT>
williamr@4
   159
inline _Setfill_Manip<_CharT> _STLP_CALL
williamr@4
   160
setfill(_CharT __c) {
williamr@4
   161
  return _Setfill_Manip<_CharT>(__c);
williamr@4
   162
}
williamr@4
   163
williamr@4
   164
_STLP_END_NAMESPACE
williamr@4
   165
williamr@4
   166
#if (_STLP_OUTERMOST_HEADER_ID == 0x1030)
williamr@4
   167
#  include <stl/_epilog.h>
williamr@4
   168
#  undef _STLP_OUTERMOST_HEADER_ID
williamr@4
   169
#endif
williamr@4
   170
williamr@4
   171
#endif /* _STLP_IOMANIP */
williamr@4
   172
williamr@4
   173
// Local Variables:
williamr@4
   174
// mode:C++
williamr@4
   175
// End: