epoc32/include/stdapis/stlport/iomanip
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 0 061f57f2323e
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@2
     1
/*
williamr@2
     2
 * © Portions copyright (c) 2006-2007 Nokia Corporation.  All rights reserved.
williamr@2
     3
 * Copyright (c) 1999
williamr@2
     4
 * Silicon Graphics Computer Systems, Inc.
williamr@2
     5
 *
williamr@2
     6
 * Copyright (c) 1999 
williamr@2
     7
 * Boris Fomitchev
williamr@2
     8
 *
williamr@2
     9
 * This material is provided "as is", with absolutely no warranty expressed
williamr@2
    10
 * or implied. Any use is at your own risk.
williamr@2
    11
 *
williamr@2
    12
 * Permission to use or copy this software for any purpose is hereby granted 
williamr@2
    13
 * without fee, provided the above notices are retained on all copies.
williamr@2
    14
 * Permission to modify the code and to distribute modified code is granted,
williamr@2
    15
 * provided the above notices are retained, and a notice that the code was
williamr@2
    16
 * modified is included with the above copyright notice.
williamr@2
    17
 *
williamr@2
    18
 */ 
williamr@2
    19
williamr@2
    20
#ifndef _STLP_IOMANIP
williamr@2
    21
#define _STLP_IOMANIP
williamr@2
    22
williamr@2
    23
# ifndef _STLP_OUTERMOST_HEADER_ID
williamr@2
    24
#  define _STLP_OUTERMOST_HEADER_ID 0x1030
williamr@2
    25
#  include <stl/_prolog.h>
williamr@2
    26
# endif
williamr@2
    27
williamr@2
    28
# ifdef _STLP_PRAGMA_ONCE
williamr@2
    29
#  pragma once
williamr@2
    30
# endif
williamr@2
    31
williamr@2
    32
# if defined ( _STLP_OWN_IOSTREAMS )
williamr@2
    33
williamr@2
    34
#  include <stl/_istream.h>              // Includes <ostream> and <ios>
williamr@2
    35
williamr@2
    36
_STLP_BEGIN_NAMESPACE
williamr@2
    37
williamr@2
    38
//----------------------------------------------------------------------
williamr@2
    39
// Machinery for defining manipulators.
williamr@2
    40
williamr@2
    41
// Class that calls one of ios_base's single-argument member functions.
williamr@2
    42
template <class _Arg>
williamr@2
    43
struct _Ios_Manip_1 {
williamr@2
    44
#ifdef __SYMBIAN32__
williamr@2
    45
   typedef void (_STLP_CALL *__f_ptr_type)(ios_base&, _Arg);
williamr@2
    46
#else
williamr@2
    47
   typedef _Arg (ios_base::*__f_ptr_type)(_Arg);
williamr@2
    48
#endif
williamr@2
    49
  _Ios_Manip_1(__f_ptr_type __f, const _Arg& __arg)  
williamr@2
    50
    : _M_f(__f), _M_arg(__arg)
williamr@2
    51
    {}
williamr@2
    52
  
williamr@2
    53
  void operator()(ios_base& __ios) const {
williamr@2
    54
#ifdef __SYMBIAN32__
williamr@2
    55
    (*_M_f)(__ios, _M_arg);
williamr@2
    56
#else
williamr@2
    57
    (__ios.*_M_f)(_M_arg);
williamr@2
    58
#endif
williamr@2
    59
  }
williamr@2
    60
williamr@2
    61
  __f_ptr_type _M_f;
williamr@2
    62
  _Arg _M_arg;
williamr@2
    63
};
williamr@2
    64
williamr@2
    65
// Class that calls one of ios_base's two-argument member functions.
williamr@2
    66
struct _Ios_Setf_Manip {
williamr@2
    67
  ios_base::fmtflags _M_flag;
williamr@2
    68
  ios_base::fmtflags _M_mask;
williamr@2
    69
  bool _M_two_args;
williamr@2
    70
williamr@2
    71
  _Ios_Setf_Manip(ios_base::fmtflags __f)
williamr@2
    72
    : _M_flag(__f), _M_mask(0), _M_two_args(false)
williamr@2
    73
    {}
williamr@2
    74
williamr@2
    75
  _Ios_Setf_Manip(ios_base::fmtflags __f, ios_base::fmtflags __m)
williamr@2
    76
    : _M_flag(__f), _M_mask(__m), _M_two_args(true)
williamr@2
    77
    {}
williamr@2
    78
williamr@2
    79
  void operator()(ios_base& __ios) const {
williamr@2
    80
    if (_M_two_args)
williamr@2
    81
      __ios.setf(_M_flag, _M_mask);
williamr@2
    82
    else
williamr@2
    83
      __ios.setf(_M_flag);
williamr@2
    84
  }
williamr@2
    85
};
williamr@2
    86
williamr@2
    87
williamr@2
    88
template <class _CharT, class _Traits, class _Arg>
williamr@2
    89
inline basic_istream<_CharT, _Traits>& _STLP_CALL
williamr@2
    90
operator>>(basic_istream<_CharT, _Traits>& _SP_in,
williamr@2
    91
           const _Ios_Manip_1<_Arg>& __f)
williamr@2
    92
{
williamr@2
    93
  __f(_SP_in);
williamr@2
    94
  return _SP_in;
williamr@2
    95
}
williamr@2
    96
williamr@2
    97
template <class _CharT, class _Traits, class _Arg>
williamr@2
    98
inline basic_ostream<_CharT, _Traits>& _STLP_CALL
williamr@2
    99
operator<<(basic_ostream<_CharT, _Traits>& __os,
williamr@2
   100
           const _Ios_Manip_1<_Arg>& __f)
williamr@2
   101
{
williamr@2
   102
  __f(__os);
williamr@2
   103
  return __os;
williamr@2
   104
}
williamr@2
   105
williamr@2
   106
template <class _CharT, class _Traits>
williamr@2
   107
inline basic_istream<_CharT, _Traits>& _STLP_CALL
williamr@2
   108
operator>>(basic_istream<_CharT, _Traits>& _SP_in, const _Ios_Setf_Manip& __f)
williamr@2
   109
{
williamr@2
   110
  __f(_SP_in);
williamr@2
   111
  return _SP_in;
williamr@2
   112
}
williamr@2
   113
williamr@2
   114
template <class _CharT, class _Traits>
williamr@2
   115
inline basic_ostream<_CharT, _Traits>& _STLP_CALL
williamr@2
   116
operator<<(basic_ostream<_CharT, _Traits>& __os, const _Ios_Setf_Manip& __f)
williamr@2
   117
williamr@2
   118
{
williamr@2
   119
  __f(__os);
williamr@2
   120
  return __os;
williamr@2
   121
}
williamr@2
   122
williamr@2
   123
//----------------------------------------------------------------------
williamr@2
   124
// The ios_base manipulators.
williamr@2
   125
williamr@2
   126
#ifdef __SYMBIAN32__
williamr@2
   127
		// setprecision
williamr@2
   128
static void _STLP_CALL spfun(ios_base& iostr, streamsize prec)
williamr@2
   129
	{	// set precision
williamr@2
   130
	iostr.precision(prec);
williamr@2
   131
	}
williamr@2
   132
williamr@2
   133
		// setw
williamr@2
   134
static void _STLP_CALL swfun(ios_base& iostr, streamsize wide)
williamr@2
   135
	{	// set width
williamr@2
   136
	iostr.width(wide);
williamr@2
   137
	}
williamr@2
   138
#endif
williamr@2
   139
williamr@2
   140
inline _Ios_Setf_Manip  _STLP_CALL resetiosflags(ios_base::fmtflags __mask) {
williamr@2
   141
  return _Ios_Setf_Manip(0, __mask);
williamr@2
   142
}
williamr@2
   143
williamr@2
   144
inline _Ios_Setf_Manip _STLP_CALL setiosflags(ios_base::fmtflags __flag) {
williamr@2
   145
  return _Ios_Setf_Manip(__flag);
williamr@2
   146
}
williamr@2
   147
williamr@2
   148
inline _Ios_Setf_Manip _STLP_CALL setbase(int __n) {
williamr@2
   149
  ios_base::fmtflags __base = __n == 8  ? ios_base::oct :
williamr@2
   150
                              __n == 10 ? ios_base::dec :
williamr@2
   151
                              __n == 16 ? ios_base::hex :
williamr@2
   152
                              ios_base::fmtflags(0);
williamr@2
   153
  return _Ios_Setf_Manip(__base, ios_base::basefield);
williamr@2
   154
}
williamr@2
   155
williamr@2
   156
inline _Ios_Manip_1<streamsize> _STLP_CALL 
williamr@2
   157
setprecision(int __n) {
williamr@2
   158
#ifdef __SYMBIAN32__
williamr@2
   159
  _Ios_Manip_1<streamsize>::__f_ptr_type __f = &spfun;
williamr@2
   160
#else
williamr@2
   161
  _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::precision;
williamr@2
   162
#endif
williamr@2
   163
  return _Ios_Manip_1<streamsize>(__f, __n);
williamr@2
   164
}
williamr@2
   165
williamr@2
   166
inline _Ios_Manip_1<streamsize>  _STLP_CALL
williamr@2
   167
setw(int __n) {
williamr@2
   168
#ifdef __SYMBIAN32__
williamr@2
   169
  _Ios_Manip_1<streamsize>::__f_ptr_type __f = &swfun;	
williamr@2
   170
#else
williamr@2
   171
  _Ios_Manip_1<streamsize>::__f_ptr_type __f = &ios_base::width;	
williamr@2
   172
#endif
williamr@2
   173
williamr@2
   174
  return _Ios_Manip_1<streamsize>(__f, __n);
williamr@2
   175
}
williamr@2
   176
williamr@2
   177
//----------------------------------------------------------------------
williamr@2
   178
// setfill, a manipulator that operates on basic_ios<> instead of ios_base.
williamr@2
   179
williamr@2
   180
template <class _CharT>
williamr@2
   181
struct _Setfill_Manip {
williamr@2
   182
  _Setfill_Manip(_CharT __c) : _M_c(__c) {}
williamr@2
   183
  _CharT _M_c;
williamr@2
   184
};
williamr@2
   185
williamr@2
   186
template <class _CharT, class _CharT2, class _Traits>
williamr@2
   187
inline basic_ostream<_CharT, _Traits>& _STLP_CALL 
williamr@2
   188
operator<<(basic_ostream<_CharT, _Traits>& __os, 
williamr@2
   189
           const _Setfill_Manip<_CharT2>& __m)
williamr@2
   190
{
williamr@2
   191
  __os.fill(__m._M_c);
williamr@2
   192
  return __os;
williamr@2
   193
}
williamr@2
   194
williamr@2
   195
template <class _CharT, class _CharT2, class _Traits>
williamr@2
   196
inline basic_istream<_CharT, _Traits>& _STLP_CALL 
williamr@2
   197
operator>>(basic_istream<_CharT, _Traits>& __is, 
williamr@2
   198
           const _Setfill_Manip<_CharT2>& __m)
williamr@2
   199
{
williamr@2
   200
  __is.fill(__m._M_c);
williamr@2
   201
  return __is;
williamr@2
   202
}
williamr@2
   203
williamr@2
   204
template <class _CharT>
williamr@2
   205
inline _Setfill_Manip<_CharT> _STLP_CALL 
williamr@2
   206
setfill(_CharT __c) {
williamr@2
   207
  return _Setfill_Manip<_CharT>(__c);
williamr@2
   208
}
williamr@2
   209
williamr@2
   210
_STLP_END_NAMESPACE
williamr@2
   211
williamr@2
   212
# elif !defined (_STLP_USE_NO_IOSTREAMS)
williamr@2
   213
#  include <wrap_std/iomanip>
williamr@2
   214
# endif
williamr@2
   215
williamr@2
   216
# if (_STLP_OUTERMOST_HEADER_ID == 0x1030)
williamr@2
   217
#  include <stl/_epilog.h>
williamr@2
   218
#  undef _STLP_OUTERMOST_HEADER_ID
williamr@2
   219
# endif
williamr@2
   220
williamr@2
   221
#endif /* _STLP_IOMANIP */
williamr@2
   222
williamr@2
   223
// Local Variables:
williamr@2
   224
// mode:C++
williamr@2
   225
// End: