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