11debfc3dSmrg // Iostreams base classes -*- C++ -*-
21debfc3dSmrg
3*8feb0f0bSmrg // Copyright (C) 1997-2020 Free Software Foundation, Inc.
41debfc3dSmrg //
51debfc3dSmrg // This file is part of the GNU ISO C++ Library. This library is free
61debfc3dSmrg // software; you can redistribute it and/or modify it under the
71debfc3dSmrg // terms of the GNU General Public License as published by the
81debfc3dSmrg // Free Software Foundation; either version 3, or (at your option)
91debfc3dSmrg // any later version.
101debfc3dSmrg
111debfc3dSmrg // This library is distributed in the hope that it will be useful,
121debfc3dSmrg // but WITHOUT ANY WARRANTY; without even the implied warranty of
131debfc3dSmrg // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
141debfc3dSmrg // GNU General Public License for more details.
151debfc3dSmrg
161debfc3dSmrg // Under Section 7 of GPL version 3, you are granted additional
171debfc3dSmrg // permissions described in the GCC Runtime Library Exception, version
181debfc3dSmrg // 3.1, as published by the Free Software Foundation.
191debfc3dSmrg
201debfc3dSmrg // You should have received a copy of the GNU General Public License and
211debfc3dSmrg // a copy of the GCC Runtime Library Exception along with this program;
221debfc3dSmrg // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
231debfc3dSmrg // <http://www.gnu.org/licenses/>.
241debfc3dSmrg
251debfc3dSmrg /** @file bits/ios_base.h
261debfc3dSmrg * This is an internal header file, included by other library headers.
271debfc3dSmrg * Do not attempt to use it directly. @headername{ios}
281debfc3dSmrg */
291debfc3dSmrg
301debfc3dSmrg //
311debfc3dSmrg // ISO C++ 14882: 27.4 Iostreams base classes
321debfc3dSmrg //
331debfc3dSmrg
341debfc3dSmrg #ifndef _IOS_BASE_H
351debfc3dSmrg #define _IOS_BASE_H 1
361debfc3dSmrg
371debfc3dSmrg #pragma GCC system_header
381debfc3dSmrg
391debfc3dSmrg #include <ext/atomicity.h>
401debfc3dSmrg #include <bits/localefwd.h>
411debfc3dSmrg #include <bits/locale_classes.h>
421debfc3dSmrg
431debfc3dSmrg #if __cplusplus < 201103L
441debfc3dSmrg # include <stdexcept>
451debfc3dSmrg #else
461debfc3dSmrg # include <system_error>
471debfc3dSmrg #endif
481debfc3dSmrg
_GLIBCXX_VISIBILITY(default)491debfc3dSmrg namespace std _GLIBCXX_VISIBILITY(default)
501debfc3dSmrg {
511debfc3dSmrg _GLIBCXX_BEGIN_NAMESPACE_VERSION
521debfc3dSmrg
531debfc3dSmrg // The following definitions of bitmask types are enums, not ints,
541debfc3dSmrg // as permitted (but not required) in the standard, in order to provide
551debfc3dSmrg // better type safety in iostream calls. A side effect is that in C++98
561debfc3dSmrg // expressions involving them are not compile-time constants.
571debfc3dSmrg enum _Ios_Fmtflags
581debfc3dSmrg {
591debfc3dSmrg _S_boolalpha = 1L << 0,
601debfc3dSmrg _S_dec = 1L << 1,
611debfc3dSmrg _S_fixed = 1L << 2,
621debfc3dSmrg _S_hex = 1L << 3,
631debfc3dSmrg _S_internal = 1L << 4,
641debfc3dSmrg _S_left = 1L << 5,
651debfc3dSmrg _S_oct = 1L << 6,
661debfc3dSmrg _S_right = 1L << 7,
671debfc3dSmrg _S_scientific = 1L << 8,
681debfc3dSmrg _S_showbase = 1L << 9,
691debfc3dSmrg _S_showpoint = 1L << 10,
701debfc3dSmrg _S_showpos = 1L << 11,
711debfc3dSmrg _S_skipws = 1L << 12,
721debfc3dSmrg _S_unitbuf = 1L << 13,
731debfc3dSmrg _S_uppercase = 1L << 14,
741debfc3dSmrg _S_adjustfield = _S_left | _S_right | _S_internal,
751debfc3dSmrg _S_basefield = _S_dec | _S_oct | _S_hex,
761debfc3dSmrg _S_floatfield = _S_scientific | _S_fixed,
771debfc3dSmrg _S_ios_fmtflags_end = 1L << 16,
781debfc3dSmrg _S_ios_fmtflags_max = __INT_MAX__,
791debfc3dSmrg _S_ios_fmtflags_min = ~__INT_MAX__
801debfc3dSmrg };
811debfc3dSmrg
821debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
831debfc3dSmrg operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
841debfc3dSmrg { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
851debfc3dSmrg
861debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
871debfc3dSmrg operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
881debfc3dSmrg { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
891debfc3dSmrg
901debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
911debfc3dSmrg operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
921debfc3dSmrg { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
931debfc3dSmrg
941debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
951debfc3dSmrg operator~(_Ios_Fmtflags __a)
961debfc3dSmrg { return _Ios_Fmtflags(~static_cast<int>(__a)); }
971debfc3dSmrg
981debfc3dSmrg inline const _Ios_Fmtflags&
991debfc3dSmrg operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
1001debfc3dSmrg { return __a = __a | __b; }
1011debfc3dSmrg
1021debfc3dSmrg inline const _Ios_Fmtflags&
1031debfc3dSmrg operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
1041debfc3dSmrg { return __a = __a & __b; }
1051debfc3dSmrg
1061debfc3dSmrg inline const _Ios_Fmtflags&
1071debfc3dSmrg operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
1081debfc3dSmrg { return __a = __a ^ __b; }
1091debfc3dSmrg
1101debfc3dSmrg
1111debfc3dSmrg enum _Ios_Openmode
1121debfc3dSmrg {
1131debfc3dSmrg _S_app = 1L << 0,
1141debfc3dSmrg _S_ate = 1L << 1,
1151debfc3dSmrg _S_bin = 1L << 2,
1161debfc3dSmrg _S_in = 1L << 3,
1171debfc3dSmrg _S_out = 1L << 4,
1181debfc3dSmrg _S_trunc = 1L << 5,
1191debfc3dSmrg _S_ios_openmode_end = 1L << 16,
1201debfc3dSmrg _S_ios_openmode_max = __INT_MAX__,
1211debfc3dSmrg _S_ios_openmode_min = ~__INT_MAX__
1221debfc3dSmrg };
1231debfc3dSmrg
1241debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Openmode
1251debfc3dSmrg operator&(_Ios_Openmode __a, _Ios_Openmode __b)
1261debfc3dSmrg { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
1271debfc3dSmrg
1281debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Openmode
1291debfc3dSmrg operator|(_Ios_Openmode __a, _Ios_Openmode __b)
1301debfc3dSmrg { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
1311debfc3dSmrg
1321debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Openmode
1331debfc3dSmrg operator^(_Ios_Openmode __a, _Ios_Openmode __b)
1341debfc3dSmrg { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
1351debfc3dSmrg
1361debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Openmode
1371debfc3dSmrg operator~(_Ios_Openmode __a)
1381debfc3dSmrg { return _Ios_Openmode(~static_cast<int>(__a)); }
1391debfc3dSmrg
1401debfc3dSmrg inline const _Ios_Openmode&
1411debfc3dSmrg operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
1421debfc3dSmrg { return __a = __a | __b; }
1431debfc3dSmrg
1441debfc3dSmrg inline const _Ios_Openmode&
1451debfc3dSmrg operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
1461debfc3dSmrg { return __a = __a & __b; }
1471debfc3dSmrg
1481debfc3dSmrg inline const _Ios_Openmode&
1491debfc3dSmrg operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
1501debfc3dSmrg { return __a = __a ^ __b; }
1511debfc3dSmrg
1521debfc3dSmrg
1531debfc3dSmrg enum _Ios_Iostate
1541debfc3dSmrg {
1551debfc3dSmrg _S_goodbit = 0,
1561debfc3dSmrg _S_badbit = 1L << 0,
1571debfc3dSmrg _S_eofbit = 1L << 1,
1581debfc3dSmrg _S_failbit = 1L << 2,
1591debfc3dSmrg _S_ios_iostate_end = 1L << 16,
1601debfc3dSmrg _S_ios_iostate_max = __INT_MAX__,
1611debfc3dSmrg _S_ios_iostate_min = ~__INT_MAX__
1621debfc3dSmrg };
1631debfc3dSmrg
1641debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Iostate
1651debfc3dSmrg operator&(_Ios_Iostate __a, _Ios_Iostate __b)
1661debfc3dSmrg { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
1671debfc3dSmrg
1681debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Iostate
1691debfc3dSmrg operator|(_Ios_Iostate __a, _Ios_Iostate __b)
1701debfc3dSmrg { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
1711debfc3dSmrg
1721debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Iostate
1731debfc3dSmrg operator^(_Ios_Iostate __a, _Ios_Iostate __b)
1741debfc3dSmrg { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
1751debfc3dSmrg
1761debfc3dSmrg inline _GLIBCXX_CONSTEXPR _Ios_Iostate
1771debfc3dSmrg operator~(_Ios_Iostate __a)
1781debfc3dSmrg { return _Ios_Iostate(~static_cast<int>(__a)); }
1791debfc3dSmrg
1801debfc3dSmrg inline const _Ios_Iostate&
1811debfc3dSmrg operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
1821debfc3dSmrg { return __a = __a | __b; }
1831debfc3dSmrg
1841debfc3dSmrg inline const _Ios_Iostate&
1851debfc3dSmrg operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
1861debfc3dSmrg { return __a = __a & __b; }
1871debfc3dSmrg
1881debfc3dSmrg inline const _Ios_Iostate&
1891debfc3dSmrg operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
1901debfc3dSmrg { return __a = __a ^ __b; }
1911debfc3dSmrg
1921debfc3dSmrg
1931debfc3dSmrg enum _Ios_Seekdir
1941debfc3dSmrg {
1951debfc3dSmrg _S_beg = 0,
1961debfc3dSmrg _S_cur = _GLIBCXX_STDIO_SEEK_CUR,
1971debfc3dSmrg _S_end = _GLIBCXX_STDIO_SEEK_END,
1981debfc3dSmrg _S_ios_seekdir_end = 1L << 16
1991debfc3dSmrg };
2001debfc3dSmrg
2011debfc3dSmrg #if __cplusplus >= 201103L
2021debfc3dSmrg /// I/O error code
2031debfc3dSmrg enum class io_errc { stream = 1 };
2041debfc3dSmrg
2051debfc3dSmrg template <> struct is_error_code_enum<io_errc> : public true_type { };
2061debfc3dSmrg
2071debfc3dSmrg const error_category& iostream_category() noexcept;
2081debfc3dSmrg
2091debfc3dSmrg inline error_code
2101debfc3dSmrg make_error_code(io_errc __e) noexcept
2111debfc3dSmrg { return error_code(static_cast<int>(__e), iostream_category()); }
2121debfc3dSmrg
2131debfc3dSmrg inline error_condition
2141debfc3dSmrg make_error_condition(io_errc __e) noexcept
2151debfc3dSmrg { return error_condition(static_cast<int>(__e), iostream_category()); }
2161debfc3dSmrg #endif
2171debfc3dSmrg
2181debfc3dSmrg // 27.4.2 Class ios_base
2191debfc3dSmrg /**
2201debfc3dSmrg * @brief The base of the I/O class hierarchy.
2211debfc3dSmrg * @ingroup io
2221debfc3dSmrg *
2231debfc3dSmrg * This class defines everything that can be defined about I/O that does
2241debfc3dSmrg * not depend on the type of characters being input or output. Most
2251debfc3dSmrg * people will only see @c ios_base when they need to specify the full
2261debfc3dSmrg * name of the various I/O flags (e.g., the openmodes).
2271debfc3dSmrg */
2281debfc3dSmrg class ios_base
2291debfc3dSmrg {
2301debfc3dSmrg #if _GLIBCXX_USE_CXX11_ABI
2311debfc3dSmrg #if __cplusplus < 201103L
2321debfc3dSmrg // Type that is layout-compatible with std::system_error
2331debfc3dSmrg struct system_error : std::runtime_error
2341debfc3dSmrg {
2351debfc3dSmrg // Type that is layout-compatible with std::error_code
2361debfc3dSmrg struct error_code
2371debfc3dSmrg {
2381debfc3dSmrg error_code() { }
2391debfc3dSmrg private:
2401debfc3dSmrg int _M_value;
2411debfc3dSmrg const void* _M_cat;
2421debfc3dSmrg } _M_code;
2431debfc3dSmrg };
2441debfc3dSmrg #endif
2451debfc3dSmrg #endif
2461debfc3dSmrg public:
2471debfc3dSmrg
2481debfc3dSmrg /**
2491debfc3dSmrg * @brief These are thrown to indicate problems with io.
2501debfc3dSmrg * @ingroup exceptions
2511debfc3dSmrg *
2521debfc3dSmrg * 27.4.2.1.1 Class ios_base::failure
2531debfc3dSmrg */
2541debfc3dSmrg #if _GLIBCXX_USE_CXX11_ABI
2551debfc3dSmrg class _GLIBCXX_ABI_TAG_CXX11 failure : public system_error
2561debfc3dSmrg {
2571debfc3dSmrg public:
2581debfc3dSmrg explicit
2591debfc3dSmrg failure(const string& __str);
2601debfc3dSmrg
2611debfc3dSmrg #if __cplusplus >= 201103L
2621debfc3dSmrg explicit
2631debfc3dSmrg failure(const string&, const error_code&);
2641debfc3dSmrg
2651debfc3dSmrg explicit
2661debfc3dSmrg failure(const char*, const error_code& = io_errc::stream);
2671debfc3dSmrg #endif
2681debfc3dSmrg
2691debfc3dSmrg virtual
2701debfc3dSmrg ~failure() throw();
2711debfc3dSmrg
2721debfc3dSmrg virtual const char*
2731debfc3dSmrg what() const throw();
2741debfc3dSmrg };
2751debfc3dSmrg #else
2761debfc3dSmrg class failure : public exception
2771debfc3dSmrg {
2781debfc3dSmrg public:
2791debfc3dSmrg // _GLIBCXX_RESOLVE_LIB_DEFECTS
2801debfc3dSmrg // 48. Use of non-existent exception constructor
2811debfc3dSmrg explicit
2821debfc3dSmrg failure(const string& __str) throw();
2831debfc3dSmrg
2841debfc3dSmrg // This declaration is not useless:
2851debfc3dSmrg // http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Vague-Linkage.html
2861debfc3dSmrg virtual
2871debfc3dSmrg ~failure() throw();
2881debfc3dSmrg
2891debfc3dSmrg virtual const char*
2901debfc3dSmrg what() const throw();
2911debfc3dSmrg
292*8feb0f0bSmrg #if __cplusplus >= 201103L
293*8feb0f0bSmrg // Define the new members required by C++11,
294*8feb0f0bSmrg // even though the error_code cannot be stored.
295*8feb0f0bSmrg
296*8feb0f0bSmrg explicit
297*8feb0f0bSmrg failure(const string& __s, const error_code&) noexcept
298*8feb0f0bSmrg : failure(__s)
299*8feb0f0bSmrg { }
300*8feb0f0bSmrg
301*8feb0f0bSmrg explicit
302*8feb0f0bSmrg failure(const char* __s, const error_code& = error_code{})
303*8feb0f0bSmrg : failure(string(__s))
304*8feb0f0bSmrg { }
305*8feb0f0bSmrg
306*8feb0f0bSmrg // Stand-in for system_error::code() but returning by value.
307*8feb0f0bSmrg error_code code() const noexcept { return error_code{}; }
308*8feb0f0bSmrg #endif
309*8feb0f0bSmrg
3101debfc3dSmrg private:
3111debfc3dSmrg string _M_msg;
3121debfc3dSmrg };
3131debfc3dSmrg #endif
3141debfc3dSmrg
3151debfc3dSmrg // 27.4.2.1.2 Type ios_base::fmtflags
3161debfc3dSmrg /**
3171debfc3dSmrg * @brief This is a bitmask type.
3181debfc3dSmrg *
3191debfc3dSmrg * @c @a _Ios_Fmtflags is implementation-defined, but it is valid to
3201debfc3dSmrg * perform bitwise operations on these values and expect the Right
3211debfc3dSmrg * Thing to happen. Defined objects of type fmtflags are:
3221debfc3dSmrg * - boolalpha
3231debfc3dSmrg * - dec
3241debfc3dSmrg * - fixed
3251debfc3dSmrg * - hex
3261debfc3dSmrg * - internal
3271debfc3dSmrg * - left
3281debfc3dSmrg * - oct
3291debfc3dSmrg * - right
3301debfc3dSmrg * - scientific
3311debfc3dSmrg * - showbase
3321debfc3dSmrg * - showpoint
3331debfc3dSmrg * - showpos
3341debfc3dSmrg * - skipws
3351debfc3dSmrg * - unitbuf
3361debfc3dSmrg * - uppercase
3371debfc3dSmrg * - adjustfield
3381debfc3dSmrg * - basefield
3391debfc3dSmrg * - floatfield
3401debfc3dSmrg */
3411debfc3dSmrg typedef _Ios_Fmtflags fmtflags;
3421debfc3dSmrg
3431debfc3dSmrg /// Insert/extract @c bool in alphabetic rather than numeric format.
3441debfc3dSmrg static const fmtflags boolalpha = _S_boolalpha;
3451debfc3dSmrg
3461debfc3dSmrg /// Converts integer input or generates integer output in decimal base.
3471debfc3dSmrg static const fmtflags dec = _S_dec;
3481debfc3dSmrg
3491debfc3dSmrg /// Generate floating-point output in fixed-point notation.
3501debfc3dSmrg static const fmtflags fixed = _S_fixed;
3511debfc3dSmrg
3521debfc3dSmrg /// Converts integer input or generates integer output in hexadecimal base.
3531debfc3dSmrg static const fmtflags hex = _S_hex;
3541debfc3dSmrg
3551debfc3dSmrg /// Adds fill characters at a designated internal point in certain
3561debfc3dSmrg /// generated output, or identical to @c right if no such point is
3571debfc3dSmrg /// designated.
3581debfc3dSmrg static const fmtflags internal = _S_internal;
3591debfc3dSmrg
3601debfc3dSmrg /// Adds fill characters on the right (final positions) of certain
3611debfc3dSmrg /// generated output. (I.e., the thing you print is flush left.)
3621debfc3dSmrg static const fmtflags left = _S_left;
3631debfc3dSmrg
3641debfc3dSmrg /// Converts integer input or generates integer output in octal base.
3651debfc3dSmrg static const fmtflags oct = _S_oct;
3661debfc3dSmrg
3671debfc3dSmrg /// Adds fill characters on the left (initial positions) of certain
3681debfc3dSmrg /// generated output. (I.e., the thing you print is flush right.)
3691debfc3dSmrg static const fmtflags right = _S_right;
3701debfc3dSmrg
3711debfc3dSmrg /// Generates floating-point output in scientific notation.
3721debfc3dSmrg static const fmtflags scientific = _S_scientific;
3731debfc3dSmrg
3741debfc3dSmrg /// Generates a prefix indicating the numeric base of generated integer
3751debfc3dSmrg /// output.
3761debfc3dSmrg static const fmtflags showbase = _S_showbase;
3771debfc3dSmrg
3781debfc3dSmrg /// Generates a decimal-point character unconditionally in generated
3791debfc3dSmrg /// floating-point output.
3801debfc3dSmrg static const fmtflags showpoint = _S_showpoint;
3811debfc3dSmrg
3821debfc3dSmrg /// Generates a + sign in non-negative generated numeric output.
3831debfc3dSmrg static const fmtflags showpos = _S_showpos;
3841debfc3dSmrg
3851debfc3dSmrg /// Skips leading white space before certain input operations.
3861debfc3dSmrg static const fmtflags skipws = _S_skipws;
3871debfc3dSmrg
3881debfc3dSmrg /// Flushes output after each output operation.
3891debfc3dSmrg static const fmtflags unitbuf = _S_unitbuf;
3901debfc3dSmrg
3911debfc3dSmrg /// Replaces certain lowercase letters with their uppercase equivalents
3921debfc3dSmrg /// in generated output.
3931debfc3dSmrg static const fmtflags uppercase = _S_uppercase;
3941debfc3dSmrg
3951debfc3dSmrg /// A mask of left|right|internal. Useful for the 2-arg form of @c setf.
3961debfc3dSmrg static const fmtflags adjustfield = _S_adjustfield;
3971debfc3dSmrg
3981debfc3dSmrg /// A mask of dec|oct|hex. Useful for the 2-arg form of @c setf.
3991debfc3dSmrg static const fmtflags basefield = _S_basefield;
4001debfc3dSmrg
4011debfc3dSmrg /// A mask of scientific|fixed. Useful for the 2-arg form of @c setf.
4021debfc3dSmrg static const fmtflags floatfield = _S_floatfield;
4031debfc3dSmrg
4041debfc3dSmrg // 27.4.2.1.3 Type ios_base::iostate
4051debfc3dSmrg /**
4061debfc3dSmrg * @brief This is a bitmask type.
4071debfc3dSmrg *
4081debfc3dSmrg * @c @a _Ios_Iostate is implementation-defined, but it is valid to
4091debfc3dSmrg * perform bitwise operations on these values and expect the Right
4101debfc3dSmrg * Thing to happen. Defined objects of type iostate are:
4111debfc3dSmrg * - badbit
4121debfc3dSmrg * - eofbit
4131debfc3dSmrg * - failbit
4141debfc3dSmrg * - goodbit
4151debfc3dSmrg */
4161debfc3dSmrg typedef _Ios_Iostate iostate;
4171debfc3dSmrg
4181debfc3dSmrg /// Indicates a loss of integrity in an input or output sequence (such
4191debfc3dSmrg /// as an irrecoverable read error from a file).
4201debfc3dSmrg static const iostate badbit = _S_badbit;
4211debfc3dSmrg
4221debfc3dSmrg /// Indicates that an input operation reached the end of an input sequence.
4231debfc3dSmrg static const iostate eofbit = _S_eofbit;
4241debfc3dSmrg
4251debfc3dSmrg /// Indicates that an input operation failed to read the expected
4261debfc3dSmrg /// characters, or that an output operation failed to generate the
4271debfc3dSmrg /// desired characters.
4281debfc3dSmrg static const iostate failbit = _S_failbit;
4291debfc3dSmrg
4301debfc3dSmrg /// Indicates all is well.
4311debfc3dSmrg static const iostate goodbit = _S_goodbit;
4321debfc3dSmrg
4331debfc3dSmrg // 27.4.2.1.4 Type ios_base::openmode
4341debfc3dSmrg /**
4351debfc3dSmrg * @brief This is a bitmask type.
4361debfc3dSmrg *
4371debfc3dSmrg * @c @a _Ios_Openmode is implementation-defined, but it is valid to
4381debfc3dSmrg * perform bitwise operations on these values and expect the Right
4391debfc3dSmrg * Thing to happen. Defined objects of type openmode are:
4401debfc3dSmrg * - app
4411debfc3dSmrg * - ate
4421debfc3dSmrg * - binary
4431debfc3dSmrg * - in
4441debfc3dSmrg * - out
4451debfc3dSmrg * - trunc
4461debfc3dSmrg */
4471debfc3dSmrg typedef _Ios_Openmode openmode;
4481debfc3dSmrg
4491debfc3dSmrg /// Seek to end before each write.
4501debfc3dSmrg static const openmode app = _S_app;
4511debfc3dSmrg
4521debfc3dSmrg /// Open and seek to end immediately after opening.
4531debfc3dSmrg static const openmode ate = _S_ate;
4541debfc3dSmrg
4551debfc3dSmrg /// Perform input and output in binary mode (as opposed to text mode).
4561debfc3dSmrg /// This is probably not what you think it is; see
4571debfc3dSmrg /// https://gcc.gnu.org/onlinedocs/libstdc++/manual/fstreams.html#std.io.filestreams.binary
4581debfc3dSmrg static const openmode binary = _S_bin;
4591debfc3dSmrg
4601debfc3dSmrg /// Open for input. Default for @c ifstream and fstream.
4611debfc3dSmrg static const openmode in = _S_in;
4621debfc3dSmrg
4631debfc3dSmrg /// Open for output. Default for @c ofstream and fstream.
4641debfc3dSmrg static const openmode out = _S_out;
4651debfc3dSmrg
466a2dc1f3fSmrg /// Truncate an existing stream when opening. Default for @c ofstream.
4671debfc3dSmrg static const openmode trunc = _S_trunc;
4681debfc3dSmrg
4691debfc3dSmrg // 27.4.2.1.5 Type ios_base::seekdir
4701debfc3dSmrg /**
4711debfc3dSmrg * @brief This is an enumerated type.
4721debfc3dSmrg *
4731debfc3dSmrg * @c @a _Ios_Seekdir is implementation-defined. Defined values
4741debfc3dSmrg * of type seekdir are:
4751debfc3dSmrg * - beg
4761debfc3dSmrg * - cur, equivalent to @c SEEK_CUR in the C standard library.
4771debfc3dSmrg * - end, equivalent to @c SEEK_END in the C standard library.
4781debfc3dSmrg */
4791debfc3dSmrg typedef _Ios_Seekdir seekdir;
4801debfc3dSmrg
4811debfc3dSmrg /// Request a seek relative to the beginning of the stream.
4821debfc3dSmrg static const seekdir beg = _S_beg;
4831debfc3dSmrg
4841debfc3dSmrg /// Request a seek relative to the current position within the sequence.
4851debfc3dSmrg static const seekdir cur = _S_cur;
4861debfc3dSmrg
4871debfc3dSmrg /// Request a seek relative to the current end of the sequence.
4881debfc3dSmrg static const seekdir end = _S_end;
4891debfc3dSmrg
490a2dc1f3fSmrg #if __cplusplus <= 201402L
491a2dc1f3fSmrg // Annex D.6 (removed in C++17)
492*8feb0f0bSmrg typedef int io_state
493*8feb0f0bSmrg _GLIBCXX_DEPRECATED_SUGGEST("std::iostate");
494*8feb0f0bSmrg typedef int open_mode
495*8feb0f0bSmrg _GLIBCXX_DEPRECATED_SUGGEST("std::openmode");
496*8feb0f0bSmrg typedef int seek_dir
497*8feb0f0bSmrg _GLIBCXX_DEPRECATED_SUGGEST("std::seekdir");
4981debfc3dSmrg
499*8feb0f0bSmrg typedef std::streampos streampos
500*8feb0f0bSmrg _GLIBCXX_DEPRECATED_SUGGEST("std::streampos");
501*8feb0f0bSmrg typedef std::streamoff streamoff
502*8feb0f0bSmrg _GLIBCXX_DEPRECATED_SUGGEST("std::streamoff");
503a2dc1f3fSmrg #endif
5041debfc3dSmrg
5051debfc3dSmrg // Callbacks;
5061debfc3dSmrg /**
5071debfc3dSmrg * @brief The set of events that may be passed to an event callback.
5081debfc3dSmrg *
5091debfc3dSmrg * erase_event is used during ~ios() and copyfmt(). imbue_event is used
5101debfc3dSmrg * during imbue(). copyfmt_event is used during copyfmt().
5111debfc3dSmrg */
5121debfc3dSmrg enum event
5131debfc3dSmrg {
5141debfc3dSmrg erase_event,
5151debfc3dSmrg imbue_event,
5161debfc3dSmrg copyfmt_event
5171debfc3dSmrg };
5181debfc3dSmrg
5191debfc3dSmrg /**
5201debfc3dSmrg * @brief The type of an event callback function.
5211debfc3dSmrg * @param __e One of the members of the event enum.
5221debfc3dSmrg * @param __b Reference to the ios_base object.
5231debfc3dSmrg * @param __i The integer provided when the callback was registered.
5241debfc3dSmrg *
5251debfc3dSmrg * Event callbacks are user defined functions that get called during
5261debfc3dSmrg * several ios_base and basic_ios functions, specifically imbue(),
5271debfc3dSmrg * copyfmt(), and ~ios().
5281debfc3dSmrg */
5291debfc3dSmrg typedef void (*event_callback) (event __e, ios_base& __b, int __i);
5301debfc3dSmrg
5311debfc3dSmrg /**
5321debfc3dSmrg * @brief Add the callback __fn with parameter __index.
5331debfc3dSmrg * @param __fn The function to add.
5341debfc3dSmrg * @param __index The integer to pass to the function when invoked.
5351debfc3dSmrg *
5361debfc3dSmrg * Registers a function as an event callback with an integer parameter to
5371debfc3dSmrg * be passed to the function when invoked. Multiple copies of the
5381debfc3dSmrg * function are allowed. If there are multiple callbacks, they are
5391debfc3dSmrg * invoked in the order they were registered.
5401debfc3dSmrg */
5411debfc3dSmrg void
5421debfc3dSmrg register_callback(event_callback __fn, int __index);
5431debfc3dSmrg
5441debfc3dSmrg protected:
5451debfc3dSmrg streamsize _M_precision;
5461debfc3dSmrg streamsize _M_width;
5471debfc3dSmrg fmtflags _M_flags;
5481debfc3dSmrg iostate _M_exception;
5491debfc3dSmrg iostate _M_streambuf_state;
5501debfc3dSmrg
5511debfc3dSmrg // 27.4.2.6 Members for callbacks
5521debfc3dSmrg // 27.4.2.6 ios_base callbacks
5531debfc3dSmrg struct _Callback_list
5541debfc3dSmrg {
5551debfc3dSmrg // Data Members
5561debfc3dSmrg _Callback_list* _M_next;
5571debfc3dSmrg ios_base::event_callback _M_fn;
5581debfc3dSmrg int _M_index;
5591debfc3dSmrg _Atomic_word _M_refcount; // 0 means one reference.
5601debfc3dSmrg
5611debfc3dSmrg _Callback_list(ios_base::event_callback __fn, int __index,
5621debfc3dSmrg _Callback_list* __cb)
5631debfc3dSmrg : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
5641debfc3dSmrg
5651debfc3dSmrg void
5661debfc3dSmrg _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
5671debfc3dSmrg
5681debfc3dSmrg // 0 => OK to delete.
5691debfc3dSmrg int
5701debfc3dSmrg _M_remove_reference()
5711debfc3dSmrg {
5721debfc3dSmrg // Be race-detector-friendly. For more info see bits/c++config.
5731debfc3dSmrg _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
5741debfc3dSmrg int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1);
5751debfc3dSmrg if (__res == 0)
5761debfc3dSmrg {
5771debfc3dSmrg _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
5781debfc3dSmrg }
5791debfc3dSmrg return __res;
5801debfc3dSmrg }
5811debfc3dSmrg };
5821debfc3dSmrg
5831debfc3dSmrg _Callback_list* _M_callbacks;
5841debfc3dSmrg
5851debfc3dSmrg void
5861debfc3dSmrg _M_call_callbacks(event __ev) throw();
5871debfc3dSmrg
5881debfc3dSmrg void
5891debfc3dSmrg _M_dispose_callbacks(void) throw();
5901debfc3dSmrg
5911debfc3dSmrg // 27.4.2.5 Members for iword/pword storage
5921debfc3dSmrg struct _Words
5931debfc3dSmrg {
5941debfc3dSmrg void* _M_pword;
5951debfc3dSmrg long _M_iword;
5961debfc3dSmrg _Words() : _M_pword(0), _M_iword(0) { }
5971debfc3dSmrg };
5981debfc3dSmrg
5991debfc3dSmrg // Only for failed iword/pword calls.
6001debfc3dSmrg _Words _M_word_zero;
6011debfc3dSmrg
6021debfc3dSmrg // Guaranteed storage.
6031debfc3dSmrg // The first 5 iword and pword slots are reserved for internal use.
6041debfc3dSmrg enum { _S_local_word_size = 8 };
6051debfc3dSmrg _Words _M_local_word[_S_local_word_size];
6061debfc3dSmrg
6071debfc3dSmrg // Allocated storage.
6081debfc3dSmrg int _M_word_size;
6091debfc3dSmrg _Words* _M_word;
6101debfc3dSmrg
6111debfc3dSmrg _Words&
6121debfc3dSmrg _M_grow_words(int __index, bool __iword);
6131debfc3dSmrg
6141debfc3dSmrg // Members for locale and locale caching.
6151debfc3dSmrg locale _M_ios_locale;
6161debfc3dSmrg
6171debfc3dSmrg void
6181debfc3dSmrg _M_init() throw();
6191debfc3dSmrg
6201debfc3dSmrg public:
6211debfc3dSmrg
6221debfc3dSmrg // 27.4.2.1.6 Class ios_base::Init
6231debfc3dSmrg // Used to initialize standard streams. In theory, g++ could use
6241debfc3dSmrg // -finit-priority to order this stuff correctly without going
6251debfc3dSmrg // through these machinations.
6261debfc3dSmrg class Init
6271debfc3dSmrg {
6281debfc3dSmrg friend class ios_base;
6291debfc3dSmrg public:
6301debfc3dSmrg Init();
6311debfc3dSmrg ~Init();
6321debfc3dSmrg
633c0a68be4Smrg #if __cplusplus >= 201103L
634c0a68be4Smrg Init(const Init&) = default;
635c0a68be4Smrg Init& operator=(const Init&) = default;
636c0a68be4Smrg #endif
637c0a68be4Smrg
6381debfc3dSmrg private:
6391debfc3dSmrg static _Atomic_word _S_refcount;
6401debfc3dSmrg static bool _S_synced_with_stdio;
6411debfc3dSmrg };
6421debfc3dSmrg
6431debfc3dSmrg // [27.4.2.2] fmtflags state functions
6441debfc3dSmrg /**
6451debfc3dSmrg * @brief Access to format flags.
6461debfc3dSmrg * @return The format control flags for both input and output.
6471debfc3dSmrg */
6481debfc3dSmrg fmtflags
6491debfc3dSmrg flags() const
6501debfc3dSmrg { return _M_flags; }
6511debfc3dSmrg
6521debfc3dSmrg /**
6531debfc3dSmrg * @brief Setting new format flags all at once.
6541debfc3dSmrg * @param __fmtfl The new flags to set.
6551debfc3dSmrg * @return The previous format control flags.
6561debfc3dSmrg *
6571debfc3dSmrg * This function overwrites all the format flags with @a __fmtfl.
6581debfc3dSmrg */
6591debfc3dSmrg fmtflags
6601debfc3dSmrg flags(fmtflags __fmtfl)
6611debfc3dSmrg {
6621debfc3dSmrg fmtflags __old = _M_flags;
6631debfc3dSmrg _M_flags = __fmtfl;
6641debfc3dSmrg return __old;
6651debfc3dSmrg }
6661debfc3dSmrg
6671debfc3dSmrg /**
6681debfc3dSmrg * @brief Setting new format flags.
6691debfc3dSmrg * @param __fmtfl Additional flags to set.
6701debfc3dSmrg * @return The previous format control flags.
6711debfc3dSmrg *
6721debfc3dSmrg * This function sets additional flags in format control. Flags that
6731debfc3dSmrg * were previously set remain set.
6741debfc3dSmrg */
6751debfc3dSmrg fmtflags
6761debfc3dSmrg setf(fmtflags __fmtfl)
6771debfc3dSmrg {
6781debfc3dSmrg fmtflags __old = _M_flags;
6791debfc3dSmrg _M_flags |= __fmtfl;
6801debfc3dSmrg return __old;
6811debfc3dSmrg }
6821debfc3dSmrg
6831debfc3dSmrg /**
6841debfc3dSmrg * @brief Setting new format flags.
6851debfc3dSmrg * @param __fmtfl Additional flags to set.
6861debfc3dSmrg * @param __mask The flags mask for @a fmtfl.
6871debfc3dSmrg * @return The previous format control flags.
6881debfc3dSmrg *
6891debfc3dSmrg * This function clears @a mask in the format flags, then sets
6901debfc3dSmrg * @a fmtfl @c & @a mask. An example mask is @c ios_base::adjustfield.
6911debfc3dSmrg */
6921debfc3dSmrg fmtflags
6931debfc3dSmrg setf(fmtflags __fmtfl, fmtflags __mask)
6941debfc3dSmrg {
6951debfc3dSmrg fmtflags __old = _M_flags;
6961debfc3dSmrg _M_flags &= ~__mask;
6971debfc3dSmrg _M_flags |= (__fmtfl & __mask);
6981debfc3dSmrg return __old;
6991debfc3dSmrg }
7001debfc3dSmrg
7011debfc3dSmrg /**
7021debfc3dSmrg * @brief Clearing format flags.
7031debfc3dSmrg * @param __mask The flags to unset.
7041debfc3dSmrg *
7051debfc3dSmrg * This function clears @a __mask in the format flags.
7061debfc3dSmrg */
7071debfc3dSmrg void
7081debfc3dSmrg unsetf(fmtflags __mask)
7091debfc3dSmrg { _M_flags &= ~__mask; }
7101debfc3dSmrg
7111debfc3dSmrg /**
7121debfc3dSmrg * @brief Flags access.
7131debfc3dSmrg * @return The precision to generate on certain output operations.
7141debfc3dSmrg *
7151debfc3dSmrg * Be careful if you try to give a definition of @a precision here; see
7161debfc3dSmrg * DR 189.
7171debfc3dSmrg */
7181debfc3dSmrg streamsize
7191debfc3dSmrg precision() const
7201debfc3dSmrg { return _M_precision; }
7211debfc3dSmrg
7221debfc3dSmrg /**
7231debfc3dSmrg * @brief Changing flags.
7241debfc3dSmrg * @param __prec The new precision value.
7251debfc3dSmrg * @return The previous value of precision().
7261debfc3dSmrg */
7271debfc3dSmrg streamsize
7281debfc3dSmrg precision(streamsize __prec)
7291debfc3dSmrg {
7301debfc3dSmrg streamsize __old = _M_precision;
7311debfc3dSmrg _M_precision = __prec;
7321debfc3dSmrg return __old;
7331debfc3dSmrg }
7341debfc3dSmrg
7351debfc3dSmrg /**
7361debfc3dSmrg * @brief Flags access.
7371debfc3dSmrg * @return The minimum field width to generate on output operations.
7381debfc3dSmrg *
7391debfc3dSmrg * <em>Minimum field width</em> refers to the number of characters.
7401debfc3dSmrg */
7411debfc3dSmrg streamsize
7421debfc3dSmrg width() const
7431debfc3dSmrg { return _M_width; }
7441debfc3dSmrg
7451debfc3dSmrg /**
7461debfc3dSmrg * @brief Changing flags.
7471debfc3dSmrg * @param __wide The new width value.
7481debfc3dSmrg * @return The previous value of width().
7491debfc3dSmrg */
7501debfc3dSmrg streamsize
7511debfc3dSmrg width(streamsize __wide)
7521debfc3dSmrg {
7531debfc3dSmrg streamsize __old = _M_width;
7541debfc3dSmrg _M_width = __wide;
7551debfc3dSmrg return __old;
7561debfc3dSmrg }
7571debfc3dSmrg
7581debfc3dSmrg // [27.4.2.4] ios_base static members
7591debfc3dSmrg /**
7601debfc3dSmrg * @brief Interaction with the standard C I/O objects.
7611debfc3dSmrg * @param __sync Whether to synchronize or not.
7621debfc3dSmrg * @return True if the standard streams were previously synchronized.
7631debfc3dSmrg *
7641debfc3dSmrg * The synchronization referred to is @e only that between the standard
7651debfc3dSmrg * C facilities (e.g., stdout) and the standard C++ objects (e.g.,
7661debfc3dSmrg * cout). User-declared streams are unaffected. See
7671debfc3dSmrg * https://gcc.gnu.org/onlinedocs/libstdc++/manual/fstreams.html#std.io.filestreams.binary
7681debfc3dSmrg */
7691debfc3dSmrg static bool
7701debfc3dSmrg sync_with_stdio(bool __sync = true);
7711debfc3dSmrg
7721debfc3dSmrg // [27.4.2.3] ios_base locale functions
7731debfc3dSmrg /**
7741debfc3dSmrg * @brief Setting a new locale.
7751debfc3dSmrg * @param __loc The new locale.
7761debfc3dSmrg * @return The previous locale.
7771debfc3dSmrg *
7781debfc3dSmrg * Sets the new locale for this stream, and then invokes each callback
7791debfc3dSmrg * with imbue_event.
7801debfc3dSmrg */
7811debfc3dSmrg locale
7821debfc3dSmrg imbue(const locale& __loc) throw();
7831debfc3dSmrg
7841debfc3dSmrg /**
7851debfc3dSmrg * @brief Locale access
7861debfc3dSmrg * @return A copy of the current locale.
7871debfc3dSmrg *
7881debfc3dSmrg * If @c imbue(loc) has previously been called, then this function
7891debfc3dSmrg * returns @c loc. Otherwise, it returns a copy of @c std::locale(),
7901debfc3dSmrg * the global C++ locale.
7911debfc3dSmrg */
7921debfc3dSmrg locale
7931debfc3dSmrg getloc() const
7941debfc3dSmrg { return _M_ios_locale; }
7951debfc3dSmrg
7961debfc3dSmrg /**
7971debfc3dSmrg * @brief Locale access
7981debfc3dSmrg * @return A reference to the current locale.
7991debfc3dSmrg *
8001debfc3dSmrg * Like getloc above, but returns a reference instead of
8011debfc3dSmrg * generating a copy.
8021debfc3dSmrg */
8031debfc3dSmrg const locale&
8041debfc3dSmrg _M_getloc() const
8051debfc3dSmrg { return _M_ios_locale; }
8061debfc3dSmrg
8071debfc3dSmrg // [27.4.2.5] ios_base storage functions
8081debfc3dSmrg /**
8091debfc3dSmrg * @brief Access to unique indices.
8101debfc3dSmrg * @return An integer different from all previous calls.
8111debfc3dSmrg *
8121debfc3dSmrg * This function returns a unique integer every time it is called. It
8131debfc3dSmrg * can be used for any purpose, but is primarily intended to be a unique
8141debfc3dSmrg * index for the iword and pword functions. The expectation is that an
8151debfc3dSmrg * application calls xalloc in order to obtain an index in the iword and
8161debfc3dSmrg * pword arrays that can be used without fear of conflict.
8171debfc3dSmrg *
8181debfc3dSmrg * The implementation maintains a static variable that is incremented and
8191debfc3dSmrg * returned on each invocation. xalloc is guaranteed to return an index
8201debfc3dSmrg * that is safe to use in the iword and pword arrays.
8211debfc3dSmrg */
8221debfc3dSmrg static int
8231debfc3dSmrg xalloc() throw();
8241debfc3dSmrg
8251debfc3dSmrg /**
8261debfc3dSmrg * @brief Access to integer array.
8271debfc3dSmrg * @param __ix Index into the array.
8281debfc3dSmrg * @return A reference to an integer associated with the index.
8291debfc3dSmrg *
8301debfc3dSmrg * The iword function provides access to an array of integers that can be
8311debfc3dSmrg * used for any purpose. The array grows as required to hold the
8321debfc3dSmrg * supplied index. All integers in the array are initialized to 0.
8331debfc3dSmrg *
8341debfc3dSmrg * The implementation reserves several indices. You should use xalloc to
8351debfc3dSmrg * obtain an index that is safe to use. Also note that since the array
8361debfc3dSmrg * can grow dynamically, it is not safe to hold onto the reference.
8371debfc3dSmrg */
8381debfc3dSmrg long&
8391debfc3dSmrg iword(int __ix)
8401debfc3dSmrg {
841c0a68be4Smrg _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size)
8421debfc3dSmrg ? _M_word[__ix] : _M_grow_words(__ix, true);
8431debfc3dSmrg return __word._M_iword;
8441debfc3dSmrg }
8451debfc3dSmrg
8461debfc3dSmrg /**
8471debfc3dSmrg * @brief Access to void pointer array.
8481debfc3dSmrg * @param __ix Index into the array.
8491debfc3dSmrg * @return A reference to a void* associated with the index.
8501debfc3dSmrg *
8511debfc3dSmrg * The pword function provides access to an array of pointers that can be
8521debfc3dSmrg * used for any purpose. The array grows as required to hold the
8531debfc3dSmrg * supplied index. All pointers in the array are initialized to 0.
8541debfc3dSmrg *
8551debfc3dSmrg * The implementation reserves several indices. You should use xalloc to
8561debfc3dSmrg * obtain an index that is safe to use. Also note that since the array
8571debfc3dSmrg * can grow dynamically, it is not safe to hold onto the reference.
8581debfc3dSmrg */
8591debfc3dSmrg void*&
8601debfc3dSmrg pword(int __ix)
8611debfc3dSmrg {
862c0a68be4Smrg _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size)
8631debfc3dSmrg ? _M_word[__ix] : _M_grow_words(__ix, false);
8641debfc3dSmrg return __word._M_pword;
8651debfc3dSmrg }
8661debfc3dSmrg
8671debfc3dSmrg // Destructor
8681debfc3dSmrg /**
8691debfc3dSmrg * Invokes each callback with erase_event. Destroys local storage.
8701debfc3dSmrg *
8711debfc3dSmrg * Note that the ios_base object for the standard streams never gets
8721debfc3dSmrg * destroyed. As a result, any callbacks registered with the standard
8731debfc3dSmrg * streams will not get invoked with erase_event (unless copyfmt is
8741debfc3dSmrg * used).
8751debfc3dSmrg */
8761debfc3dSmrg virtual ~ios_base();
8771debfc3dSmrg
8781debfc3dSmrg protected:
8791debfc3dSmrg ios_base() throw ();
8801debfc3dSmrg
8811debfc3dSmrg #if __cplusplus < 201103L
8821debfc3dSmrg // _GLIBCXX_RESOLVE_LIB_DEFECTS
8831debfc3dSmrg // 50. Copy constructor and assignment operator of ios_base
8841debfc3dSmrg private:
8851debfc3dSmrg ios_base(const ios_base&);
8861debfc3dSmrg
8871debfc3dSmrg ios_base&
8881debfc3dSmrg operator=(const ios_base&);
8891debfc3dSmrg #else
8901debfc3dSmrg public:
8911debfc3dSmrg ios_base(const ios_base&) = delete;
8921debfc3dSmrg
8931debfc3dSmrg ios_base&
8941debfc3dSmrg operator=(const ios_base&) = delete;
8951debfc3dSmrg
8961debfc3dSmrg protected:
8971debfc3dSmrg void
8981debfc3dSmrg _M_move(ios_base&) noexcept;
8991debfc3dSmrg
9001debfc3dSmrg void
9011debfc3dSmrg _M_swap(ios_base& __rhs) noexcept;
9021debfc3dSmrg #endif
9031debfc3dSmrg };
9041debfc3dSmrg
9051debfc3dSmrg // [27.4.5.1] fmtflags manipulators
9061debfc3dSmrg /// Calls base.setf(ios_base::boolalpha).
9071debfc3dSmrg inline ios_base&
9081debfc3dSmrg boolalpha(ios_base& __base)
9091debfc3dSmrg {
9101debfc3dSmrg __base.setf(ios_base::boolalpha);
9111debfc3dSmrg return __base;
9121debfc3dSmrg }
9131debfc3dSmrg
9141debfc3dSmrg /// Calls base.unsetf(ios_base::boolalpha).
9151debfc3dSmrg inline ios_base&
9161debfc3dSmrg noboolalpha(ios_base& __base)
9171debfc3dSmrg {
9181debfc3dSmrg __base.unsetf(ios_base::boolalpha);
9191debfc3dSmrg return __base;
9201debfc3dSmrg }
9211debfc3dSmrg
9221debfc3dSmrg /// Calls base.setf(ios_base::showbase).
9231debfc3dSmrg inline ios_base&
9241debfc3dSmrg showbase(ios_base& __base)
9251debfc3dSmrg {
9261debfc3dSmrg __base.setf(ios_base::showbase);
9271debfc3dSmrg return __base;
9281debfc3dSmrg }
9291debfc3dSmrg
9301debfc3dSmrg /// Calls base.unsetf(ios_base::showbase).
9311debfc3dSmrg inline ios_base&
9321debfc3dSmrg noshowbase(ios_base& __base)
9331debfc3dSmrg {
9341debfc3dSmrg __base.unsetf(ios_base::showbase);
9351debfc3dSmrg return __base;
9361debfc3dSmrg }
9371debfc3dSmrg
9381debfc3dSmrg /// Calls base.setf(ios_base::showpoint).
9391debfc3dSmrg inline ios_base&
9401debfc3dSmrg showpoint(ios_base& __base)
9411debfc3dSmrg {
9421debfc3dSmrg __base.setf(ios_base::showpoint);
9431debfc3dSmrg return __base;
9441debfc3dSmrg }
9451debfc3dSmrg
9461debfc3dSmrg /// Calls base.unsetf(ios_base::showpoint).
9471debfc3dSmrg inline ios_base&
9481debfc3dSmrg noshowpoint(ios_base& __base)
9491debfc3dSmrg {
9501debfc3dSmrg __base.unsetf(ios_base::showpoint);
9511debfc3dSmrg return __base;
9521debfc3dSmrg }
9531debfc3dSmrg
9541debfc3dSmrg /// Calls base.setf(ios_base::showpos).
9551debfc3dSmrg inline ios_base&
9561debfc3dSmrg showpos(ios_base& __base)
9571debfc3dSmrg {
9581debfc3dSmrg __base.setf(ios_base::showpos);
9591debfc3dSmrg return __base;
9601debfc3dSmrg }
9611debfc3dSmrg
9621debfc3dSmrg /// Calls base.unsetf(ios_base::showpos).
9631debfc3dSmrg inline ios_base&
9641debfc3dSmrg noshowpos(ios_base& __base)
9651debfc3dSmrg {
9661debfc3dSmrg __base.unsetf(ios_base::showpos);
9671debfc3dSmrg return __base;
9681debfc3dSmrg }
9691debfc3dSmrg
9701debfc3dSmrg /// Calls base.setf(ios_base::skipws).
9711debfc3dSmrg inline ios_base&
9721debfc3dSmrg skipws(ios_base& __base)
9731debfc3dSmrg {
9741debfc3dSmrg __base.setf(ios_base::skipws);
9751debfc3dSmrg return __base;
9761debfc3dSmrg }
9771debfc3dSmrg
9781debfc3dSmrg /// Calls base.unsetf(ios_base::skipws).
9791debfc3dSmrg inline ios_base&
9801debfc3dSmrg noskipws(ios_base& __base)
9811debfc3dSmrg {
9821debfc3dSmrg __base.unsetf(ios_base::skipws);
9831debfc3dSmrg return __base;
9841debfc3dSmrg }
9851debfc3dSmrg
9861debfc3dSmrg /// Calls base.setf(ios_base::uppercase).
9871debfc3dSmrg inline ios_base&
9881debfc3dSmrg uppercase(ios_base& __base)
9891debfc3dSmrg {
9901debfc3dSmrg __base.setf(ios_base::uppercase);
9911debfc3dSmrg return __base;
9921debfc3dSmrg }
9931debfc3dSmrg
9941debfc3dSmrg /// Calls base.unsetf(ios_base::uppercase).
9951debfc3dSmrg inline ios_base&
9961debfc3dSmrg nouppercase(ios_base& __base)
9971debfc3dSmrg {
9981debfc3dSmrg __base.unsetf(ios_base::uppercase);
9991debfc3dSmrg return __base;
10001debfc3dSmrg }
10011debfc3dSmrg
10021debfc3dSmrg /// Calls base.setf(ios_base::unitbuf).
10031debfc3dSmrg inline ios_base&
10041debfc3dSmrg unitbuf(ios_base& __base)
10051debfc3dSmrg {
10061debfc3dSmrg __base.setf(ios_base::unitbuf);
10071debfc3dSmrg return __base;
10081debfc3dSmrg }
10091debfc3dSmrg
10101debfc3dSmrg /// Calls base.unsetf(ios_base::unitbuf).
10111debfc3dSmrg inline ios_base&
10121debfc3dSmrg nounitbuf(ios_base& __base)
10131debfc3dSmrg {
10141debfc3dSmrg __base.unsetf(ios_base::unitbuf);
10151debfc3dSmrg return __base;
10161debfc3dSmrg }
10171debfc3dSmrg
10181debfc3dSmrg // [27.4.5.2] adjustfield manipulators
10191debfc3dSmrg /// Calls base.setf(ios_base::internal, ios_base::adjustfield).
10201debfc3dSmrg inline ios_base&
10211debfc3dSmrg internal(ios_base& __base)
10221debfc3dSmrg {
10231debfc3dSmrg __base.setf(ios_base::internal, ios_base::adjustfield);
10241debfc3dSmrg return __base;
10251debfc3dSmrg }
10261debfc3dSmrg
10271debfc3dSmrg /// Calls base.setf(ios_base::left, ios_base::adjustfield).
10281debfc3dSmrg inline ios_base&
10291debfc3dSmrg left(ios_base& __base)
10301debfc3dSmrg {
10311debfc3dSmrg __base.setf(ios_base::left, ios_base::adjustfield);
10321debfc3dSmrg return __base;
10331debfc3dSmrg }
10341debfc3dSmrg
10351debfc3dSmrg /// Calls base.setf(ios_base::right, ios_base::adjustfield).
10361debfc3dSmrg inline ios_base&
10371debfc3dSmrg right(ios_base& __base)
10381debfc3dSmrg {
10391debfc3dSmrg __base.setf(ios_base::right, ios_base::adjustfield);
10401debfc3dSmrg return __base;
10411debfc3dSmrg }
10421debfc3dSmrg
10431debfc3dSmrg // [27.4.5.3] basefield manipulators
10441debfc3dSmrg /// Calls base.setf(ios_base::dec, ios_base::basefield).
10451debfc3dSmrg inline ios_base&
10461debfc3dSmrg dec(ios_base& __base)
10471debfc3dSmrg {
10481debfc3dSmrg __base.setf(ios_base::dec, ios_base::basefield);
10491debfc3dSmrg return __base;
10501debfc3dSmrg }
10511debfc3dSmrg
10521debfc3dSmrg /// Calls base.setf(ios_base::hex, ios_base::basefield).
10531debfc3dSmrg inline ios_base&
10541debfc3dSmrg hex(ios_base& __base)
10551debfc3dSmrg {
10561debfc3dSmrg __base.setf(ios_base::hex, ios_base::basefield);
10571debfc3dSmrg return __base;
10581debfc3dSmrg }
10591debfc3dSmrg
10601debfc3dSmrg /// Calls base.setf(ios_base::oct, ios_base::basefield).
10611debfc3dSmrg inline ios_base&
10621debfc3dSmrg oct(ios_base& __base)
10631debfc3dSmrg {
10641debfc3dSmrg __base.setf(ios_base::oct, ios_base::basefield);
10651debfc3dSmrg return __base;
10661debfc3dSmrg }
10671debfc3dSmrg
10681debfc3dSmrg // [27.4.5.4] floatfield manipulators
10691debfc3dSmrg /// Calls base.setf(ios_base::fixed, ios_base::floatfield).
10701debfc3dSmrg inline ios_base&
10711debfc3dSmrg fixed(ios_base& __base)
10721debfc3dSmrg {
10731debfc3dSmrg __base.setf(ios_base::fixed, ios_base::floatfield);
10741debfc3dSmrg return __base;
10751debfc3dSmrg }
10761debfc3dSmrg
10771debfc3dSmrg /// Calls base.setf(ios_base::scientific, ios_base::floatfield).
10781debfc3dSmrg inline ios_base&
10791debfc3dSmrg scientific(ios_base& __base)
10801debfc3dSmrg {
10811debfc3dSmrg __base.setf(ios_base::scientific, ios_base::floatfield);
10821debfc3dSmrg return __base;
10831debfc3dSmrg }
10841debfc3dSmrg
10851debfc3dSmrg #if __cplusplus >= 201103L
10861debfc3dSmrg // New C++11 floatfield manipulators
10871debfc3dSmrg
10881debfc3dSmrg /// Calls
10891debfc3dSmrg /// base.setf(ios_base::fixed|ios_base::scientific, ios_base::floatfield)
10901debfc3dSmrg inline ios_base&
10911debfc3dSmrg hexfloat(ios_base& __base)
10921debfc3dSmrg {
10931debfc3dSmrg __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
10941debfc3dSmrg return __base;
10951debfc3dSmrg }
10961debfc3dSmrg
10971debfc3dSmrg /// Calls @c base.unsetf(ios_base::floatfield)
10981debfc3dSmrg inline ios_base&
10991debfc3dSmrg defaultfloat(ios_base& __base)
11001debfc3dSmrg {
11011debfc3dSmrg __base.unsetf(ios_base::floatfield);
11021debfc3dSmrg return __base;
11031debfc3dSmrg }
11041debfc3dSmrg #endif
11051debfc3dSmrg
11061debfc3dSmrg _GLIBCXX_END_NAMESPACE_VERSION
11071debfc3dSmrg } // namespace
11081debfc3dSmrg
11091debfc3dSmrg #endif /* _IOS_BASE_H */
1110