1*e4b17023SJohn Marino // Iostreams base classes -*- C++ -*- 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 4*e4b17023SJohn Marino // 2006, 2007, 2008, 2009, 2010 5*e4b17023SJohn Marino // Free Software Foundation, Inc. 6*e4b17023SJohn Marino // 7*e4b17023SJohn Marino // This file is part of the GNU ISO C++ Library. This library is free 8*e4b17023SJohn Marino // software; you can redistribute it and/or modify it under the 9*e4b17023SJohn Marino // terms of the GNU General Public License as published by the 10*e4b17023SJohn Marino // Free Software Foundation; either version 3, or (at your option) 11*e4b17023SJohn Marino // any later version. 12*e4b17023SJohn Marino 13*e4b17023SJohn Marino // This library is distributed in the hope that it will be useful, 14*e4b17023SJohn Marino // but WITHOUT ANY WARRANTY; without even the implied warranty of 15*e4b17023SJohn Marino // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*e4b17023SJohn Marino // GNU General Public License for more details. 17*e4b17023SJohn Marino 18*e4b17023SJohn Marino // Under Section 7 of GPL version 3, you are granted additional 19*e4b17023SJohn Marino // permissions described in the GCC Runtime Library Exception, version 20*e4b17023SJohn Marino // 3.1, as published by the Free Software Foundation. 21*e4b17023SJohn Marino 22*e4b17023SJohn Marino // You should have received a copy of the GNU General Public License and 23*e4b17023SJohn Marino // a copy of the GCC Runtime Library Exception along with this program; 24*e4b17023SJohn Marino // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 25*e4b17023SJohn Marino // <http://www.gnu.org/licenses/>. 26*e4b17023SJohn Marino 27*e4b17023SJohn Marino /** @file bits/ios_base.h 28*e4b17023SJohn Marino * This is an internal header file, included by other library headers. 29*e4b17023SJohn Marino * Do not attempt to use it directly. @headername{ios} 30*e4b17023SJohn Marino */ 31*e4b17023SJohn Marino 32*e4b17023SJohn Marino // 33*e4b17023SJohn Marino // ISO C++ 14882: 27.4 Iostreams base classes 34*e4b17023SJohn Marino // 35*e4b17023SJohn Marino 36*e4b17023SJohn Marino #ifndef _IOS_BASE_H 37*e4b17023SJohn Marino #define _IOS_BASE_H 1 38*e4b17023SJohn Marino 39*e4b17023SJohn Marino #pragma GCC system_header 40*e4b17023SJohn Marino 41*e4b17023SJohn Marino #include <ext/atomicity.h> 42*e4b17023SJohn Marino #include <bits/localefwd.h> 43*e4b17023SJohn Marino #include <bits/locale_classes.h> 44*e4b17023SJohn Marino 45*e4b17023SJohn Marino namespace std _GLIBCXX_VISIBILITY(default) 46*e4b17023SJohn Marino { 47*e4b17023SJohn Marino _GLIBCXX_BEGIN_NAMESPACE_VERSION 48*e4b17023SJohn Marino 49*e4b17023SJohn Marino // The following definitions of bitmask types are enums, not ints, 50*e4b17023SJohn Marino // as permitted (but not required) in the standard, in order to provide 51*e4b17023SJohn Marino // better type safety in iostream calls. A side effect is that 52*e4b17023SJohn Marino // expressions involving them are no longer compile-time constants. 53*e4b17023SJohn Marino enum _Ios_Fmtflags 54*e4b17023SJohn Marino { 55*e4b17023SJohn Marino _S_boolalpha = 1L << 0, 56*e4b17023SJohn Marino _S_dec = 1L << 1, 57*e4b17023SJohn Marino _S_fixed = 1L << 2, 58*e4b17023SJohn Marino _S_hex = 1L << 3, 59*e4b17023SJohn Marino _S_internal = 1L << 4, 60*e4b17023SJohn Marino _S_left = 1L << 5, 61*e4b17023SJohn Marino _S_oct = 1L << 6, 62*e4b17023SJohn Marino _S_right = 1L << 7, 63*e4b17023SJohn Marino _S_scientific = 1L << 8, 64*e4b17023SJohn Marino _S_showbase = 1L << 9, 65*e4b17023SJohn Marino _S_showpoint = 1L << 10, 66*e4b17023SJohn Marino _S_showpos = 1L << 11, 67*e4b17023SJohn Marino _S_skipws = 1L << 12, 68*e4b17023SJohn Marino _S_unitbuf = 1L << 13, 69*e4b17023SJohn Marino _S_uppercase = 1L << 14, 70*e4b17023SJohn Marino _S_adjustfield = _S_left | _S_right | _S_internal, 71*e4b17023SJohn Marino _S_basefield = _S_dec | _S_oct | _S_hex, 72*e4b17023SJohn Marino _S_floatfield = _S_scientific | _S_fixed, 73*e4b17023SJohn Marino _S_ios_fmtflags_end = 1L << 16 74*e4b17023SJohn Marino }; 75*e4b17023SJohn Marino 76*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags 77*e4b17023SJohn Marino operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 78*e4b17023SJohn Marino { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); } 79*e4b17023SJohn Marino 80*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags 81*e4b17023SJohn Marino operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 82*e4b17023SJohn Marino { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); } 83*e4b17023SJohn Marino 84*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags 85*e4b17023SJohn Marino operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) 86*e4b17023SJohn Marino { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); } 87*e4b17023SJohn Marino 88*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags 89*e4b17023SJohn Marino operator~(_Ios_Fmtflags __a) 90*e4b17023SJohn Marino { return _Ios_Fmtflags(~static_cast<int>(__a)); } 91*e4b17023SJohn Marino 92*e4b17023SJohn Marino inline const _Ios_Fmtflags& 93*e4b17023SJohn Marino operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 94*e4b17023SJohn Marino { return __a = __a | __b; } 95*e4b17023SJohn Marino 96*e4b17023SJohn Marino inline const _Ios_Fmtflags& 97*e4b17023SJohn Marino operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 98*e4b17023SJohn Marino { return __a = __a & __b; } 99*e4b17023SJohn Marino 100*e4b17023SJohn Marino inline const _Ios_Fmtflags& 101*e4b17023SJohn Marino operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) 102*e4b17023SJohn Marino { return __a = __a ^ __b; } 103*e4b17023SJohn Marino 104*e4b17023SJohn Marino 105*e4b17023SJohn Marino enum _Ios_Openmode 106*e4b17023SJohn Marino { 107*e4b17023SJohn Marino _S_app = 1L << 0, 108*e4b17023SJohn Marino _S_ate = 1L << 1, 109*e4b17023SJohn Marino _S_bin = 1L << 2, 110*e4b17023SJohn Marino _S_in = 1L << 3, 111*e4b17023SJohn Marino _S_out = 1L << 4, 112*e4b17023SJohn Marino _S_trunc = 1L << 5, 113*e4b17023SJohn Marino _S_ios_openmode_end = 1L << 16 114*e4b17023SJohn Marino }; 115*e4b17023SJohn Marino 116*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Openmode 117*e4b17023SJohn Marino operator&(_Ios_Openmode __a, _Ios_Openmode __b) 118*e4b17023SJohn Marino { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); } 119*e4b17023SJohn Marino 120*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Openmode 121*e4b17023SJohn Marino operator|(_Ios_Openmode __a, _Ios_Openmode __b) 122*e4b17023SJohn Marino { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); } 123*e4b17023SJohn Marino 124*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Openmode 125*e4b17023SJohn Marino operator^(_Ios_Openmode __a, _Ios_Openmode __b) 126*e4b17023SJohn Marino { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); } 127*e4b17023SJohn Marino 128*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Openmode 129*e4b17023SJohn Marino operator~(_Ios_Openmode __a) 130*e4b17023SJohn Marino { return _Ios_Openmode(~static_cast<int>(__a)); } 131*e4b17023SJohn Marino 132*e4b17023SJohn Marino inline const _Ios_Openmode& 133*e4b17023SJohn Marino operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) 134*e4b17023SJohn Marino { return __a = __a | __b; } 135*e4b17023SJohn Marino 136*e4b17023SJohn Marino inline const _Ios_Openmode& 137*e4b17023SJohn Marino operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) 138*e4b17023SJohn Marino { return __a = __a & __b; } 139*e4b17023SJohn Marino 140*e4b17023SJohn Marino inline const _Ios_Openmode& 141*e4b17023SJohn Marino operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) 142*e4b17023SJohn Marino { return __a = __a ^ __b; } 143*e4b17023SJohn Marino 144*e4b17023SJohn Marino 145*e4b17023SJohn Marino enum _Ios_Iostate 146*e4b17023SJohn Marino { 147*e4b17023SJohn Marino _S_goodbit = 0, 148*e4b17023SJohn Marino _S_badbit = 1L << 0, 149*e4b17023SJohn Marino _S_eofbit = 1L << 1, 150*e4b17023SJohn Marino _S_failbit = 1L << 2, 151*e4b17023SJohn Marino _S_ios_iostate_end = 1L << 16 152*e4b17023SJohn Marino }; 153*e4b17023SJohn Marino 154*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Iostate 155*e4b17023SJohn Marino operator&(_Ios_Iostate __a, _Ios_Iostate __b) 156*e4b17023SJohn Marino { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); } 157*e4b17023SJohn Marino 158*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Iostate 159*e4b17023SJohn Marino operator|(_Ios_Iostate __a, _Ios_Iostate __b) 160*e4b17023SJohn Marino { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); } 161*e4b17023SJohn Marino 162*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Iostate 163*e4b17023SJohn Marino operator^(_Ios_Iostate __a, _Ios_Iostate __b) 164*e4b17023SJohn Marino { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); } 165*e4b17023SJohn Marino 166*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR _Ios_Iostate 167*e4b17023SJohn Marino operator~(_Ios_Iostate __a) 168*e4b17023SJohn Marino { return _Ios_Iostate(~static_cast<int>(__a)); } 169*e4b17023SJohn Marino 170*e4b17023SJohn Marino inline const _Ios_Iostate& 171*e4b17023SJohn Marino operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) 172*e4b17023SJohn Marino { return __a = __a | __b; } 173*e4b17023SJohn Marino 174*e4b17023SJohn Marino inline const _Ios_Iostate& 175*e4b17023SJohn Marino operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) 176*e4b17023SJohn Marino { return __a = __a & __b; } 177*e4b17023SJohn Marino 178*e4b17023SJohn Marino inline const _Ios_Iostate& 179*e4b17023SJohn Marino operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) 180*e4b17023SJohn Marino { return __a = __a ^ __b; } 181*e4b17023SJohn Marino 182*e4b17023SJohn Marino 183*e4b17023SJohn Marino enum _Ios_Seekdir 184*e4b17023SJohn Marino { 185*e4b17023SJohn Marino _S_beg = 0, 186*e4b17023SJohn Marino _S_cur = _GLIBCXX_STDIO_SEEK_CUR, 187*e4b17023SJohn Marino _S_end = _GLIBCXX_STDIO_SEEK_END, 188*e4b17023SJohn Marino _S_ios_seekdir_end = 1L << 16 189*e4b17023SJohn Marino }; 190*e4b17023SJohn Marino 191*e4b17023SJohn Marino // 27.4.2 Class ios_base 192*e4b17023SJohn Marino /** 193*e4b17023SJohn Marino * @brief The base of the I/O class hierarchy. 194*e4b17023SJohn Marino * @ingroup io 195*e4b17023SJohn Marino * 196*e4b17023SJohn Marino * This class defines everything that can be defined about I/O that does 197*e4b17023SJohn Marino * not depend on the type of characters being input or output. Most 198*e4b17023SJohn Marino * people will only see @c ios_base when they need to specify the full 199*e4b17023SJohn Marino * name of the various I/O flags (e.g., the openmodes). 200*e4b17023SJohn Marino */ 201*e4b17023SJohn Marino class ios_base 202*e4b17023SJohn Marino { 203*e4b17023SJohn Marino public: 204*e4b17023SJohn Marino 205*e4b17023SJohn Marino /** 206*e4b17023SJohn Marino * @brief These are thrown to indicate problems with io. 207*e4b17023SJohn Marino * @ingroup exceptions 208*e4b17023SJohn Marino * 209*e4b17023SJohn Marino * 27.4.2.1.1 Class ios_base::failure 210*e4b17023SJohn Marino */ 211*e4b17023SJohn Marino class failure : public exception 212*e4b17023SJohn Marino { 213*e4b17023SJohn Marino public: 214*e4b17023SJohn Marino // _GLIBCXX_RESOLVE_LIB_DEFECTS 215*e4b17023SJohn Marino // 48. Use of non-existent exception constructor 216*e4b17023SJohn Marino explicit 217*e4b17023SJohn Marino failure(const string& __str) throw(); 218*e4b17023SJohn Marino 219*e4b17023SJohn Marino // This declaration is not useless: 220*e4b17023SJohn Marino // http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Vague-Linkage.html 221*e4b17023SJohn Marino virtual 222*e4b17023SJohn Marino ~failure() throw(); 223*e4b17023SJohn Marino 224*e4b17023SJohn Marino virtual const char* 225*e4b17023SJohn Marino what() const throw(); 226*e4b17023SJohn Marino 227*e4b17023SJohn Marino private: 228*e4b17023SJohn Marino string _M_msg; 229*e4b17023SJohn Marino }; 230*e4b17023SJohn Marino 231*e4b17023SJohn Marino // 27.4.2.1.2 Type ios_base::fmtflags 232*e4b17023SJohn Marino /** 233*e4b17023SJohn Marino * @brief This is a bitmask type. 234*e4b17023SJohn Marino * 235*e4b17023SJohn Marino * @c @a _Ios_Fmtflags is implementation-defined, but it is valid to 236*e4b17023SJohn Marino * perform bitwise operations on these values and expect the Right 237*e4b17023SJohn Marino * Thing to happen. Defined objects of type fmtflags are: 238*e4b17023SJohn Marino * - boolalpha 239*e4b17023SJohn Marino * - dec 240*e4b17023SJohn Marino * - fixed 241*e4b17023SJohn Marino * - hex 242*e4b17023SJohn Marino * - internal 243*e4b17023SJohn Marino * - left 244*e4b17023SJohn Marino * - oct 245*e4b17023SJohn Marino * - right 246*e4b17023SJohn Marino * - scientific 247*e4b17023SJohn Marino * - showbase 248*e4b17023SJohn Marino * - showpoint 249*e4b17023SJohn Marino * - showpos 250*e4b17023SJohn Marino * - skipws 251*e4b17023SJohn Marino * - unitbuf 252*e4b17023SJohn Marino * - uppercase 253*e4b17023SJohn Marino * - adjustfield 254*e4b17023SJohn Marino * - basefield 255*e4b17023SJohn Marino * - floatfield 256*e4b17023SJohn Marino */ 257*e4b17023SJohn Marino typedef _Ios_Fmtflags fmtflags; 258*e4b17023SJohn Marino 259*e4b17023SJohn Marino /// Insert/extract @c bool in alphabetic rather than numeric format. 260*e4b17023SJohn Marino static const fmtflags boolalpha = _S_boolalpha; 261*e4b17023SJohn Marino 262*e4b17023SJohn Marino /// Converts integer input or generates integer output in decimal base. 263*e4b17023SJohn Marino static const fmtflags dec = _S_dec; 264*e4b17023SJohn Marino 265*e4b17023SJohn Marino /// Generate floating-point output in fixed-point notation. 266*e4b17023SJohn Marino static const fmtflags fixed = _S_fixed; 267*e4b17023SJohn Marino 268*e4b17023SJohn Marino /// Converts integer input or generates integer output in hexadecimal base. 269*e4b17023SJohn Marino static const fmtflags hex = _S_hex; 270*e4b17023SJohn Marino 271*e4b17023SJohn Marino /// Adds fill characters at a designated internal point in certain 272*e4b17023SJohn Marino /// generated output, or identical to @c right if no such point is 273*e4b17023SJohn Marino /// designated. 274*e4b17023SJohn Marino static const fmtflags internal = _S_internal; 275*e4b17023SJohn Marino 276*e4b17023SJohn Marino /// Adds fill characters on the right (final positions) of certain 277*e4b17023SJohn Marino /// generated output. (I.e., the thing you print is flush left.) 278*e4b17023SJohn Marino static const fmtflags left = _S_left; 279*e4b17023SJohn Marino 280*e4b17023SJohn Marino /// Converts integer input or generates integer output in octal base. 281*e4b17023SJohn Marino static const fmtflags oct = _S_oct; 282*e4b17023SJohn Marino 283*e4b17023SJohn Marino /// Adds fill characters on the left (initial positions) of certain 284*e4b17023SJohn Marino /// generated output. (I.e., the thing you print is flush right.) 285*e4b17023SJohn Marino static const fmtflags right = _S_right; 286*e4b17023SJohn Marino 287*e4b17023SJohn Marino /// Generates floating-point output in scientific notation. 288*e4b17023SJohn Marino static const fmtflags scientific = _S_scientific; 289*e4b17023SJohn Marino 290*e4b17023SJohn Marino /// Generates a prefix indicating the numeric base of generated integer 291*e4b17023SJohn Marino /// output. 292*e4b17023SJohn Marino static const fmtflags showbase = _S_showbase; 293*e4b17023SJohn Marino 294*e4b17023SJohn Marino /// Generates a decimal-point character unconditionally in generated 295*e4b17023SJohn Marino /// floating-point output. 296*e4b17023SJohn Marino static const fmtflags showpoint = _S_showpoint; 297*e4b17023SJohn Marino 298*e4b17023SJohn Marino /// Generates a + sign in non-negative generated numeric output. 299*e4b17023SJohn Marino static const fmtflags showpos = _S_showpos; 300*e4b17023SJohn Marino 301*e4b17023SJohn Marino /// Skips leading white space before certain input operations. 302*e4b17023SJohn Marino static const fmtflags skipws = _S_skipws; 303*e4b17023SJohn Marino 304*e4b17023SJohn Marino /// Flushes output after each output operation. 305*e4b17023SJohn Marino static const fmtflags unitbuf = _S_unitbuf; 306*e4b17023SJohn Marino 307*e4b17023SJohn Marino /// Replaces certain lowercase letters with their uppercase equivalents 308*e4b17023SJohn Marino /// in generated output. 309*e4b17023SJohn Marino static const fmtflags uppercase = _S_uppercase; 310*e4b17023SJohn Marino 311*e4b17023SJohn Marino /// A mask of left|right|internal. Useful for the 2-arg form of @c setf. 312*e4b17023SJohn Marino static const fmtflags adjustfield = _S_adjustfield; 313*e4b17023SJohn Marino 314*e4b17023SJohn Marino /// A mask of dec|oct|hex. Useful for the 2-arg form of @c setf. 315*e4b17023SJohn Marino static const fmtflags basefield = _S_basefield; 316*e4b17023SJohn Marino 317*e4b17023SJohn Marino /// A mask of scientific|fixed. Useful for the 2-arg form of @c setf. 318*e4b17023SJohn Marino static const fmtflags floatfield = _S_floatfield; 319*e4b17023SJohn Marino 320*e4b17023SJohn Marino // 27.4.2.1.3 Type ios_base::iostate 321*e4b17023SJohn Marino /** 322*e4b17023SJohn Marino * @brief This is a bitmask type. 323*e4b17023SJohn Marino * 324*e4b17023SJohn Marino * @c @a _Ios_Iostate is implementation-defined, but it is valid to 325*e4b17023SJohn Marino * perform bitwise operations on these values and expect the Right 326*e4b17023SJohn Marino * Thing to happen. Defined objects of type iostate are: 327*e4b17023SJohn Marino * - badbit 328*e4b17023SJohn Marino * - eofbit 329*e4b17023SJohn Marino * - failbit 330*e4b17023SJohn Marino * - goodbit 331*e4b17023SJohn Marino */ 332*e4b17023SJohn Marino typedef _Ios_Iostate iostate; 333*e4b17023SJohn Marino 334*e4b17023SJohn Marino /// Indicates a loss of integrity in an input or output sequence (such 335*e4b17023SJohn Marino /// as an irrecoverable read error from a file). 336*e4b17023SJohn Marino static const iostate badbit = _S_badbit; 337*e4b17023SJohn Marino 338*e4b17023SJohn Marino /// Indicates that an input operation reached the end of an input sequence. 339*e4b17023SJohn Marino static const iostate eofbit = _S_eofbit; 340*e4b17023SJohn Marino 341*e4b17023SJohn Marino /// Indicates that an input operation failed to read the expected 342*e4b17023SJohn Marino /// characters, or that an output operation failed to generate the 343*e4b17023SJohn Marino /// desired characters. 344*e4b17023SJohn Marino static const iostate failbit = _S_failbit; 345*e4b17023SJohn Marino 346*e4b17023SJohn Marino /// Indicates all is well. 347*e4b17023SJohn Marino static const iostate goodbit = _S_goodbit; 348*e4b17023SJohn Marino 349*e4b17023SJohn Marino // 27.4.2.1.4 Type ios_base::openmode 350*e4b17023SJohn Marino /** 351*e4b17023SJohn Marino * @brief This is a bitmask type. 352*e4b17023SJohn Marino * 353*e4b17023SJohn Marino * @c @a _Ios_Openmode is implementation-defined, but it is valid to 354*e4b17023SJohn Marino * perform bitwise operations on these values and expect the Right 355*e4b17023SJohn Marino * Thing to happen. Defined objects of type openmode are: 356*e4b17023SJohn Marino * - app 357*e4b17023SJohn Marino * - ate 358*e4b17023SJohn Marino * - binary 359*e4b17023SJohn Marino * - in 360*e4b17023SJohn Marino * - out 361*e4b17023SJohn Marino * - trunc 362*e4b17023SJohn Marino */ 363*e4b17023SJohn Marino typedef _Ios_Openmode openmode; 364*e4b17023SJohn Marino 365*e4b17023SJohn Marino /// Seek to end before each write. 366*e4b17023SJohn Marino static const openmode app = _S_app; 367*e4b17023SJohn Marino 368*e4b17023SJohn Marino /// Open and seek to end immediately after opening. 369*e4b17023SJohn Marino static const openmode ate = _S_ate; 370*e4b17023SJohn Marino 371*e4b17023SJohn Marino /// Perform input and output in binary mode (as opposed to text mode). 372*e4b17023SJohn Marino /// This is probably not what you think it is; see 373*e4b17023SJohn Marino /// http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch27s02.html 374*e4b17023SJohn Marino static const openmode binary = _S_bin; 375*e4b17023SJohn Marino 376*e4b17023SJohn Marino /// Open for input. Default for @c ifstream and fstream. 377*e4b17023SJohn Marino static const openmode in = _S_in; 378*e4b17023SJohn Marino 379*e4b17023SJohn Marino /// Open for output. Default for @c ofstream and fstream. 380*e4b17023SJohn Marino static const openmode out = _S_out; 381*e4b17023SJohn Marino 382*e4b17023SJohn Marino /// Open for input. Default for @c ofstream. 383*e4b17023SJohn Marino static const openmode trunc = _S_trunc; 384*e4b17023SJohn Marino 385*e4b17023SJohn Marino // 27.4.2.1.5 Type ios_base::seekdir 386*e4b17023SJohn Marino /** 387*e4b17023SJohn Marino * @brief This is an enumerated type. 388*e4b17023SJohn Marino * 389*e4b17023SJohn Marino * @c @a _Ios_Seekdir is implementation-defined. Defined values 390*e4b17023SJohn Marino * of type seekdir are: 391*e4b17023SJohn Marino * - beg 392*e4b17023SJohn Marino * - cur, equivalent to @c SEEK_CUR in the C standard library. 393*e4b17023SJohn Marino * - end, equivalent to @c SEEK_END in the C standard library. 394*e4b17023SJohn Marino */ 395*e4b17023SJohn Marino typedef _Ios_Seekdir seekdir; 396*e4b17023SJohn Marino 397*e4b17023SJohn Marino /// Request a seek relative to the beginning of the stream. 398*e4b17023SJohn Marino static const seekdir beg = _S_beg; 399*e4b17023SJohn Marino 400*e4b17023SJohn Marino /// Request a seek relative to the current position within the sequence. 401*e4b17023SJohn Marino static const seekdir cur = _S_cur; 402*e4b17023SJohn Marino 403*e4b17023SJohn Marino /// Request a seek relative to the current end of the sequence. 404*e4b17023SJohn Marino static const seekdir end = _S_end; 405*e4b17023SJohn Marino 406*e4b17023SJohn Marino // Annex D.6 407*e4b17023SJohn Marino typedef int io_state; 408*e4b17023SJohn Marino typedef int open_mode; 409*e4b17023SJohn Marino typedef int seek_dir; 410*e4b17023SJohn Marino 411*e4b17023SJohn Marino typedef std::streampos streampos; 412*e4b17023SJohn Marino typedef std::streamoff streamoff; 413*e4b17023SJohn Marino 414*e4b17023SJohn Marino // Callbacks; 415*e4b17023SJohn Marino /** 416*e4b17023SJohn Marino * @brief The set of events that may be passed to an event callback. 417*e4b17023SJohn Marino * 418*e4b17023SJohn Marino * erase_event is used during ~ios() and copyfmt(). imbue_event is used 419*e4b17023SJohn Marino * during imbue(). copyfmt_event is used during copyfmt(). 420*e4b17023SJohn Marino */ 421*e4b17023SJohn Marino enum event 422*e4b17023SJohn Marino { 423*e4b17023SJohn Marino erase_event, 424*e4b17023SJohn Marino imbue_event, 425*e4b17023SJohn Marino copyfmt_event 426*e4b17023SJohn Marino }; 427*e4b17023SJohn Marino 428*e4b17023SJohn Marino /** 429*e4b17023SJohn Marino * @brief The type of an event callback function. 430*e4b17023SJohn Marino * @param __e One of the members of the event enum. 431*e4b17023SJohn Marino * @param __b Reference to the ios_base object. 432*e4b17023SJohn Marino * @param __i The integer provided when the callback was registered. 433*e4b17023SJohn Marino * 434*e4b17023SJohn Marino * Event callbacks are user defined functions that get called during 435*e4b17023SJohn Marino * several ios_base and basic_ios functions, specifically imbue(), 436*e4b17023SJohn Marino * copyfmt(), and ~ios(). 437*e4b17023SJohn Marino */ 438*e4b17023SJohn Marino typedef void (*event_callback) (event __e, ios_base& __b, int __i); 439*e4b17023SJohn Marino 440*e4b17023SJohn Marino /** 441*e4b17023SJohn Marino * @brief Add the callback __fn with parameter __index. 442*e4b17023SJohn Marino * @param __fn The function to add. 443*e4b17023SJohn Marino * @param __index The integer to pass to the function when invoked. 444*e4b17023SJohn Marino * 445*e4b17023SJohn Marino * Registers a function as an event callback with an integer parameter to 446*e4b17023SJohn Marino * be passed to the function when invoked. Multiple copies of the 447*e4b17023SJohn Marino * function are allowed. If there are multiple callbacks, they are 448*e4b17023SJohn Marino * invoked in the order they were registered. 449*e4b17023SJohn Marino */ 450*e4b17023SJohn Marino void 451*e4b17023SJohn Marino register_callback(event_callback __fn, int __index); 452*e4b17023SJohn Marino 453*e4b17023SJohn Marino protected: 454*e4b17023SJohn Marino streamsize _M_precision; 455*e4b17023SJohn Marino streamsize _M_width; 456*e4b17023SJohn Marino fmtflags _M_flags; 457*e4b17023SJohn Marino iostate _M_exception; 458*e4b17023SJohn Marino iostate _M_streambuf_state; 459*e4b17023SJohn Marino 460*e4b17023SJohn Marino // 27.4.2.6 Members for callbacks 461*e4b17023SJohn Marino // 27.4.2.6 ios_base callbacks 462*e4b17023SJohn Marino struct _Callback_list 463*e4b17023SJohn Marino { 464*e4b17023SJohn Marino // Data Members 465*e4b17023SJohn Marino _Callback_list* _M_next; 466*e4b17023SJohn Marino ios_base::event_callback _M_fn; 467*e4b17023SJohn Marino int _M_index; 468*e4b17023SJohn Marino _Atomic_word _M_refcount; // 0 means one reference. 469*e4b17023SJohn Marino 470*e4b17023SJohn Marino _Callback_list(ios_base::event_callback __fn, int __index, 471*e4b17023SJohn Marino _Callback_list* __cb) 472*e4b17023SJohn Marino : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { } 473*e4b17023SJohn Marino 474*e4b17023SJohn Marino void 475*e4b17023SJohn Marino _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } 476*e4b17023SJohn Marino 477*e4b17023SJohn Marino // 0 => OK to delete. 478*e4b17023SJohn Marino int 479*e4b17023SJohn Marino _M_remove_reference() 480*e4b17023SJohn Marino { 481*e4b17023SJohn Marino // Be race-detector-friendly. For more info see bits/c++config. 482*e4b17023SJohn Marino _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount); 483*e4b17023SJohn Marino int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); 484*e4b17023SJohn Marino if (__res == 0) 485*e4b17023SJohn Marino { 486*e4b17023SJohn Marino _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount); 487*e4b17023SJohn Marino } 488*e4b17023SJohn Marino return __res; 489*e4b17023SJohn Marino } 490*e4b17023SJohn Marino }; 491*e4b17023SJohn Marino 492*e4b17023SJohn Marino _Callback_list* _M_callbacks; 493*e4b17023SJohn Marino 494*e4b17023SJohn Marino void 495*e4b17023SJohn Marino _M_call_callbacks(event __ev) throw(); 496*e4b17023SJohn Marino 497*e4b17023SJohn Marino void 498*e4b17023SJohn Marino _M_dispose_callbacks(void) throw(); 499*e4b17023SJohn Marino 500*e4b17023SJohn Marino // 27.4.2.5 Members for iword/pword storage 501*e4b17023SJohn Marino struct _Words 502*e4b17023SJohn Marino { 503*e4b17023SJohn Marino void* _M_pword; 504*e4b17023SJohn Marino long _M_iword; 505*e4b17023SJohn Marino _Words() : _M_pword(0), _M_iword(0) { } 506*e4b17023SJohn Marino }; 507*e4b17023SJohn Marino 508*e4b17023SJohn Marino // Only for failed iword/pword calls. 509*e4b17023SJohn Marino _Words _M_word_zero; 510*e4b17023SJohn Marino 511*e4b17023SJohn Marino // Guaranteed storage. 512*e4b17023SJohn Marino // The first 5 iword and pword slots are reserved for internal use. 513*e4b17023SJohn Marino enum { _S_local_word_size = 8 }; 514*e4b17023SJohn Marino _Words _M_local_word[_S_local_word_size]; 515*e4b17023SJohn Marino 516*e4b17023SJohn Marino // Allocated storage. 517*e4b17023SJohn Marino int _M_word_size; 518*e4b17023SJohn Marino _Words* _M_word; 519*e4b17023SJohn Marino 520*e4b17023SJohn Marino _Words& 521*e4b17023SJohn Marino _M_grow_words(int __index, bool __iword); 522*e4b17023SJohn Marino 523*e4b17023SJohn Marino // Members for locale and locale caching. 524*e4b17023SJohn Marino locale _M_ios_locale; 525*e4b17023SJohn Marino 526*e4b17023SJohn Marino void 527*e4b17023SJohn Marino _M_init() throw(); 528*e4b17023SJohn Marino 529*e4b17023SJohn Marino public: 530*e4b17023SJohn Marino 531*e4b17023SJohn Marino // 27.4.2.1.6 Class ios_base::Init 532*e4b17023SJohn Marino // Used to initialize standard streams. In theory, g++ could use 533*e4b17023SJohn Marino // -finit-priority to order this stuff correctly without going 534*e4b17023SJohn Marino // through these machinations. 535*e4b17023SJohn Marino class Init 536*e4b17023SJohn Marino { 537*e4b17023SJohn Marino friend class ios_base; 538*e4b17023SJohn Marino public: 539*e4b17023SJohn Marino Init(); 540*e4b17023SJohn Marino ~Init(); 541*e4b17023SJohn Marino 542*e4b17023SJohn Marino private: 543*e4b17023SJohn Marino static _Atomic_word _S_refcount; 544*e4b17023SJohn Marino static bool _S_synced_with_stdio; 545*e4b17023SJohn Marino }; 546*e4b17023SJohn Marino 547*e4b17023SJohn Marino // [27.4.2.2] fmtflags state functions 548*e4b17023SJohn Marino /** 549*e4b17023SJohn Marino * @brief Access to format flags. 550*e4b17023SJohn Marino * @return The format control flags for both input and output. 551*e4b17023SJohn Marino */ 552*e4b17023SJohn Marino fmtflags 553*e4b17023SJohn Marino flags() const 554*e4b17023SJohn Marino { return _M_flags; } 555*e4b17023SJohn Marino 556*e4b17023SJohn Marino /** 557*e4b17023SJohn Marino * @brief Setting new format flags all at once. 558*e4b17023SJohn Marino * @param __fmtfl The new flags to set. 559*e4b17023SJohn Marino * @return The previous format control flags. 560*e4b17023SJohn Marino * 561*e4b17023SJohn Marino * This function overwrites all the format flags with @a __fmtfl. 562*e4b17023SJohn Marino */ 563*e4b17023SJohn Marino fmtflags 564*e4b17023SJohn Marino flags(fmtflags __fmtfl) 565*e4b17023SJohn Marino { 566*e4b17023SJohn Marino fmtflags __old = _M_flags; 567*e4b17023SJohn Marino _M_flags = __fmtfl; 568*e4b17023SJohn Marino return __old; 569*e4b17023SJohn Marino } 570*e4b17023SJohn Marino 571*e4b17023SJohn Marino /** 572*e4b17023SJohn Marino * @brief Setting new format flags. 573*e4b17023SJohn Marino * @param __fmtfl Additional flags to set. 574*e4b17023SJohn Marino * @return The previous format control flags. 575*e4b17023SJohn Marino * 576*e4b17023SJohn Marino * This function sets additional flags in format control. Flags that 577*e4b17023SJohn Marino * were previously set remain set. 578*e4b17023SJohn Marino */ 579*e4b17023SJohn Marino fmtflags 580*e4b17023SJohn Marino setf(fmtflags __fmtfl) 581*e4b17023SJohn Marino { 582*e4b17023SJohn Marino fmtflags __old = _M_flags; 583*e4b17023SJohn Marino _M_flags |= __fmtfl; 584*e4b17023SJohn Marino return __old; 585*e4b17023SJohn Marino } 586*e4b17023SJohn Marino 587*e4b17023SJohn Marino /** 588*e4b17023SJohn Marino * @brief Setting new format flags. 589*e4b17023SJohn Marino * @param __fmtfl Additional flags to set. 590*e4b17023SJohn Marino * @param __mask The flags mask for @a fmtfl. 591*e4b17023SJohn Marino * @return The previous format control flags. 592*e4b17023SJohn Marino * 593*e4b17023SJohn Marino * This function clears @a mask in the format flags, then sets 594*e4b17023SJohn Marino * @a fmtfl @c & @a mask. An example mask is @c ios_base::adjustfield. 595*e4b17023SJohn Marino */ 596*e4b17023SJohn Marino fmtflags 597*e4b17023SJohn Marino setf(fmtflags __fmtfl, fmtflags __mask) 598*e4b17023SJohn Marino { 599*e4b17023SJohn Marino fmtflags __old = _M_flags; 600*e4b17023SJohn Marino _M_flags &= ~__mask; 601*e4b17023SJohn Marino _M_flags |= (__fmtfl & __mask); 602*e4b17023SJohn Marino return __old; 603*e4b17023SJohn Marino } 604*e4b17023SJohn Marino 605*e4b17023SJohn Marino /** 606*e4b17023SJohn Marino * @brief Clearing format flags. 607*e4b17023SJohn Marino * @param __mask The flags to unset. 608*e4b17023SJohn Marino * 609*e4b17023SJohn Marino * This function clears @a __mask in the format flags. 610*e4b17023SJohn Marino */ 611*e4b17023SJohn Marino void 612*e4b17023SJohn Marino unsetf(fmtflags __mask) 613*e4b17023SJohn Marino { _M_flags &= ~__mask; } 614*e4b17023SJohn Marino 615*e4b17023SJohn Marino /** 616*e4b17023SJohn Marino * @brief Flags access. 617*e4b17023SJohn Marino * @return The precision to generate on certain output operations. 618*e4b17023SJohn Marino * 619*e4b17023SJohn Marino * Be careful if you try to give a definition of @a precision here; see 620*e4b17023SJohn Marino * DR 189. 621*e4b17023SJohn Marino */ 622*e4b17023SJohn Marino streamsize 623*e4b17023SJohn Marino precision() const 624*e4b17023SJohn Marino { return _M_precision; } 625*e4b17023SJohn Marino 626*e4b17023SJohn Marino /** 627*e4b17023SJohn Marino * @brief Changing flags. 628*e4b17023SJohn Marino * @param __prec The new precision value. 629*e4b17023SJohn Marino * @return The previous value of precision(). 630*e4b17023SJohn Marino */ 631*e4b17023SJohn Marino streamsize 632*e4b17023SJohn Marino precision(streamsize __prec) 633*e4b17023SJohn Marino { 634*e4b17023SJohn Marino streamsize __old = _M_precision; 635*e4b17023SJohn Marino _M_precision = __prec; 636*e4b17023SJohn Marino return __old; 637*e4b17023SJohn Marino } 638*e4b17023SJohn Marino 639*e4b17023SJohn Marino /** 640*e4b17023SJohn Marino * @brief Flags access. 641*e4b17023SJohn Marino * @return The minimum field width to generate on output operations. 642*e4b17023SJohn Marino * 643*e4b17023SJohn Marino * <em>Minimum field width</em> refers to the number of characters. 644*e4b17023SJohn Marino */ 645*e4b17023SJohn Marino streamsize 646*e4b17023SJohn Marino width() const 647*e4b17023SJohn Marino { return _M_width; } 648*e4b17023SJohn Marino 649*e4b17023SJohn Marino /** 650*e4b17023SJohn Marino * @brief Changing flags. 651*e4b17023SJohn Marino * @param __wide The new width value. 652*e4b17023SJohn Marino * @return The previous value of width(). 653*e4b17023SJohn Marino */ 654*e4b17023SJohn Marino streamsize 655*e4b17023SJohn Marino width(streamsize __wide) 656*e4b17023SJohn Marino { 657*e4b17023SJohn Marino streamsize __old = _M_width; 658*e4b17023SJohn Marino _M_width = __wide; 659*e4b17023SJohn Marino return __old; 660*e4b17023SJohn Marino } 661*e4b17023SJohn Marino 662*e4b17023SJohn Marino // [27.4.2.4] ios_base static members 663*e4b17023SJohn Marino /** 664*e4b17023SJohn Marino * @brief Interaction with the standard C I/O objects. 665*e4b17023SJohn Marino * @param __sync Whether to synchronize or not. 666*e4b17023SJohn Marino * @return True if the standard streams were previously synchronized. 667*e4b17023SJohn Marino * 668*e4b17023SJohn Marino * The synchronization referred to is @e only that between the standard 669*e4b17023SJohn Marino * C facilities (e.g., stdout) and the standard C++ objects (e.g., 670*e4b17023SJohn Marino * cout). User-declared streams are unaffected. See 671*e4b17023SJohn Marino * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch28s02.html 672*e4b17023SJohn Marino */ 673*e4b17023SJohn Marino static bool 674*e4b17023SJohn Marino sync_with_stdio(bool __sync = true); 675*e4b17023SJohn Marino 676*e4b17023SJohn Marino // [27.4.2.3] ios_base locale functions 677*e4b17023SJohn Marino /** 678*e4b17023SJohn Marino * @brief Setting a new locale. 679*e4b17023SJohn Marino * @param __loc The new locale. 680*e4b17023SJohn Marino * @return The previous locale. 681*e4b17023SJohn Marino * 682*e4b17023SJohn Marino * Sets the new locale for this stream, and then invokes each callback 683*e4b17023SJohn Marino * with imbue_event. 684*e4b17023SJohn Marino */ 685*e4b17023SJohn Marino locale 686*e4b17023SJohn Marino imbue(const locale& __loc) throw(); 687*e4b17023SJohn Marino 688*e4b17023SJohn Marino /** 689*e4b17023SJohn Marino * @brief Locale access 690*e4b17023SJohn Marino * @return A copy of the current locale. 691*e4b17023SJohn Marino * 692*e4b17023SJohn Marino * If @c imbue(loc) has previously been called, then this function 693*e4b17023SJohn Marino * returns @c loc. Otherwise, it returns a copy of @c std::locale(), 694*e4b17023SJohn Marino * the global C++ locale. 695*e4b17023SJohn Marino */ 696*e4b17023SJohn Marino locale 697*e4b17023SJohn Marino getloc() const 698*e4b17023SJohn Marino { return _M_ios_locale; } 699*e4b17023SJohn Marino 700*e4b17023SJohn Marino /** 701*e4b17023SJohn Marino * @brief Locale access 702*e4b17023SJohn Marino * @return A reference to the current locale. 703*e4b17023SJohn Marino * 704*e4b17023SJohn Marino * Like getloc above, but returns a reference instead of 705*e4b17023SJohn Marino * generating a copy. 706*e4b17023SJohn Marino */ 707*e4b17023SJohn Marino const locale& 708*e4b17023SJohn Marino _M_getloc() const 709*e4b17023SJohn Marino { return _M_ios_locale; } 710*e4b17023SJohn Marino 711*e4b17023SJohn Marino // [27.4.2.5] ios_base storage functions 712*e4b17023SJohn Marino /** 713*e4b17023SJohn Marino * @brief Access to unique indices. 714*e4b17023SJohn Marino * @return An integer different from all previous calls. 715*e4b17023SJohn Marino * 716*e4b17023SJohn Marino * This function returns a unique integer every time it is called. It 717*e4b17023SJohn Marino * can be used for any purpose, but is primarily intended to be a unique 718*e4b17023SJohn Marino * index for the iword and pword functions. The expectation is that an 719*e4b17023SJohn Marino * application calls xalloc in order to obtain an index in the iword and 720*e4b17023SJohn Marino * pword arrays that can be used without fear of conflict. 721*e4b17023SJohn Marino * 722*e4b17023SJohn Marino * The implementation maintains a static variable that is incremented and 723*e4b17023SJohn Marino * returned on each invocation. xalloc is guaranteed to return an index 724*e4b17023SJohn Marino * that is safe to use in the iword and pword arrays. 725*e4b17023SJohn Marino */ 726*e4b17023SJohn Marino static int 727*e4b17023SJohn Marino xalloc() throw(); 728*e4b17023SJohn Marino 729*e4b17023SJohn Marino /** 730*e4b17023SJohn Marino * @brief Access to integer array. 731*e4b17023SJohn Marino * @param __ix Index into the array. 732*e4b17023SJohn Marino * @return A reference to an integer associated with the index. 733*e4b17023SJohn Marino * 734*e4b17023SJohn Marino * The iword function provides access to an array of integers that can be 735*e4b17023SJohn Marino * used for any purpose. The array grows as required to hold the 736*e4b17023SJohn Marino * supplied index. All integers in the array are initialized to 0. 737*e4b17023SJohn Marino * 738*e4b17023SJohn Marino * The implementation reserves several indices. You should use xalloc to 739*e4b17023SJohn Marino * obtain an index that is safe to use. Also note that since the array 740*e4b17023SJohn Marino * can grow dynamically, it is not safe to hold onto the reference. 741*e4b17023SJohn Marino */ 742*e4b17023SJohn Marino long& 743*e4b17023SJohn Marino iword(int __ix) 744*e4b17023SJohn Marino { 745*e4b17023SJohn Marino _Words& __word = (__ix < _M_word_size) 746*e4b17023SJohn Marino ? _M_word[__ix] : _M_grow_words(__ix, true); 747*e4b17023SJohn Marino return __word._M_iword; 748*e4b17023SJohn Marino } 749*e4b17023SJohn Marino 750*e4b17023SJohn Marino /** 751*e4b17023SJohn Marino * @brief Access to void pointer array. 752*e4b17023SJohn Marino * @param __ix Index into the array. 753*e4b17023SJohn Marino * @return A reference to a void* associated with the index. 754*e4b17023SJohn Marino * 755*e4b17023SJohn Marino * The pword function provides access to an array of pointers that can be 756*e4b17023SJohn Marino * used for any purpose. The array grows as required to hold the 757*e4b17023SJohn Marino * supplied index. All pointers in the array are initialized to 0. 758*e4b17023SJohn Marino * 759*e4b17023SJohn Marino * The implementation reserves several indices. You should use xalloc to 760*e4b17023SJohn Marino * obtain an index that is safe to use. Also note that since the array 761*e4b17023SJohn Marino * can grow dynamically, it is not safe to hold onto the reference. 762*e4b17023SJohn Marino */ 763*e4b17023SJohn Marino void*& 764*e4b17023SJohn Marino pword(int __ix) 765*e4b17023SJohn Marino { 766*e4b17023SJohn Marino _Words& __word = (__ix < _M_word_size) 767*e4b17023SJohn Marino ? _M_word[__ix] : _M_grow_words(__ix, false); 768*e4b17023SJohn Marino return __word._M_pword; 769*e4b17023SJohn Marino } 770*e4b17023SJohn Marino 771*e4b17023SJohn Marino // Destructor 772*e4b17023SJohn Marino /** 773*e4b17023SJohn Marino * Invokes each callback with erase_event. Destroys local storage. 774*e4b17023SJohn Marino * 775*e4b17023SJohn Marino * Note that the ios_base object for the standard streams never gets 776*e4b17023SJohn Marino * destroyed. As a result, any callbacks registered with the standard 777*e4b17023SJohn Marino * streams will not get invoked with erase_event (unless copyfmt is 778*e4b17023SJohn Marino * used). 779*e4b17023SJohn Marino */ 780*e4b17023SJohn Marino virtual ~ios_base(); 781*e4b17023SJohn Marino 782*e4b17023SJohn Marino protected: 783*e4b17023SJohn Marino ios_base() throw (); 784*e4b17023SJohn Marino 785*e4b17023SJohn Marino // _GLIBCXX_RESOLVE_LIB_DEFECTS 786*e4b17023SJohn Marino // 50. Copy constructor and assignment operator of ios_base 787*e4b17023SJohn Marino private: 788*e4b17023SJohn Marino ios_base(const ios_base&); 789*e4b17023SJohn Marino 790*e4b17023SJohn Marino ios_base& 791*e4b17023SJohn Marino operator=(const ios_base&); 792*e4b17023SJohn Marino }; 793*e4b17023SJohn Marino 794*e4b17023SJohn Marino // [27.4.5.1] fmtflags manipulators 795*e4b17023SJohn Marino /// Calls base.setf(ios_base::boolalpha). 796*e4b17023SJohn Marino inline ios_base& 797*e4b17023SJohn Marino boolalpha(ios_base& __base) 798*e4b17023SJohn Marino { 799*e4b17023SJohn Marino __base.setf(ios_base::boolalpha); 800*e4b17023SJohn Marino return __base; 801*e4b17023SJohn Marino } 802*e4b17023SJohn Marino 803*e4b17023SJohn Marino /// Calls base.unsetf(ios_base::boolalpha). 804*e4b17023SJohn Marino inline ios_base& 805*e4b17023SJohn Marino noboolalpha(ios_base& __base) 806*e4b17023SJohn Marino { 807*e4b17023SJohn Marino __base.unsetf(ios_base::boolalpha); 808*e4b17023SJohn Marino return __base; 809*e4b17023SJohn Marino } 810*e4b17023SJohn Marino 811*e4b17023SJohn Marino /// Calls base.setf(ios_base::showbase). 812*e4b17023SJohn Marino inline ios_base& 813*e4b17023SJohn Marino showbase(ios_base& __base) 814*e4b17023SJohn Marino { 815*e4b17023SJohn Marino __base.setf(ios_base::showbase); 816*e4b17023SJohn Marino return __base; 817*e4b17023SJohn Marino } 818*e4b17023SJohn Marino 819*e4b17023SJohn Marino /// Calls base.unsetf(ios_base::showbase). 820*e4b17023SJohn Marino inline ios_base& 821*e4b17023SJohn Marino noshowbase(ios_base& __base) 822*e4b17023SJohn Marino { 823*e4b17023SJohn Marino __base.unsetf(ios_base::showbase); 824*e4b17023SJohn Marino return __base; 825*e4b17023SJohn Marino } 826*e4b17023SJohn Marino 827*e4b17023SJohn Marino /// Calls base.setf(ios_base::showpoint). 828*e4b17023SJohn Marino inline ios_base& 829*e4b17023SJohn Marino showpoint(ios_base& __base) 830*e4b17023SJohn Marino { 831*e4b17023SJohn Marino __base.setf(ios_base::showpoint); 832*e4b17023SJohn Marino return __base; 833*e4b17023SJohn Marino } 834*e4b17023SJohn Marino 835*e4b17023SJohn Marino /// Calls base.unsetf(ios_base::showpoint). 836*e4b17023SJohn Marino inline ios_base& 837*e4b17023SJohn Marino noshowpoint(ios_base& __base) 838*e4b17023SJohn Marino { 839*e4b17023SJohn Marino __base.unsetf(ios_base::showpoint); 840*e4b17023SJohn Marino return __base; 841*e4b17023SJohn Marino } 842*e4b17023SJohn Marino 843*e4b17023SJohn Marino /// Calls base.setf(ios_base::showpos). 844*e4b17023SJohn Marino inline ios_base& 845*e4b17023SJohn Marino showpos(ios_base& __base) 846*e4b17023SJohn Marino { 847*e4b17023SJohn Marino __base.setf(ios_base::showpos); 848*e4b17023SJohn Marino return __base; 849*e4b17023SJohn Marino } 850*e4b17023SJohn Marino 851*e4b17023SJohn Marino /// Calls base.unsetf(ios_base::showpos). 852*e4b17023SJohn Marino inline ios_base& 853*e4b17023SJohn Marino noshowpos(ios_base& __base) 854*e4b17023SJohn Marino { 855*e4b17023SJohn Marino __base.unsetf(ios_base::showpos); 856*e4b17023SJohn Marino return __base; 857*e4b17023SJohn Marino } 858*e4b17023SJohn Marino 859*e4b17023SJohn Marino /// Calls base.setf(ios_base::skipws). 860*e4b17023SJohn Marino inline ios_base& 861*e4b17023SJohn Marino skipws(ios_base& __base) 862*e4b17023SJohn Marino { 863*e4b17023SJohn Marino __base.setf(ios_base::skipws); 864*e4b17023SJohn Marino return __base; 865*e4b17023SJohn Marino } 866*e4b17023SJohn Marino 867*e4b17023SJohn Marino /// Calls base.unsetf(ios_base::skipws). 868*e4b17023SJohn Marino inline ios_base& 869*e4b17023SJohn Marino noskipws(ios_base& __base) 870*e4b17023SJohn Marino { 871*e4b17023SJohn Marino __base.unsetf(ios_base::skipws); 872*e4b17023SJohn Marino return __base; 873*e4b17023SJohn Marino } 874*e4b17023SJohn Marino 875*e4b17023SJohn Marino /// Calls base.setf(ios_base::uppercase). 876*e4b17023SJohn Marino inline ios_base& 877*e4b17023SJohn Marino uppercase(ios_base& __base) 878*e4b17023SJohn Marino { 879*e4b17023SJohn Marino __base.setf(ios_base::uppercase); 880*e4b17023SJohn Marino return __base; 881*e4b17023SJohn Marino } 882*e4b17023SJohn Marino 883*e4b17023SJohn Marino /// Calls base.unsetf(ios_base::uppercase). 884*e4b17023SJohn Marino inline ios_base& 885*e4b17023SJohn Marino nouppercase(ios_base& __base) 886*e4b17023SJohn Marino { 887*e4b17023SJohn Marino __base.unsetf(ios_base::uppercase); 888*e4b17023SJohn Marino return __base; 889*e4b17023SJohn Marino } 890*e4b17023SJohn Marino 891*e4b17023SJohn Marino /// Calls base.setf(ios_base::unitbuf). 892*e4b17023SJohn Marino inline ios_base& 893*e4b17023SJohn Marino unitbuf(ios_base& __base) 894*e4b17023SJohn Marino { 895*e4b17023SJohn Marino __base.setf(ios_base::unitbuf); 896*e4b17023SJohn Marino return __base; 897*e4b17023SJohn Marino } 898*e4b17023SJohn Marino 899*e4b17023SJohn Marino /// Calls base.unsetf(ios_base::unitbuf). 900*e4b17023SJohn Marino inline ios_base& 901*e4b17023SJohn Marino nounitbuf(ios_base& __base) 902*e4b17023SJohn Marino { 903*e4b17023SJohn Marino __base.unsetf(ios_base::unitbuf); 904*e4b17023SJohn Marino return __base; 905*e4b17023SJohn Marino } 906*e4b17023SJohn Marino 907*e4b17023SJohn Marino // [27.4.5.2] adjustfield manipulators 908*e4b17023SJohn Marino /// Calls base.setf(ios_base::internal, ios_base::adjustfield). 909*e4b17023SJohn Marino inline ios_base& 910*e4b17023SJohn Marino internal(ios_base& __base) 911*e4b17023SJohn Marino { 912*e4b17023SJohn Marino __base.setf(ios_base::internal, ios_base::adjustfield); 913*e4b17023SJohn Marino return __base; 914*e4b17023SJohn Marino } 915*e4b17023SJohn Marino 916*e4b17023SJohn Marino /// Calls base.setf(ios_base::left, ios_base::adjustfield). 917*e4b17023SJohn Marino inline ios_base& 918*e4b17023SJohn Marino left(ios_base& __base) 919*e4b17023SJohn Marino { 920*e4b17023SJohn Marino __base.setf(ios_base::left, ios_base::adjustfield); 921*e4b17023SJohn Marino return __base; 922*e4b17023SJohn Marino } 923*e4b17023SJohn Marino 924*e4b17023SJohn Marino /// Calls base.setf(ios_base::right, ios_base::adjustfield). 925*e4b17023SJohn Marino inline ios_base& 926*e4b17023SJohn Marino right(ios_base& __base) 927*e4b17023SJohn Marino { 928*e4b17023SJohn Marino __base.setf(ios_base::right, ios_base::adjustfield); 929*e4b17023SJohn Marino return __base; 930*e4b17023SJohn Marino } 931*e4b17023SJohn Marino 932*e4b17023SJohn Marino // [27.4.5.3] basefield manipulators 933*e4b17023SJohn Marino /// Calls base.setf(ios_base::dec, ios_base::basefield). 934*e4b17023SJohn Marino inline ios_base& 935*e4b17023SJohn Marino dec(ios_base& __base) 936*e4b17023SJohn Marino { 937*e4b17023SJohn Marino __base.setf(ios_base::dec, ios_base::basefield); 938*e4b17023SJohn Marino return __base; 939*e4b17023SJohn Marino } 940*e4b17023SJohn Marino 941*e4b17023SJohn Marino /// Calls base.setf(ios_base::hex, ios_base::basefield). 942*e4b17023SJohn Marino inline ios_base& 943*e4b17023SJohn Marino hex(ios_base& __base) 944*e4b17023SJohn Marino { 945*e4b17023SJohn Marino __base.setf(ios_base::hex, ios_base::basefield); 946*e4b17023SJohn Marino return __base; 947*e4b17023SJohn Marino } 948*e4b17023SJohn Marino 949*e4b17023SJohn Marino /// Calls base.setf(ios_base::oct, ios_base::basefield). 950*e4b17023SJohn Marino inline ios_base& 951*e4b17023SJohn Marino oct(ios_base& __base) 952*e4b17023SJohn Marino { 953*e4b17023SJohn Marino __base.setf(ios_base::oct, ios_base::basefield); 954*e4b17023SJohn Marino return __base; 955*e4b17023SJohn Marino } 956*e4b17023SJohn Marino 957*e4b17023SJohn Marino // [27.4.5.4] floatfield manipulators 958*e4b17023SJohn Marino /// Calls base.setf(ios_base::fixed, ios_base::floatfield). 959*e4b17023SJohn Marino inline ios_base& 960*e4b17023SJohn Marino fixed(ios_base& __base) 961*e4b17023SJohn Marino { 962*e4b17023SJohn Marino __base.setf(ios_base::fixed, ios_base::floatfield); 963*e4b17023SJohn Marino return __base; 964*e4b17023SJohn Marino } 965*e4b17023SJohn Marino 966*e4b17023SJohn Marino /// Calls base.setf(ios_base::scientific, ios_base::floatfield). 967*e4b17023SJohn Marino inline ios_base& 968*e4b17023SJohn Marino scientific(ios_base& __base) 969*e4b17023SJohn Marino { 970*e4b17023SJohn Marino __base.setf(ios_base::scientific, ios_base::floatfield); 971*e4b17023SJohn Marino return __base; 972*e4b17023SJohn Marino } 973*e4b17023SJohn Marino 974*e4b17023SJohn Marino _GLIBCXX_END_NAMESPACE_VERSION 975*e4b17023SJohn Marino } // namespace 976*e4b17023SJohn Marino 977*e4b17023SJohn Marino #endif /* _IOS_BASE_H */ 978