_ios_base.h revision 013fff3524b2798e9d45aefcc13236021da234db
190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/*
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Copyright (c) 1999
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Silicon Graphics Computer Systems, Inc.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Copyright (c) 1999
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Boris Fomitchev
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * This material is provided "as is", with absolutely no warranty expressed
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * or implied. Any use is at your own risk.
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Permission to use or copy this software for any purpose is hereby granted
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * without fee, provided the above notices are retained on all copies.
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Permission to modify the code and to distribute modified code is granted,
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * provided the above notices are retained, and a notice that the code was
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * modified is included with the above copyright notice.
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef _STLP_IOS_BASE_H
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define _STLP_IOS_BASE_H
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef _STLP_INTERNAL_STDEXCEPT_BASE
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#  include <stl/_stdexcept_base.h>
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef _STLP_INTERNAL_PAIR_H
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#  include <stl/_pair.h>
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef _STLP_INTERNAL_LOCALE_H
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#  include <stl/_locale.h>
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef _STLP_INTERNAL_STRING_H
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#  include <stl/_string.h>
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)_STLP_BEGIN_NAMESPACE
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// ----------------------------------------------------------------------
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Class ios_base.  This is the base class of the ios hierarchy, which
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// includes basic_istream and basic_ostream.  Classes in the ios
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// hierarchy are actually quite simple: they are just glorified
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// wrapper classes.  They delegate buffering and physical character
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// manipulation to the streambuf classes, and they delegate most
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// formatting tasks to a locale.
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class _STLP_CLASS_DECLSPEC ios_base {
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# ifdef _STLP_USE_EXCEPTIONS
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  class _STLP_CLASS_DECLSPEC failure : public __Named_exception {
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  public:
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    explicit failure(const string&);
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    virtual ~failure() _STLP_NOTHROW_INHERENTLY;
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  };
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef int fmtflags;
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef int iostate;
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef int openmode;
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef int seekdir;
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# ifndef _STLP_NO_ANACHRONISMS
6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef fmtflags fmt_flags;
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# endif
6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Formatting flags.
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, left = 0x0001);
7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, right = 0x0002);
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, internal   = 0x0004);
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, dec        = 0x0008);
7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, hex        = 0x0010);
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, oct        = 0x0020);
7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, fixed      = 0x0040);
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, scientific = 0x0080);
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, boolalpha  = 0x0100);
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, showbase   = 0x0200);
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, showpoint  = 0x0400);
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, showpos    = 0x0800);
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, skipws     = 0x1000);
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, unitbuf    = 0x2000);
8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, uppercase  = 0x4000);
8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, adjustfield = left | right | internal);
8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, basefield   = dec | hex | oct);
8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, floatfield  = scientific | fixed);
8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // State flags.
8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, goodbit = 0x00);
9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, badbit  = 0x01);
9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, eofbit  = 0x02);
9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, failbit = 0x04);
9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Openmode flags.
9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, __default_mode = 0x0); /* implementation detail */
9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, app    = 0x01);
9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, ate    = 0x02);
9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, binary = 0x04);
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, in     = 0x08);
10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, out    = 0x10);
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, trunc  = 0x20);
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Seekdir flags
10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, beg = 0x01);
10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, cur = 0x02);
10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  _STLP_STATIC_CONSTANT(int, end = 0x04);
10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:                         // Flag-manipulation functions.
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  fmtflags flags() const { return _M_fmtflags; }
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  fmtflags flags(fmtflags __flags) {
11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    fmtflags __tmp = _M_fmtflags;
11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    _M_fmtflags = __flags;
11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return __tmp;
11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  fmtflags setf(fmtflags __flag) {
11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    fmtflags __tmp = _M_fmtflags;
11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    _M_fmtflags |= __flag;
11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return __tmp;
12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  fmtflags setf(fmtflags __flag, fmtflags __mask) {
12290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    fmtflags __tmp = _M_fmtflags;
12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    _M_fmtflags &= ~__mask;
12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    _M_fmtflags |= __flag & __mask;
12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return __tmp;
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void unsetf(fmtflags __mask) { _M_fmtflags &= ~__mask; }
12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  streamsize precision() const { return _M_precision; }
13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  streamsize precision(streamsize __newprecision) {
13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    streamsize __tmp = _M_precision;
13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    _M_precision = __newprecision;
13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return __tmp;
13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
13590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  streamsize width() const { return _M_width; }
13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  streamsize width(streamsize __newwidth) {
13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    streamsize __tmp = _M_width;
13990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    _M_width = __newwidth;
14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return __tmp;
14190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
14290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
14390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:                         // Locales
14490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  locale imbue(const locale&);
14590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  locale getloc() const { return _M_locale; }
14690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
14790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:                         // Auxiliary storage.
14890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static int _STLP_CALL xalloc();
14990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  long&  iword(int __index);
15090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void*& pword(int __index);
15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
15290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:                         // Destructor.
15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~ios_base();
15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:                         // Callbacks.
15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  enum event { erase_event, imbue_event, copyfmt_event };
15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef void (*event_callback)(event, ios_base&, int __index);
15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void register_callback(event_callback __fn, int __index);
15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:                         // This member function affects only
16190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                // the eight predefined ios objects:
16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                // cin, cout, etc.
16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static bool _STLP_CALL sync_with_stdio(bool __sync = true);
16490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:                         // The C++ standard requires only that these
16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                // member functions be defined in basic_ios.
16790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                // We define them in the non-template
16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                // base class to avoid code duplication.
16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  operator void*() const { return !fail() ? (void*) __CONST_CAST(ios_base*,this) : (void*) 0; }
17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool operator!() const { return fail(); }
17190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  iostate rdstate() const { return _M_iostate; }
17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool good() const { return _M_iostate == 0; }
17590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool eof() const { return (_M_iostate & eofbit) != 0; }
17690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool fail() const { return (_M_iostate & (failbit | badbit)) != 0; }
17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool bad() const { return (_M_iostate & badbit) != 0; }
17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)protected:                      // The functional protected interface.
18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Copies the state of __x to *this.  This member function makes it
18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // possible to implement basic_ios::copyfmt without having to expose
18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // ios_base's private data members.  Does not copy _M_exception_mask
18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // or _M_iostate.
18590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void _M_copy_state(const ios_base& __x);
18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void _M_setstate_nothrow(iostate __state) { _M_iostate |= __state; }
18890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void _M_clear_nothrow(iostate __state) { _M_iostate = __state; }
18990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  iostate _M_get_exception_mask() const { return _M_exception_mask; }
19090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void _M_set_exception_mask(iostate __mask) { _M_exception_mask = __mask; }
19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void _M_check_exception_mask() {
19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (_M_iostate & _M_exception_mask)
19390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      _M_throw_failure();
19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void _M_invoke_callbacks(event);
19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void _STLP_FUNCTION_THROWS _M_throw_failure();
19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ios_base();                   // Default constructor.
20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)protected:                        // Initialization of the I/O system
20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static void _STLP_CALL _S_initialize();
20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static void _STLP_CALL _S_uninitialize();
20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static bool _S_is_synced;
20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)private:                        // Invalidate the copy constructor and
20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                // assignment operator.
20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ios_base(const ios_base&);
20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void operator=(const ios_base&);
21090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
21190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)private:                        // Data members.
21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  fmtflags _M_fmtflags;         // Flags
21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  iostate _M_iostate;
21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  openmode _M_openmode;
21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  seekdir _M_seekdir;
21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  iostate _M_exception_mask;
21890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
21990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  streamsize _M_precision;
22090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  streamsize _M_width;
22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
22290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  locale _M_locale;
22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  pair<event_callback, int>* _M_callbacks;
22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  size_t _M_num_callbacks;      // Size of the callback array.
22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  size_t _M_callback_index;     // Index of the next available callback;
22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                // initially zero.
22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
22990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  long* _M_iwords;              // Auxiliary storage.  The count is zero
23090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  size_t _M_num_iwords;         // if and only if the pointer is null.
23190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
23290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void** _M_pwords;
23390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  size_t _M_num_pwords;
23490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
23590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:
23690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // ----------------------------------------------------------------------
23790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Nested initializer class.  This is an implementation detail, but it's
23890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // prescribed by the standard.  The static initializer object (on
23990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // implementations where such a thing is required) is declared in
24090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // <iostream>
24190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  class _STLP_CLASS_DECLSPEC Init
24290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {
24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    public:
24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      Init();
24590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ~Init();
24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    private:
24790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      static long _S_count;
24890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      friend class ios_base;
24990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  };
25090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  friend class Init;
25290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:
25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# ifndef _STLP_NO_ANACHRONISMS
25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  //  31.6  Old iostreams members                         [depr.ios.members]
25690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef iostate  io_state;
25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef openmode open_mode;
25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef seekdir  seek_dir;
25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef _STLP_STD::streamoff  streamoff;
26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef _STLP_STD::streampos  streampos;
26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# endif
26290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
26390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
26490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// ----------------------------------------------------------------------
26590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// ios_base manipulator functions, from section 27.4.5 of the C++ standard.
26690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// All of them are trivial one-line wrapper functions.
26790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
26890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// fmtflag manipulators, section 27.4.5.1
26990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL boolalpha(ios_base& __s)
27090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::boolalpha); return __s;}
27190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
27290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL noboolalpha(ios_base& __s)
27390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.unsetf(ios_base::boolalpha); return __s;}
27490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
27590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL showbase(ios_base& __s)
27690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::showbase); return __s;}
27790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
27890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL noshowbase(ios_base& __s)
27990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.unsetf(ios_base::showbase); return __s;}
28090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
28190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL showpoint(ios_base& __s)
28290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::showpoint); return __s;}
28390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
28490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL noshowpoint(ios_base& __s)
28590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.unsetf(ios_base::showpoint); return __s;}
28690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
28790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL showpos(ios_base& __s)
28890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::showpos); return __s;}
28990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
29090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL noshowpos(ios_base& __s)
29190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.unsetf(ios_base::showpos); return __s;}
29290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
29390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL skipws(ios_base& __s)
29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::skipws); return __s;}
29590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
29690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL noskipws(ios_base& __s)
29790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.unsetf(ios_base::skipws); return __s;}
29890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
29990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL uppercase(ios_base& __s)
30090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::uppercase); return __s;}
30190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL nouppercase(ios_base& __s)
30390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.unsetf(ios_base::uppercase); return __s;}
30490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
30590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL unitbuf(ios_base& __s)
30690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::unitbuf); return __s;}
30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL nounitbuf(ios_base& __s)
30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.unsetf(ios_base::unitbuf); return __s;}
31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
31290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// adjustfield manipulators, section 27.4.5.2
31390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL internal(ios_base& __s)
31490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::internal, ios_base::adjustfield); return __s; }
31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL left(ios_base& __s)
31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::left, ios_base::adjustfield); return __s; }
31890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
31990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL right(ios_base& __s)
32090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::right, ios_base::adjustfield); return __s; }
32190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
32290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// basefield manipulators, section 27.4.5.3
32390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL dec(ios_base& __s)
32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::dec, ios_base::basefield); return __s; }
32590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
32690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL hex(ios_base& __s)
32790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::hex, ios_base::basefield); return __s; }
32890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
32990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL oct(ios_base& __s)
33090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::oct, ios_base::basefield); return __s; }
33190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
33290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// floatfield manipulators, section 27.4.5.3
33490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL fixed(ios_base& __s)
33590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::fixed, ios_base::floatfield); return __s; }
33690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
33790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)inline ios_base& _STLP_CALL scientific(ios_base& __s)
33890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  { __s.setf(ios_base::scientific, ios_base::floatfield); return __s; }
33990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)_STLP_END_NAMESPACE
34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif /* _STLP_IOS_BASE */
34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Local Variables:
34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// mode:C++
34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// End:
34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)