1951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
2951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1999
3951a39d68df598db08dfced8b4707755864a0492Ying Wang * Silicon Graphics Computer Systems, Inc.
4951a39d68df598db08dfced8b4707755864a0492Ying Wang *
5951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1999
6951a39d68df598db08dfced8b4707755864a0492Ying Wang * Boris Fomitchev
7951a39d68df598db08dfced8b4707755864a0492Ying Wang *
8951a39d68df598db08dfced8b4707755864a0492Ying Wang * This material is provided "as is", with absolutely no warranty expressed
9951a39d68df598db08dfced8b4707755864a0492Ying Wang * or implied. Any use is at your own risk.
10951a39d68df598db08dfced8b4707755864a0492Ying Wang *
11951a39d68df598db08dfced8b4707755864a0492Ying Wang * Permission to use or copy this software for any purpose is hereby granted
12951a39d68df598db08dfced8b4707755864a0492Ying Wang * without fee, provided the above notices are retained on all copies.
13951a39d68df598db08dfced8b4707755864a0492Ying Wang * Permission to modify the code and to distribute modified code is granted,
14951a39d68df598db08dfced8b4707755864a0492Ying Wang * provided the above notices are retained, and a notice that the code was
15951a39d68df598db08dfced8b4707755864a0492Ying Wang * modified is included with the above copyright notice.
16951a39d68df598db08dfced8b4707755864a0492Ying Wang *
17951a39d68df598db08dfced8b4707755864a0492Ying Wang */
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_IOS_BASE_H
19951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _STLP_IOS_BASE_H
20951a39d68df598db08dfced8b4707755864a0492Ying Wang
21951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_STDEXCEPT_BASE
22951a39d68df598db08dfced8b4707755864a0492Ying Wang#  include <stl/_stdexcept_base.h>
23951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
24951a39d68df598db08dfced8b4707755864a0492Ying Wang
25951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_PAIR_H
26951a39d68df598db08dfced8b4707755864a0492Ying Wang#  include <stl/_pair.h>
27951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
28951a39d68df598db08dfced8b4707755864a0492Ying Wang
29951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_LOCALE_H
30951a39d68df598db08dfced8b4707755864a0492Ying Wang#  include <stl/_locale.h>
31951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
32951a39d68df598db08dfced8b4707755864a0492Ying Wang
33951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_STRING_H
34951a39d68df598db08dfced8b4707755864a0492Ying Wang#  include <stl/_string.h>
35951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
36951a39d68df598db08dfced8b4707755864a0492Ying Wang
37951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_BEGIN_NAMESPACE
38951a39d68df598db08dfced8b4707755864a0492Ying Wang
39951a39d68df598db08dfced8b4707755864a0492Ying Wang// ----------------------------------------------------------------------
40951a39d68df598db08dfced8b4707755864a0492Ying Wang
41951a39d68df598db08dfced8b4707755864a0492Ying Wang// Class ios_base.  This is the base class of the ios hierarchy, which
42951a39d68df598db08dfced8b4707755864a0492Ying Wang// includes basic_istream and basic_ostream.  Classes in the ios
43951a39d68df598db08dfced8b4707755864a0492Ying Wang// hierarchy are actually quite simple: they are just glorified
44951a39d68df598db08dfced8b4707755864a0492Ying Wang// wrapper classes.  They delegate buffering and physical character
45951a39d68df598db08dfced8b4707755864a0492Ying Wang// manipulation to the streambuf classes, and they delegate most
46951a39d68df598db08dfced8b4707755864a0492Ying Wang// formatting tasks to a locale.
47951a39d68df598db08dfced8b4707755864a0492Ying Wang
48951a39d68df598db08dfced8b4707755864a0492Ying Wangclass _STLP_CLASS_DECLSPEC ios_base {
49951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:
50951a39d68df598db08dfced8b4707755864a0492Ying Wang
51951a39d68df598db08dfced8b4707755864a0492Ying Wang  class _STLP_CLASS_DECLSPEC failure : public __Named_exception {
52951a39d68df598db08dfced8b4707755864a0492Ying Wang  public:
53951a39d68df598db08dfced8b4707755864a0492Ying Wang    explicit failure(const string&);
54951a39d68df598db08dfced8b4707755864a0492Ying Wang    virtual ~failure() _STLP_NOTHROW_INHERENTLY;
55951a39d68df598db08dfced8b4707755864a0492Ying Wang  };
56951a39d68df598db08dfced8b4707755864a0492Ying Wang
57951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef int fmtflags;
58951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef int iostate;
59951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef int openmode;
60951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef int seekdir;
61951a39d68df598db08dfced8b4707755864a0492Ying Wang
62951a39d68df598db08dfced8b4707755864a0492Ying Wang# ifndef _STLP_NO_ANACHRONISMS
63951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef fmtflags fmt_flags;
64951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif
65951a39d68df598db08dfced8b4707755864a0492Ying Wang
66951a39d68df598db08dfced8b4707755864a0492Ying Wang  // Formatting flags.
67951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, left = 0x0001);
68951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, right = 0x0002);
69951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, internal   = 0x0004);
70951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, dec        = 0x0008);
71951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, hex        = 0x0010);
72951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, oct        = 0x0020);
73951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, fixed      = 0x0040);
74951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, scientific = 0x0080);
75951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, boolalpha  = 0x0100);
76951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, showbase   = 0x0200);
77951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, showpoint  = 0x0400);
78951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, showpos    = 0x0800);
79951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, skipws     = 0x1000);
80951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, unitbuf    = 0x2000);
81951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, uppercase  = 0x4000);
82951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, adjustfield = left | right | internal);
83951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, basefield   = dec | hex | oct);
84951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, floatfield  = scientific | fixed);
85951a39d68df598db08dfced8b4707755864a0492Ying Wang
86951a39d68df598db08dfced8b4707755864a0492Ying Wang  // State flags.
87951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, goodbit = 0x00);
88951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, badbit  = 0x01);
89951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, eofbit  = 0x02);
90951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, failbit = 0x04);
91951a39d68df598db08dfced8b4707755864a0492Ying Wang
92951a39d68df598db08dfced8b4707755864a0492Ying Wang  // Openmode flags.
93951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, __default_mode = 0x0); /* implementation detail */
94951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, app    = 0x01);
95951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, ate    = 0x02);
96951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, binary = 0x04);
97951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, in     = 0x08);
98951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, out    = 0x10);
99951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, trunc  = 0x20);
100951a39d68df598db08dfced8b4707755864a0492Ying Wang
101951a39d68df598db08dfced8b4707755864a0492Ying Wang  // Seekdir flags
102951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, beg = 0x01);
103951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, cur = 0x02);
104951a39d68df598db08dfced8b4707755864a0492Ying Wang  _STLP_STATIC_CONSTANT(int, end = 0x04);
105951a39d68df598db08dfced8b4707755864a0492Ying Wang
106951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:                         // Flag-manipulation functions.
107951a39d68df598db08dfced8b4707755864a0492Ying Wang  fmtflags flags() const { return _M_fmtflags; }
108951a39d68df598db08dfced8b4707755864a0492Ying Wang  fmtflags flags(fmtflags __flags) {
109951a39d68df598db08dfced8b4707755864a0492Ying Wang    fmtflags __tmp = _M_fmtflags;
110951a39d68df598db08dfced8b4707755864a0492Ying Wang    _M_fmtflags = __flags;
111951a39d68df598db08dfced8b4707755864a0492Ying Wang    return __tmp;
112951a39d68df598db08dfced8b4707755864a0492Ying Wang  }
113951a39d68df598db08dfced8b4707755864a0492Ying Wang
114951a39d68df598db08dfced8b4707755864a0492Ying Wang  fmtflags setf(fmtflags __flag) {
115951a39d68df598db08dfced8b4707755864a0492Ying Wang    fmtflags __tmp = _M_fmtflags;
116951a39d68df598db08dfced8b4707755864a0492Ying Wang    _M_fmtflags |= __flag;
117951a39d68df598db08dfced8b4707755864a0492Ying Wang    return __tmp;
118951a39d68df598db08dfced8b4707755864a0492Ying Wang  }
119951a39d68df598db08dfced8b4707755864a0492Ying Wang  fmtflags setf(fmtflags __flag, fmtflags __mask) {
120951a39d68df598db08dfced8b4707755864a0492Ying Wang    fmtflags __tmp = _M_fmtflags;
121951a39d68df598db08dfced8b4707755864a0492Ying Wang    _M_fmtflags &= ~__mask;
122951a39d68df598db08dfced8b4707755864a0492Ying Wang    _M_fmtflags |= __flag & __mask;
123951a39d68df598db08dfced8b4707755864a0492Ying Wang    return __tmp;
124951a39d68df598db08dfced8b4707755864a0492Ying Wang  }
125951a39d68df598db08dfced8b4707755864a0492Ying Wang  void unsetf(fmtflags __mask) { _M_fmtflags &= ~__mask; }
126951a39d68df598db08dfced8b4707755864a0492Ying Wang
127951a39d68df598db08dfced8b4707755864a0492Ying Wang  streamsize precision() const { return _M_precision; }
128951a39d68df598db08dfced8b4707755864a0492Ying Wang  streamsize precision(streamsize __newprecision) {
129951a39d68df598db08dfced8b4707755864a0492Ying Wang    streamsize __tmp = _M_precision;
130951a39d68df598db08dfced8b4707755864a0492Ying Wang    _M_precision = __newprecision;
131951a39d68df598db08dfced8b4707755864a0492Ying Wang    return __tmp;
132951a39d68df598db08dfced8b4707755864a0492Ying Wang  }
133951a39d68df598db08dfced8b4707755864a0492Ying Wang
134951a39d68df598db08dfced8b4707755864a0492Ying Wang  streamsize width() const { return _M_width; }
135951a39d68df598db08dfced8b4707755864a0492Ying Wang  streamsize width(streamsize __newwidth) {
136951a39d68df598db08dfced8b4707755864a0492Ying Wang    streamsize __tmp = _M_width;
137951a39d68df598db08dfced8b4707755864a0492Ying Wang    _M_width = __newwidth;
138951a39d68df598db08dfced8b4707755864a0492Ying Wang    return __tmp;
139951a39d68df598db08dfced8b4707755864a0492Ying Wang  }
140951a39d68df598db08dfced8b4707755864a0492Ying Wang
141951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:                         // Locales
142951a39d68df598db08dfced8b4707755864a0492Ying Wang  locale imbue(const locale&);
143951a39d68df598db08dfced8b4707755864a0492Ying Wang  locale getloc() const { return _M_locale; }
144951a39d68df598db08dfced8b4707755864a0492Ying Wang
145951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:                         // Auxiliary storage.
146951a39d68df598db08dfced8b4707755864a0492Ying Wang  static int _STLP_CALL xalloc();
147951a39d68df598db08dfced8b4707755864a0492Ying Wang  long&  iword(int __index);
148951a39d68df598db08dfced8b4707755864a0492Ying Wang  void*& pword(int __index);
149951a39d68df598db08dfced8b4707755864a0492Ying Wang
150951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:                         // Destructor.
151951a39d68df598db08dfced8b4707755864a0492Ying Wang  virtual ~ios_base();
152951a39d68df598db08dfced8b4707755864a0492Ying Wang
153951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:                         // Callbacks.
154951a39d68df598db08dfced8b4707755864a0492Ying Wang  enum event { erase_event, imbue_event, copyfmt_event };
155951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef void (*event_callback)(event, ios_base&, int __index);
156951a39d68df598db08dfced8b4707755864a0492Ying Wang  void register_callback(event_callback __fn, int __index);
157951a39d68df598db08dfced8b4707755864a0492Ying Wang
158951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:                         // This member function affects only
159951a39d68df598db08dfced8b4707755864a0492Ying Wang                                // the eight predefined ios objects:
160951a39d68df598db08dfced8b4707755864a0492Ying Wang                                // cin, cout, etc.
161951a39d68df598db08dfced8b4707755864a0492Ying Wang  static bool _STLP_CALL sync_with_stdio(bool __sync = true);
162951a39d68df598db08dfced8b4707755864a0492Ying Wang
163951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:                         // The C++ standard requires only that these
164951a39d68df598db08dfced8b4707755864a0492Ying Wang                                // member functions be defined in basic_ios.
165951a39d68df598db08dfced8b4707755864a0492Ying Wang                                // We define them in the non-template
166951a39d68df598db08dfced8b4707755864a0492Ying Wang                                // base class to avoid code duplication.
167951a39d68df598db08dfced8b4707755864a0492Ying Wang  operator void*() const { return !fail() ? (void*) __CONST_CAST(ios_base*,this) : (void*) 0; }
168951a39d68df598db08dfced8b4707755864a0492Ying Wang  bool operator!() const { return fail(); }
169951a39d68df598db08dfced8b4707755864a0492Ying Wang
170951a39d68df598db08dfced8b4707755864a0492Ying Wang  iostate rdstate() const { return _M_iostate; }
171951a39d68df598db08dfced8b4707755864a0492Ying Wang
172951a39d68df598db08dfced8b4707755864a0492Ying Wang  bool good() const { return _M_iostate == 0; }
173951a39d68df598db08dfced8b4707755864a0492Ying Wang  bool eof() const { return (_M_iostate & eofbit) != 0; }
174951a39d68df598db08dfced8b4707755864a0492Ying Wang  bool fail() const { return (_M_iostate & (failbit | badbit)) != 0; }
175951a39d68df598db08dfced8b4707755864a0492Ying Wang  bool bad() const { return (_M_iostate & badbit) != 0; }
176951a39d68df598db08dfced8b4707755864a0492Ying Wang
177951a39d68df598db08dfced8b4707755864a0492Ying Wangprotected:                      // The functional protected interface.
178951a39d68df598db08dfced8b4707755864a0492Ying Wang
179951a39d68df598db08dfced8b4707755864a0492Ying Wang  // Copies the state of __x to *this.  This member function makes it
180951a39d68df598db08dfced8b4707755864a0492Ying Wang  // possible to implement basic_ios::copyfmt without having to expose
181951a39d68df598db08dfced8b4707755864a0492Ying Wang  // ios_base's private data members.  Does not copy _M_exception_mask
182951a39d68df598db08dfced8b4707755864a0492Ying Wang  // or _M_iostate.
183951a39d68df598db08dfced8b4707755864a0492Ying Wang  void _M_copy_state(const ios_base& __x);
184951a39d68df598db08dfced8b4707755864a0492Ying Wang
185951a39d68df598db08dfced8b4707755864a0492Ying Wang  void _M_setstate_nothrow(iostate __state) { _M_iostate |= __state; }
186951a39d68df598db08dfced8b4707755864a0492Ying Wang  void _M_clear_nothrow(iostate __state) { _M_iostate = __state; }
187951a39d68df598db08dfced8b4707755864a0492Ying Wang  iostate _M_get_exception_mask() const { return _M_exception_mask; }
188951a39d68df598db08dfced8b4707755864a0492Ying Wang  void _M_set_exception_mask(iostate __mask) { _M_exception_mask = __mask; }
189951a39d68df598db08dfced8b4707755864a0492Ying Wang  void _M_check_exception_mask() {
190951a39d68df598db08dfced8b4707755864a0492Ying Wang    if (_M_iostate & _M_exception_mask)
191951a39d68df598db08dfced8b4707755864a0492Ying Wang      _M_throw_failure();
192951a39d68df598db08dfced8b4707755864a0492Ying Wang  }
193951a39d68df598db08dfced8b4707755864a0492Ying Wang
194951a39d68df598db08dfced8b4707755864a0492Ying Wang  void _M_invoke_callbacks(event);
195951a39d68df598db08dfced8b4707755864a0492Ying Wang  void _STLP_FUNCTION_THROWS _M_throw_failure();
196951a39d68df598db08dfced8b4707755864a0492Ying Wang
197951a39d68df598db08dfced8b4707755864a0492Ying Wang  ios_base();                   // Default constructor.
198951a39d68df598db08dfced8b4707755864a0492Ying Wang
199951a39d68df598db08dfced8b4707755864a0492Ying Wangprotected:                        // Initialization of the I/O system
200951a39d68df598db08dfced8b4707755864a0492Ying Wang  static void _STLP_CALL _S_initialize();
201951a39d68df598db08dfced8b4707755864a0492Ying Wang  static void _STLP_CALL _S_uninitialize();
202951a39d68df598db08dfced8b4707755864a0492Ying Wang  static bool _S_is_synced;
203951a39d68df598db08dfced8b4707755864a0492Ying Wang
204951a39d68df598db08dfced8b4707755864a0492Ying Wangprivate:                        // Invalidate the copy constructor and
205951a39d68df598db08dfced8b4707755864a0492Ying Wang                                // assignment operator.
206951a39d68df598db08dfced8b4707755864a0492Ying Wang  ios_base(const ios_base&);
207951a39d68df598db08dfced8b4707755864a0492Ying Wang  void operator=(const ios_base&);
208951a39d68df598db08dfced8b4707755864a0492Ying Wang
209951a39d68df598db08dfced8b4707755864a0492Ying Wangprivate:                        // Data members.
210951a39d68df598db08dfced8b4707755864a0492Ying Wang
211951a39d68df598db08dfced8b4707755864a0492Ying Wang  fmtflags _M_fmtflags;         // Flags
212951a39d68df598db08dfced8b4707755864a0492Ying Wang  iostate _M_iostate;
213951a39d68df598db08dfced8b4707755864a0492Ying Wang  openmode _M_openmode;
214951a39d68df598db08dfced8b4707755864a0492Ying Wang  seekdir _M_seekdir;
215951a39d68df598db08dfced8b4707755864a0492Ying Wang  iostate _M_exception_mask;
216951a39d68df598db08dfced8b4707755864a0492Ying Wang
217951a39d68df598db08dfced8b4707755864a0492Ying Wang  streamsize _M_precision;
218951a39d68df598db08dfced8b4707755864a0492Ying Wang  streamsize _M_width;
219951a39d68df598db08dfced8b4707755864a0492Ying Wang
220951a39d68df598db08dfced8b4707755864a0492Ying Wang  locale _M_locale;
221951a39d68df598db08dfced8b4707755864a0492Ying Wang
222951a39d68df598db08dfced8b4707755864a0492Ying Wang  pair<event_callback, int>* _M_callbacks;
223951a39d68df598db08dfced8b4707755864a0492Ying Wang  size_t _M_num_callbacks;      // Size of the callback array.
224951a39d68df598db08dfced8b4707755864a0492Ying Wang  size_t _M_callback_index;     // Index of the next available callback;
225951a39d68df598db08dfced8b4707755864a0492Ying Wang                                // initially zero.
226951a39d68df598db08dfced8b4707755864a0492Ying Wang
227951a39d68df598db08dfced8b4707755864a0492Ying Wang  long* _M_iwords;              // Auxiliary storage.  The count is zero
228951a39d68df598db08dfced8b4707755864a0492Ying Wang  size_t _M_num_iwords;         // if and only if the pointer is null.
229951a39d68df598db08dfced8b4707755864a0492Ying Wang
230951a39d68df598db08dfced8b4707755864a0492Ying Wang  void** _M_pwords;
231951a39d68df598db08dfced8b4707755864a0492Ying Wang  size_t _M_num_pwords;
232951a39d68df598db08dfced8b4707755864a0492Ying Wang
233951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:
234951a39d68df598db08dfced8b4707755864a0492Ying Wang  // ----------------------------------------------------------------------
235951a39d68df598db08dfced8b4707755864a0492Ying Wang  // Nested initializer class.  This is an implementation detail, but it's
236951a39d68df598db08dfced8b4707755864a0492Ying Wang  // prescribed by the standard.  The static initializer object (on
237951a39d68df598db08dfced8b4707755864a0492Ying Wang  // implementations where such a thing is required) is declared in
238951a39d68df598db08dfced8b4707755864a0492Ying Wang  // <iostream>
239951a39d68df598db08dfced8b4707755864a0492Ying Wang  class _STLP_CLASS_DECLSPEC Init
240951a39d68df598db08dfced8b4707755864a0492Ying Wang  {
241951a39d68df598db08dfced8b4707755864a0492Ying Wang    public:
242951a39d68df598db08dfced8b4707755864a0492Ying Wang      Init();
243951a39d68df598db08dfced8b4707755864a0492Ying Wang      ~Init();
244951a39d68df598db08dfced8b4707755864a0492Ying Wang    private:
245951a39d68df598db08dfced8b4707755864a0492Ying Wang      static long _S_count;
246951a39d68df598db08dfced8b4707755864a0492Ying Wang      friend class ios_base;
247951a39d68df598db08dfced8b4707755864a0492Ying Wang  };
248951a39d68df598db08dfced8b4707755864a0492Ying Wang
249951a39d68df598db08dfced8b4707755864a0492Ying Wang  friend class Init;
250951a39d68df598db08dfced8b4707755864a0492Ying Wang
251951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic:
252951a39d68df598db08dfced8b4707755864a0492Ying Wang# ifndef _STLP_NO_ANACHRONISMS
253951a39d68df598db08dfced8b4707755864a0492Ying Wang  //  31.6  Old iostreams members                         [depr.ios.members]
254951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef iostate  io_state;
255951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef openmode open_mode;
256951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef seekdir  seek_dir;
257951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef _STLP_STD::streamoff  streamoff;
258951a39d68df598db08dfced8b4707755864a0492Ying Wang  typedef _STLP_STD::streampos  streampos;
259951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif
260951a39d68df598db08dfced8b4707755864a0492Ying Wang};
261951a39d68df598db08dfced8b4707755864a0492Ying Wang
262951a39d68df598db08dfced8b4707755864a0492Ying Wang// ----------------------------------------------------------------------
263951a39d68df598db08dfced8b4707755864a0492Ying Wang// ios_base manipulator functions, from section 27.4.5 of the C++ standard.
264951a39d68df598db08dfced8b4707755864a0492Ying Wang// All of them are trivial one-line wrapper functions.
265951a39d68df598db08dfced8b4707755864a0492Ying Wang
266951a39d68df598db08dfced8b4707755864a0492Ying Wang// fmtflag manipulators, section 27.4.5.1
267951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL boolalpha(ios_base& __s)
268951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::boolalpha); return __s;}
269951a39d68df598db08dfced8b4707755864a0492Ying Wang
270951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL noboolalpha(ios_base& __s)
271951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.unsetf(ios_base::boolalpha); return __s;}
272951a39d68df598db08dfced8b4707755864a0492Ying Wang
273951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL showbase(ios_base& __s)
274951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::showbase); return __s;}
275951a39d68df598db08dfced8b4707755864a0492Ying Wang
276951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL noshowbase(ios_base& __s)
277951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.unsetf(ios_base::showbase); return __s;}
278951a39d68df598db08dfced8b4707755864a0492Ying Wang
279951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL showpoint(ios_base& __s)
280951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::showpoint); return __s;}
281951a39d68df598db08dfced8b4707755864a0492Ying Wang
282951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL noshowpoint(ios_base& __s)
283951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.unsetf(ios_base::showpoint); return __s;}
284951a39d68df598db08dfced8b4707755864a0492Ying Wang
285951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL showpos(ios_base& __s)
286951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::showpos); return __s;}
287951a39d68df598db08dfced8b4707755864a0492Ying Wang
288951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL noshowpos(ios_base& __s)
289951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.unsetf(ios_base::showpos); return __s;}
290951a39d68df598db08dfced8b4707755864a0492Ying Wang
291951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL skipws(ios_base& __s)
292951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::skipws); return __s;}
293951a39d68df598db08dfced8b4707755864a0492Ying Wang
294951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL noskipws(ios_base& __s)
295951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.unsetf(ios_base::skipws); return __s;}
296951a39d68df598db08dfced8b4707755864a0492Ying Wang
297951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL uppercase(ios_base& __s)
298951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::uppercase); return __s;}
299951a39d68df598db08dfced8b4707755864a0492Ying Wang
300951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL nouppercase(ios_base& __s)
301951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.unsetf(ios_base::uppercase); return __s;}
302951a39d68df598db08dfced8b4707755864a0492Ying Wang
303951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL unitbuf(ios_base& __s)
304951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::unitbuf); return __s;}
305951a39d68df598db08dfced8b4707755864a0492Ying Wang
306951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL nounitbuf(ios_base& __s)
307951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.unsetf(ios_base::unitbuf); return __s;}
308951a39d68df598db08dfced8b4707755864a0492Ying Wang
309951a39d68df598db08dfced8b4707755864a0492Ying Wang
310951a39d68df598db08dfced8b4707755864a0492Ying Wang// adjustfield manipulators, section 27.4.5.2
311951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL internal(ios_base& __s)
312951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::internal, ios_base::adjustfield); return __s; }
313951a39d68df598db08dfced8b4707755864a0492Ying Wang
314951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL left(ios_base& __s)
315951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::left, ios_base::adjustfield); return __s; }
316951a39d68df598db08dfced8b4707755864a0492Ying Wang
317951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL right(ios_base& __s)
318951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::right, ios_base::adjustfield); return __s; }
319951a39d68df598db08dfced8b4707755864a0492Ying Wang
320951a39d68df598db08dfced8b4707755864a0492Ying Wang// basefield manipulators, section 27.4.5.3
321951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL dec(ios_base& __s)
322951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::dec, ios_base::basefield); return __s; }
323951a39d68df598db08dfced8b4707755864a0492Ying Wang
324951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL hex(ios_base& __s)
325951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::hex, ios_base::basefield); return __s; }
326951a39d68df598db08dfced8b4707755864a0492Ying Wang
327951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL oct(ios_base& __s)
328951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::oct, ios_base::basefield); return __s; }
329951a39d68df598db08dfced8b4707755864a0492Ying Wang
330951a39d68df598db08dfced8b4707755864a0492Ying Wang
331951a39d68df598db08dfced8b4707755864a0492Ying Wang// floatfield manipulators, section 27.4.5.3
332951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL fixed(ios_base& __s)
333951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::fixed, ios_base::floatfield); return __s; }
334951a39d68df598db08dfced8b4707755864a0492Ying Wang
335951a39d68df598db08dfced8b4707755864a0492Ying Wanginline ios_base& _STLP_CALL scientific(ios_base& __s)
336951a39d68df598db08dfced8b4707755864a0492Ying Wang  { __s.setf(ios_base::scientific, ios_base::floatfield); return __s; }
337951a39d68df598db08dfced8b4707755864a0492Ying Wang
338951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_END_NAMESPACE
339951a39d68df598db08dfced8b4707755864a0492Ying Wang
340951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* _STLP_IOS_BASE */
341951a39d68df598db08dfced8b4707755864a0492Ying Wang
342951a39d68df598db08dfced8b4707755864a0492Ying Wang// Local Variables:
343951a39d68df598db08dfced8b4707755864a0492Ying Wang// mode:C++
344951a39d68df598db08dfced8b4707755864a0492Ying Wang// End:
345951a39d68df598db08dfced8b4707755864a0492Ying Wang
346