ios_base.h revision 107606
197403Sobrien// Iostreams base classes -*- C++ -*-
297403Sobrien
397403Sobrien// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
497403Sobrien// Free Software Foundation, Inc.
597403Sobrien//
697403Sobrien// This file is part of the GNU ISO C++ Library.  This library is free
797403Sobrien// software; you can redistribute it and/or modify it under the
897403Sobrien// terms of the GNU General Public License as published by the
997403Sobrien// Free Software Foundation; either version 2, or (at your option)
1097403Sobrien// any later version.
1197403Sobrien
1297403Sobrien// This library is distributed in the hope that it will be useful,
1397403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of
1497403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1597403Sobrien// GNU General Public License for more details.
1697403Sobrien
1797403Sobrien// You should have received a copy of the GNU General Public License along
1897403Sobrien// with this library; see the file COPYING.  If not, write to the Free
1997403Sobrien// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2097403Sobrien// USA.
2197403Sobrien
2297403Sobrien// As a special exception, you may use this file as part of a free software
2397403Sobrien// library without restriction.  Specifically, if other files instantiate
2497403Sobrien// templates or use macros or inline functions from this file, or you compile
2597403Sobrien// this file and link it with other files to produce an executable, this
2697403Sobrien// file does not by itself cause the resulting executable to be covered by
2797403Sobrien// the GNU General Public License.  This exception does not however
2897403Sobrien// invalidate any other reasons why the executable file might be covered by
2997403Sobrien// the GNU General Public License.
3097403Sobrien
3197403Sobrien//
3297403Sobrien// ISO C++ 14882: 27.8  File-based streams
3397403Sobrien//
3497403Sobrien
3597403Sobrien/** @file ios_base.h
3697403Sobrien *  This is an internal header file, included by other library headers.
3797403Sobrien *  You should not attempt to use it directly.
3897403Sobrien */
3997403Sobrien
4097403Sobrien#ifndef _CPP_BITS_IOSBASE_H
4197403Sobrien#define _CPP_BITS_IOSBASE_H 1
4297403Sobrien
4397403Sobrien#pragma GCC system_header
4497403Sobrien
4597403Sobrien#include <bits/atomicity.h>
4697403Sobrien
4797403Sobriennamespace std
4897403Sobrien{
4997403Sobrien  // The following definitions of bitmask types are enums, not ints,
5097403Sobrien  // as permitted (but not required) in the standard, in order to provide
5197403Sobrien  // better type safety in iostream calls.  A side effect is that
5297403Sobrien  // expressions involving them are no longer compile-time constants.
5397403Sobrien  enum _Ios_Fmtflags { _M_ios_fmtflags_end = 1L << 16 };
5497403Sobrien
5597403Sobrien  inline _Ios_Fmtflags
5697403Sobrien  operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
5797403Sobrien  { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
5897403Sobrien
5997403Sobrien  inline _Ios_Fmtflags
6097403Sobrien  operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
6197403Sobrien  { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
6297403Sobrien
6397403Sobrien  inline _Ios_Fmtflags
6497403Sobrien  operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
6597403Sobrien  { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
6697403Sobrien
6797403Sobrien  inline _Ios_Fmtflags
6897403Sobrien  operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
6997403Sobrien  { return __a = __a | __b; }
7097403Sobrien
7197403Sobrien  inline _Ios_Fmtflags
7297403Sobrien  operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
7397403Sobrien  { return __a = __a & __b; }
7497403Sobrien
7597403Sobrien  inline _Ios_Fmtflags
7697403Sobrien  operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
7797403Sobrien  { return __a = __a ^ __b; }
7897403Sobrien
7997403Sobrien  inline _Ios_Fmtflags
8097403Sobrien  operator~(_Ios_Fmtflags __a)
8197403Sobrien  { return _Ios_Fmtflags(~static_cast<int>(__a)); }
8297403Sobrien
8397403Sobrien
8497403Sobrien  enum _Ios_Openmode { _M_ios_openmode_end = 1L << 16 };
8597403Sobrien
8697403Sobrien  inline _Ios_Openmode
8797403Sobrien  operator&(_Ios_Openmode __a, _Ios_Openmode __b)
8897403Sobrien  { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
8997403Sobrien
9097403Sobrien  inline _Ios_Openmode
9197403Sobrien  operator|(_Ios_Openmode __a, _Ios_Openmode __b)
9297403Sobrien  { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
9397403Sobrien
9497403Sobrien  inline _Ios_Openmode
9597403Sobrien  operator^(_Ios_Openmode __a, _Ios_Openmode __b)
9697403Sobrien  { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
9797403Sobrien
9897403Sobrien  inline _Ios_Openmode
9997403Sobrien  operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
10097403Sobrien  { return __a = __a | __b; }
10197403Sobrien
10297403Sobrien  inline _Ios_Openmode
10397403Sobrien  operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
10497403Sobrien  { return __a = __a & __b; }
10597403Sobrien
10697403Sobrien  inline _Ios_Openmode
10797403Sobrien  operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
10897403Sobrien  { return __a = __a ^ __b; }
10997403Sobrien
11097403Sobrien  inline _Ios_Openmode
11197403Sobrien  operator~(_Ios_Openmode __a)
11297403Sobrien  { return _Ios_Openmode(~static_cast<int>(__a)); }
11397403Sobrien
11497403Sobrien
11597403Sobrien  enum _Ios_Iostate { _M_ios_iostate_end = 1L << 16 };
11697403Sobrien
11797403Sobrien  inline _Ios_Iostate
11897403Sobrien  operator&(_Ios_Iostate __a, _Ios_Iostate __b)
11997403Sobrien  { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
12097403Sobrien
12197403Sobrien  inline _Ios_Iostate
12297403Sobrien  operator|(_Ios_Iostate __a, _Ios_Iostate __b)
12397403Sobrien  { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
12497403Sobrien
12597403Sobrien  inline _Ios_Iostate
12697403Sobrien  operator^(_Ios_Iostate __a, _Ios_Iostate __b)
12797403Sobrien  { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
12897403Sobrien
12997403Sobrien  inline _Ios_Iostate
13097403Sobrien  operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
13197403Sobrien  { return __a = __a | __b; }
13297403Sobrien
13397403Sobrien  inline _Ios_Iostate
13497403Sobrien  operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
13597403Sobrien  { return __a = __a & __b; }
13697403Sobrien
13797403Sobrien  inline _Ios_Iostate
13897403Sobrien  operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
13997403Sobrien  { return __a = __a ^ __b; }
14097403Sobrien
14197403Sobrien  inline _Ios_Iostate
14297403Sobrien  operator~(_Ios_Iostate __a)
14397403Sobrien  { return _Ios_Iostate(~static_cast<int>(__a)); }
14497403Sobrien
14597403Sobrien  enum _Ios_Seekdir { _M_ios_seekdir_end = 1L << 16 };
14697403Sobrien
14797403Sobrien  // 27.4.2  Class ios_base
14897403Sobrien  class ios_base
14997403Sobrien  {
15097403Sobrien  public:
15197403Sobrien
15297403Sobrien    // 27.4.2.1.1  Class ios_base::failure
15397403Sobrien    class failure : public exception
15497403Sobrien    {
15597403Sobrien    public:
15697403Sobrien#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
15797403Sobrien      //48.  Use of non-existent exception constructor
15897403Sobrien      explicit
15997403Sobrien      failure(const string& __str) throw();
16097403Sobrien
16197403Sobrien      // This declaration is not useless:
16297403Sobrien      // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
16397403Sobrien      virtual
16497403Sobrien      ~failure() throw();
16597403Sobrien
16697403Sobrien      virtual const char*
16797403Sobrien      what() const throw();
16897403Sobrien
16997403Sobrien    private:
17097403Sobrien      enum { _M_bufsize = 256 };
17197403Sobrien      char _M_name[_M_bufsize];
17297403Sobrien#endif
17397403Sobrien    };
17497403Sobrien
17597403Sobrien    // 27.4.2.1.2  Type ios_base::fmtflags
17697403Sobrien    typedef _Ios_Fmtflags fmtflags;
17797403Sobrien    // 27.4.2.1.2  Type fmtflags
17897403Sobrien    static const fmtflags boolalpha =   fmtflags(__ios_flags::_S_boolalpha);
17997403Sobrien    static const fmtflags dec =         fmtflags(__ios_flags::_S_dec);
18097403Sobrien    static const fmtflags fixed =       fmtflags(__ios_flags::_S_fixed);
18197403Sobrien    static const fmtflags hex =         fmtflags(__ios_flags::_S_hex);
18297403Sobrien    static const fmtflags internal =    fmtflags(__ios_flags::_S_internal);
18397403Sobrien    static const fmtflags left =        fmtflags(__ios_flags::_S_left);
18497403Sobrien    static const fmtflags oct =         fmtflags(__ios_flags::_S_oct);
18597403Sobrien    static const fmtflags right =       fmtflags(__ios_flags::_S_right);
18697403Sobrien    static const fmtflags scientific =  fmtflags(__ios_flags::_S_scientific);
18797403Sobrien    static const fmtflags showbase =    fmtflags(__ios_flags::_S_showbase);
18897403Sobrien    static const fmtflags showpoint =   fmtflags(__ios_flags::_S_showpoint);
18997403Sobrien    static const fmtflags showpos =     fmtflags(__ios_flags::_S_showpos);
19097403Sobrien    static const fmtflags skipws =      fmtflags(__ios_flags::_S_skipws);
19197403Sobrien    static const fmtflags unitbuf =     fmtflags(__ios_flags::_S_unitbuf);
19297403Sobrien    static const fmtflags uppercase =   fmtflags(__ios_flags::_S_uppercase);
19397403Sobrien    static const fmtflags adjustfield = fmtflags(__ios_flags::_S_adjustfield);
19497403Sobrien    static const fmtflags basefield =   fmtflags(__ios_flags::_S_basefield);
19597403Sobrien    static const fmtflags floatfield =  fmtflags(__ios_flags::_S_floatfield);
19697403Sobrien
19797403Sobrien    // 27.4.2.1.3  Type ios_base::iostate
19897403Sobrien    typedef _Ios_Iostate iostate;
19997403Sobrien    static const iostate badbit =  	iostate(__ios_flags::_S_badbit);
20097403Sobrien    static const iostate eofbit =  	iostate(__ios_flags::_S_eofbit);
20197403Sobrien    static const iostate failbit = 	iostate(__ios_flags::_S_failbit);
20297403Sobrien    static const iostate goodbit = 	iostate(0);
20397403Sobrien
20497403Sobrien    // 27.4.2.1.4  Type openmode
20597403Sobrien    typedef _Ios_Openmode openmode;
20697403Sobrien    static const openmode app =    	openmode(__ios_flags::_S_app);
20797403Sobrien    static const openmode ate =    	openmode(__ios_flags::_S_ate);
20897403Sobrien    static const openmode binary = 	openmode(__ios_flags::_S_bin);
20997403Sobrien    static const openmode in =     	openmode(__ios_flags::_S_in);
21097403Sobrien    static const openmode out =    	openmode(__ios_flags::_S_out);
21197403Sobrien    static const openmode trunc =  	openmode(__ios_flags::_S_trunc);
21297403Sobrien
21397403Sobrien    // 27.4.2.1.5  Type seekdir
21497403Sobrien    typedef _Ios_Seekdir seekdir;
21597403Sobrien    static const seekdir beg = 		seekdir(0);
21697403Sobrien    static const seekdir cur = 		seekdir(SEEK_CUR);
21797403Sobrien    static const seekdir end = 		seekdir(SEEK_END);
21897403Sobrien
21997403Sobrien#ifdef _GLIBCPP_DEPRECATED
22097403Sobrien    typedef int io_state;
22197403Sobrien    typedef int open_mode;
22297403Sobrien    typedef int seek_dir;
223107606Sobrien
224107606Sobrien    typedef std::streampos streampos;
225107606Sobrien    typedef std::streamoff streamoff;
22697403Sobrien#endif
22797403Sobrien
22897403Sobrien    // Callbacks;
22997403Sobrien    enum event
23097403Sobrien    {
23197403Sobrien      erase_event,
23297403Sobrien      imbue_event,
23397403Sobrien      copyfmt_event
23497403Sobrien    };
23597403Sobrien
23697403Sobrien    typedef void (*event_callback) (event, ios_base&, int);
23797403Sobrien
23897403Sobrien    void
23997403Sobrien    register_callback(event_callback __fn, int __index);
24097403Sobrien
24197403Sobrien  protected:
24297403Sobrien    // Data Members
24397403Sobrien    streamsize 		_M_precision;
24497403Sobrien    streamsize 		_M_width;
24597403Sobrien    fmtflags 		_M_flags;
24697403Sobrien    iostate 		_M_exception;
24797403Sobrien    iostate 	       	_M_streambuf_state;
24897403Sobrien
24997403Sobrien    // 27.4.2.6  Members for callbacks
25097403Sobrien    // 27.4.2.6  ios_base callbacks
25197403Sobrien    struct _Callback_list
25297403Sobrien    {
25397403Sobrien      // Data Members
25497403Sobrien      _Callback_list* 		_M_next;
25597403Sobrien      ios_base::event_callback 	_M_fn;
25697403Sobrien      int 			_M_index;
25797403Sobrien      _Atomic_word		_M_refcount;  // 0 means one reference.
25897403Sobrien
25997403Sobrien      _Callback_list(ios_base::event_callback __fn, int __index,
26097403Sobrien		     _Callback_list* __cb)
26197403Sobrien      : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
26297403Sobrien
26397403Sobrien      void
26497403Sobrien      _M_add_reference() { __atomic_add(&_M_refcount, 1); }
26597403Sobrien
26697403Sobrien      // 0 => OK to delete.
26797403Sobrien      int
26897403Sobrien      _M_remove_reference() { return __exchange_and_add(&_M_refcount, -1); }
26997403Sobrien    };
27097403Sobrien
27197403Sobrien     _Callback_list*  	_M_callbacks;
27297403Sobrien
27397403Sobrien    void
27497403Sobrien    _M_call_callbacks(event __ev) throw();
27597403Sobrien
27697403Sobrien    void
27797403Sobrien    _M_dispose_callbacks(void);
27897403Sobrien
27997403Sobrien    // 27.4.2.5  Members for iword/pword storage
28097403Sobrien    struct _Words
28197403Sobrien    {
28297403Sobrien      void* 	_M_pword;
28397403Sobrien      long 	_M_iword;
28497403Sobrien      _Words() : _M_pword(0), _M_iword(0) { }
28597403Sobrien    };
28697403Sobrien
28797403Sobrien    // Only for failed iword/pword calls.
28897403Sobrien    _Words  		_M_word_zero;
28997403Sobrien
29097403Sobrien    // Guaranteed storage.
29197403Sobrien    static const int 	_S_local_word_size = 8;
29297403Sobrien    _Words  		_M_local_word[_S_local_word_size];
29397403Sobrien
29497403Sobrien    // Allocated storage.
29597403Sobrien    int     		_M_word_size;
29697403Sobrien    _Words* 		_M_word;
29797403Sobrien
29897403Sobrien    _Words&
29997403Sobrien    _M_grow_words(int __index);
30097403Sobrien
30197403Sobrien    // Members for locale and locale caching.
30297403Sobrien    locale 		_M_ios_locale;
30397403Sobrien
30497403Sobrien    void
30597403Sobrien    _M_init();
30697403Sobrien
30797403Sobrien  public:
30897403Sobrien
30997403Sobrien    // 27.4.2.1.6  Class ios_base::Init
31097403Sobrien    // Used to initialize standard streams. In theory, g++ could use
31197403Sobrien    // -finit-priority to order this stuff correctly without going
31297403Sobrien    // through these machinations.
31397403Sobrien    class Init
31497403Sobrien    {
31597403Sobrien      friend class ios_base;
31697403Sobrien    public:
31797403Sobrien      Init();
31897403Sobrien      ~Init();
31997403Sobrien
32097403Sobrien      static void
32197403Sobrien      _S_ios_create(bool __sync);
32297403Sobrien
32397403Sobrien      static void
32497403Sobrien      _S_ios_destroy();
32597403Sobrien
32697403Sobrien    private:
32797403Sobrien      static int 	_S_ios_base_init;
32897403Sobrien      static bool	_S_synced_with_stdio;
32997403Sobrien    };
33097403Sobrien
33197403Sobrien    // Fmtflags state:
33297403Sobrien    inline fmtflags
33397403Sobrien    flags() const { return _M_flags; }
33497403Sobrien
33597403Sobrien    inline fmtflags
33697403Sobrien    flags(fmtflags __fmtfl)
33797403Sobrien    {
33897403Sobrien      fmtflags __old = _M_flags;
33997403Sobrien      _M_flags = __fmtfl;
34097403Sobrien      return __old;
34197403Sobrien    }
34297403Sobrien
34397403Sobrien    inline fmtflags
34497403Sobrien    setf(fmtflags __fmtfl)
34597403Sobrien    {
34697403Sobrien      fmtflags __old = _M_flags;
34797403Sobrien      _M_flags |= __fmtfl;
34897403Sobrien      return __old;
34997403Sobrien    }
35097403Sobrien
35197403Sobrien    inline fmtflags
35297403Sobrien    setf(fmtflags __fmtfl, fmtflags __mask)
35397403Sobrien    {
35497403Sobrien      fmtflags __old = _M_flags;
35597403Sobrien      _M_flags &= ~__mask;
35697403Sobrien      _M_flags |= (__fmtfl & __mask);
35797403Sobrien      return __old;
35897403Sobrien    }
35997403Sobrien
36097403Sobrien    inline void
36197403Sobrien    unsetf(fmtflags __mask) { _M_flags &= ~__mask; }
36297403Sobrien
36397403Sobrien    inline streamsize
36497403Sobrien    precision() const { return _M_precision; }
36597403Sobrien
36697403Sobrien    inline streamsize
36797403Sobrien    precision(streamsize __prec)
36897403Sobrien    {
36997403Sobrien      streamsize __old = _M_precision;
37097403Sobrien      _M_precision = __prec;
37197403Sobrien      return __old;
37297403Sobrien    }
37397403Sobrien
37497403Sobrien    inline streamsize
37597403Sobrien    width() const { return _M_width; }
37697403Sobrien
37797403Sobrien    inline streamsize
37897403Sobrien    width(streamsize __wide)
37997403Sobrien    {
38097403Sobrien      streamsize __old = _M_width;
38197403Sobrien      _M_width = __wide;
38297403Sobrien      return __old;
38397403Sobrien    }
38497403Sobrien
38597403Sobrien    static bool
38697403Sobrien    sync_with_stdio(bool __sync = true);
38797403Sobrien
38897403Sobrien    // Locales:
38997403Sobrien    locale
39097403Sobrien    imbue(const locale& __loc);
39197403Sobrien
39297403Sobrien    inline locale
39397403Sobrien    getloc() const { return _M_ios_locale; }
39497403Sobrien
39597403Sobrien    // Storage:
39697403Sobrien    static int
39797403Sobrien    xalloc() throw();
39897403Sobrien
39997403Sobrien    inline long&
40097403Sobrien    iword(int __ix)
40197403Sobrien    {
40297403Sobrien      _Words& __word = (__ix < _M_word_size)
40397403Sobrien			? _M_word[__ix] : _M_grow_words(__ix);
40497403Sobrien      return __word._M_iword;
40597403Sobrien    }
40697403Sobrien
40797403Sobrien    inline void*&
40897403Sobrien    pword(int __ix)
40997403Sobrien    {
41097403Sobrien      _Words& __word = (__ix < _M_word_size)
41197403Sobrien			? _M_word[__ix] : _M_grow_words(__ix);
41297403Sobrien      return __word._M_pword;
41397403Sobrien    }
41497403Sobrien
41597403Sobrien    // Destructor
41697403Sobrien    ~ios_base();
41797403Sobrien
41897403Sobrien  protected:
41997403Sobrien    ios_base();
42097403Sobrien
42197403Sobrien#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
42297403Sobrien  //50.  Copy constructor and assignment operator of ios_base
42397403Sobrien  private:
42497403Sobrien    ios_base(const ios_base&);
42597403Sobrien
42697403Sobrien    ios_base&
42797403Sobrien    operator=(const ios_base&);
42897403Sobrien#endif
42997403Sobrien  };
43097403Sobrien
43197403Sobrien  // 27.4.5.1 fmtflags manipulators:
43297403Sobrien  inline ios_base&
43397403Sobrien  boolalpha(ios_base& __base)
43497403Sobrien  {
43597403Sobrien    __base.setf(ios_base::boolalpha);
43697403Sobrien    return __base;
43797403Sobrien  }
43897403Sobrien
43997403Sobrien  inline ios_base&
44097403Sobrien  noboolalpha(ios_base& __base)
44197403Sobrien  {
44297403Sobrien    __base.unsetf(ios_base::boolalpha);
44397403Sobrien    return __base;
44497403Sobrien  }
44597403Sobrien
44697403Sobrien  inline ios_base&
44797403Sobrien  showbase(ios_base& __base)
44897403Sobrien  {
44997403Sobrien    __base.setf(ios_base::showbase);
45097403Sobrien    return __base;
45197403Sobrien  }
45297403Sobrien
45397403Sobrien  inline ios_base&
45497403Sobrien  noshowbase(ios_base& __base)
45597403Sobrien  {
45697403Sobrien    __base.unsetf(ios_base::showbase);
45797403Sobrien    return __base;
45897403Sobrien  }
45997403Sobrien
46097403Sobrien  inline ios_base&
46197403Sobrien  showpoint(ios_base& __base)
46297403Sobrien  {
46397403Sobrien    __base.setf(ios_base::showpoint);
46497403Sobrien    return __base;
46597403Sobrien  }
46697403Sobrien
46797403Sobrien  inline ios_base&
46897403Sobrien  noshowpoint(ios_base& __base)
46997403Sobrien  {
47097403Sobrien    __base.unsetf(ios_base::showpoint);
47197403Sobrien    return __base;
47297403Sobrien  }
47397403Sobrien
47497403Sobrien  inline ios_base&
47597403Sobrien  showpos(ios_base& __base)
47697403Sobrien  {
47797403Sobrien    __base.setf(ios_base::showpos);
47897403Sobrien    return __base;
47997403Sobrien  }
48097403Sobrien
48197403Sobrien  inline ios_base&
48297403Sobrien  noshowpos(ios_base& __base)
48397403Sobrien  {
48497403Sobrien    __base.unsetf(ios_base::showpos);
48597403Sobrien    return __base;
48697403Sobrien  }
48797403Sobrien
48897403Sobrien  inline ios_base&
48997403Sobrien  skipws(ios_base& __base)
49097403Sobrien  {
49197403Sobrien    __base.setf(ios_base::skipws);
49297403Sobrien    return __base;
49397403Sobrien  }
49497403Sobrien
49597403Sobrien  inline ios_base&
49697403Sobrien  noskipws(ios_base& __base)
49797403Sobrien  {
49897403Sobrien    __base.unsetf(ios_base::skipws);
49997403Sobrien    return __base;
50097403Sobrien  }
50197403Sobrien
50297403Sobrien  inline ios_base&
50397403Sobrien  uppercase(ios_base& __base)
50497403Sobrien  {
50597403Sobrien    __base.setf(ios_base::uppercase);
50697403Sobrien    return __base;
50797403Sobrien  }
50897403Sobrien
50997403Sobrien  inline ios_base&
51097403Sobrien  nouppercase(ios_base& __base)
51197403Sobrien  {
51297403Sobrien    __base.unsetf(ios_base::uppercase);
51397403Sobrien    return __base;
51497403Sobrien  }
51597403Sobrien
51697403Sobrien  inline ios_base&
51797403Sobrien  unitbuf(ios_base& __base)
51897403Sobrien  {
51997403Sobrien     __base.setf(ios_base::unitbuf);
52097403Sobrien     return __base;
52197403Sobrien  }
52297403Sobrien
52397403Sobrien  inline ios_base&
52497403Sobrien  nounitbuf(ios_base& __base)
52597403Sobrien  {
52697403Sobrien     __base.unsetf(ios_base::unitbuf);
52797403Sobrien     return __base;
52897403Sobrien  }
52997403Sobrien
53097403Sobrien  // 27.4.5.2 adjustfield anipulators:
53197403Sobrien  inline ios_base&
53297403Sobrien  internal(ios_base& __base)
53397403Sobrien  {
53497403Sobrien     __base.setf(ios_base::internal, ios_base::adjustfield);
53597403Sobrien     return __base;
53697403Sobrien  }
53797403Sobrien
53897403Sobrien  inline ios_base&
53997403Sobrien  left(ios_base& __base)
54097403Sobrien  {
54197403Sobrien    __base.setf(ios_base::left, ios_base::adjustfield);
54297403Sobrien    return __base;
54397403Sobrien  }
54497403Sobrien
54597403Sobrien  inline ios_base&
54697403Sobrien  right(ios_base& __base)
54797403Sobrien  {
54897403Sobrien    __base.setf(ios_base::right, ios_base::adjustfield);
54997403Sobrien    return __base;
55097403Sobrien  }
55197403Sobrien
55297403Sobrien  // 27.4.5.3 basefield anipulators:
55397403Sobrien  inline ios_base&
55497403Sobrien  dec(ios_base& __base)
55597403Sobrien  {
55697403Sobrien    __base.setf(ios_base::dec, ios_base::basefield);
55797403Sobrien    return __base;
55897403Sobrien  }
55997403Sobrien
56097403Sobrien  inline ios_base&
56197403Sobrien  hex(ios_base& __base)
56297403Sobrien  {
56397403Sobrien    __base.setf(ios_base::hex, ios_base::basefield);
56497403Sobrien    return __base;
56597403Sobrien  }
56697403Sobrien
56797403Sobrien  inline ios_base&
56897403Sobrien  oct(ios_base& __base)
56997403Sobrien  {
57097403Sobrien    __base.setf(ios_base::oct, ios_base::basefield);
57197403Sobrien    return __base;
57297403Sobrien  }
57397403Sobrien
57497403Sobrien  // 27.4.5.4 floatfield anipulators:
57597403Sobrien  inline ios_base&
57697403Sobrien  fixed(ios_base& __base)
57797403Sobrien  {
57897403Sobrien    __base.setf(ios_base::fixed, ios_base::floatfield);
57997403Sobrien    return __base;
58097403Sobrien  }
58197403Sobrien
58297403Sobrien  inline ios_base&
58397403Sobrien  scientific(ios_base& __base)
58497403Sobrien  {
58597403Sobrien    __base.setf(ios_base::scientific, ios_base::floatfield);
58697403Sobrien    return __base;
58797403Sobrien  }
58897403Sobrien
58997403Sobrien} // namespace std
59097403Sobrien
59197403Sobrien#endif /* _CPP_BITS_IOSBASE_H */
59297403Sobrien
593