146035553Spatrick// -*- C++ -*- 246035553Spatrick//===---------------------------- ios -------------------------------------===// 346035553Spatrick// 446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 546035553Spatrick// See https://llvm.org/LICENSE.txt for license information. 646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 746035553Spatrick// 846035553Spatrick//===----------------------------------------------------------------------===// 946035553Spatrick 1046035553Spatrick#ifndef _LIBCPP_IOS 1146035553Spatrick#define _LIBCPP_IOS 1246035553Spatrick 1346035553Spatrick/* 1446035553Spatrick ios synopsis 1546035553Spatrick 1646035553Spatrick#include <iosfwd> 1746035553Spatrick 1846035553Spatricknamespace std 1946035553Spatrick{ 2046035553Spatrick 2146035553Spatricktypedef OFF_T streamoff; 2246035553Spatricktypedef SZ_T streamsize; 2346035553Spatricktemplate <class stateT> class fpos; 2446035553Spatrick 2546035553Spatrickclass ios_base 2646035553Spatrick{ 2746035553Spatrickpublic: 2846035553Spatrick class failure; 2946035553Spatrick 3046035553Spatrick typedef T1 fmtflags; 3146035553Spatrick static constexpr fmtflags boolalpha; 3246035553Spatrick static constexpr fmtflags dec; 3346035553Spatrick static constexpr fmtflags fixed; 3446035553Spatrick static constexpr fmtflags hex; 3546035553Spatrick static constexpr fmtflags internal; 3646035553Spatrick static constexpr fmtflags left; 3746035553Spatrick static constexpr fmtflags oct; 3846035553Spatrick static constexpr fmtflags right; 3946035553Spatrick static constexpr fmtflags scientific; 4046035553Spatrick static constexpr fmtflags showbase; 4146035553Spatrick static constexpr fmtflags showpoint; 4246035553Spatrick static constexpr fmtflags showpos; 4346035553Spatrick static constexpr fmtflags skipws; 4446035553Spatrick static constexpr fmtflags unitbuf; 4546035553Spatrick static constexpr fmtflags uppercase; 4646035553Spatrick static constexpr fmtflags adjustfield; 4746035553Spatrick static constexpr fmtflags basefield; 4846035553Spatrick static constexpr fmtflags floatfield; 4946035553Spatrick 5046035553Spatrick typedef T2 iostate; 5146035553Spatrick static constexpr iostate badbit; 5246035553Spatrick static constexpr iostate eofbit; 5346035553Spatrick static constexpr iostate failbit; 5446035553Spatrick static constexpr iostate goodbit; 5546035553Spatrick 5646035553Spatrick typedef T3 openmode; 5746035553Spatrick static constexpr openmode app; 5846035553Spatrick static constexpr openmode ate; 5946035553Spatrick static constexpr openmode binary; 6046035553Spatrick static constexpr openmode in; 6146035553Spatrick static constexpr openmode out; 6246035553Spatrick static constexpr openmode trunc; 6346035553Spatrick 6446035553Spatrick typedef T4 seekdir; 6546035553Spatrick static constexpr seekdir beg; 6646035553Spatrick static constexpr seekdir cur; 6746035553Spatrick static constexpr seekdir end; 6846035553Spatrick 6946035553Spatrick class Init; 7046035553Spatrick 7146035553Spatrick // 27.5.2.2 fmtflags state: 7246035553Spatrick fmtflags flags() const; 7346035553Spatrick fmtflags flags(fmtflags fmtfl); 7446035553Spatrick fmtflags setf(fmtflags fmtfl); 7546035553Spatrick fmtflags setf(fmtflags fmtfl, fmtflags mask); 7646035553Spatrick void unsetf(fmtflags mask); 7746035553Spatrick 7846035553Spatrick streamsize precision() const; 7946035553Spatrick streamsize precision(streamsize prec); 8046035553Spatrick streamsize width() const; 8146035553Spatrick streamsize width(streamsize wide); 8246035553Spatrick 8346035553Spatrick // 27.5.2.3 locales: 8446035553Spatrick locale imbue(const locale& loc); 8546035553Spatrick locale getloc() const; 8646035553Spatrick 8746035553Spatrick // 27.5.2.5 storage: 8846035553Spatrick static int xalloc(); 8946035553Spatrick long& iword(int index); 9046035553Spatrick void*& pword(int index); 9146035553Spatrick 9246035553Spatrick // destructor 9346035553Spatrick virtual ~ios_base(); 9446035553Spatrick 9546035553Spatrick // 27.5.2.6 callbacks; 9646035553Spatrick enum event { erase_event, imbue_event, copyfmt_event }; 9746035553Spatrick typedef void (*event_callback)(event, ios_base&, int index); 9846035553Spatrick void register_callback(event_callback fn, int index); 9946035553Spatrick 10046035553Spatrick ios_base(const ios_base&) = delete; 10146035553Spatrick ios_base& operator=(const ios_base&) = delete; 10246035553Spatrick 10346035553Spatrick static bool sync_with_stdio(bool sync = true); 10446035553Spatrick 10546035553Spatrickprotected: 10646035553Spatrick ios_base(); 10746035553Spatrick}; 10846035553Spatrick 10946035553Spatricktemplate <class charT, class traits = char_traits<charT> > 11046035553Spatrickclass basic_ios 11146035553Spatrick : public ios_base 11246035553Spatrick{ 11346035553Spatrickpublic: 11446035553Spatrick // types: 11546035553Spatrick typedef charT char_type; 11646035553Spatrick typedef typename traits::int_type int_type; // removed in C++17 11746035553Spatrick typedef typename traits::pos_type pos_type; // removed in C++17 11846035553Spatrick typedef typename traits::off_type off_type; // removed in C++17 11946035553Spatrick typedef traits traits_type; 12046035553Spatrick 12146035553Spatrick operator unspecified-bool-type() const; 12246035553Spatrick bool operator!() const; 12346035553Spatrick iostate rdstate() const; 12446035553Spatrick void clear(iostate state = goodbit); 12546035553Spatrick void setstate(iostate state); 12646035553Spatrick bool good() const; 12746035553Spatrick bool eof() const; 12846035553Spatrick bool fail() const; 12946035553Spatrick bool bad() const; 13046035553Spatrick 13146035553Spatrick iostate exceptions() const; 13246035553Spatrick void exceptions(iostate except); 13346035553Spatrick 13446035553Spatrick // 27.5.4.1 Constructor/destructor: 13546035553Spatrick explicit basic_ios(basic_streambuf<charT,traits>* sb); 13646035553Spatrick virtual ~basic_ios(); 13746035553Spatrick 13846035553Spatrick // 27.5.4.2 Members: 13946035553Spatrick basic_ostream<charT,traits>* tie() const; 14046035553Spatrick basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr); 14146035553Spatrick 14246035553Spatrick basic_streambuf<charT,traits>* rdbuf() const; 14346035553Spatrick basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb); 14446035553Spatrick 14546035553Spatrick basic_ios& copyfmt(const basic_ios& rhs); 14646035553Spatrick 14746035553Spatrick char_type fill() const; 14846035553Spatrick char_type fill(char_type ch); 14946035553Spatrick 15046035553Spatrick locale imbue(const locale& loc); 15146035553Spatrick 15246035553Spatrick char narrow(char_type c, char dfault) const; 15346035553Spatrick char_type widen(char c) const; 15446035553Spatrick 15546035553Spatrick basic_ios(const basic_ios& ) = delete; 15646035553Spatrick basic_ios& operator=(const basic_ios&) = delete; 15746035553Spatrick 15846035553Spatrickprotected: 15946035553Spatrick basic_ios(); 16046035553Spatrick void init(basic_streambuf<charT,traits>* sb); 16146035553Spatrick void move(basic_ios& rhs); 16246035553Spatrick void swap(basic_ios& rhs) noexcept; 16346035553Spatrick void set_rdbuf(basic_streambuf<charT, traits>* sb); 16446035553Spatrick}; 16546035553Spatrick 16646035553Spatrick// 27.5.5, manipulators: 16746035553Spatrickios_base& boolalpha (ios_base& str); 16846035553Spatrickios_base& noboolalpha(ios_base& str); 16946035553Spatrickios_base& showbase (ios_base& str); 17046035553Spatrickios_base& noshowbase (ios_base& str); 17146035553Spatrickios_base& showpoint (ios_base& str); 17246035553Spatrickios_base& noshowpoint(ios_base& str); 17346035553Spatrickios_base& showpos (ios_base& str); 17446035553Spatrickios_base& noshowpos (ios_base& str); 17546035553Spatrickios_base& skipws (ios_base& str); 17646035553Spatrickios_base& noskipws (ios_base& str); 17746035553Spatrickios_base& uppercase (ios_base& str); 17846035553Spatrickios_base& nouppercase(ios_base& str); 17946035553Spatrickios_base& unitbuf (ios_base& str); 18046035553Spatrickios_base& nounitbuf (ios_base& str); 18146035553Spatrick 18246035553Spatrick// 27.5.5.2 adjustfield: 18346035553Spatrickios_base& internal (ios_base& str); 18446035553Spatrickios_base& left (ios_base& str); 18546035553Spatrickios_base& right (ios_base& str); 18646035553Spatrick 18746035553Spatrick// 27.5.5.3 basefield: 18846035553Spatrickios_base& dec (ios_base& str); 18946035553Spatrickios_base& hex (ios_base& str); 19046035553Spatrickios_base& oct (ios_base& str); 19146035553Spatrick 19246035553Spatrick// 27.5.5.4 floatfield: 19346035553Spatrickios_base& fixed (ios_base& str); 19446035553Spatrickios_base& scientific (ios_base& str); 19546035553Spatrickios_base& hexfloat (ios_base& str); 19646035553Spatrickios_base& defaultfloat(ios_base& str); 19746035553Spatrick 19846035553Spatrick// 27.5.5.5 error reporting: 19946035553Spatrickenum class io_errc 20046035553Spatrick{ 20146035553Spatrick stream = 1 20246035553Spatrick}; 20346035553Spatrick 20446035553Spatrickconcept_map ErrorCodeEnum<io_errc> { }; 20546035553Spatrickerror_code make_error_code(io_errc e) noexcept; 20646035553Spatrickerror_condition make_error_condition(io_errc e) noexcept; 20746035553Spatrickstorage-class-specifier const error_category& iostream_category() noexcept; 20846035553Spatrick 20946035553Spatrick} // std 21046035553Spatrick 21146035553Spatrick*/ 21246035553Spatrick 21346035553Spatrick#include <__config> 21446035553Spatrick#include <iosfwd> 21546035553Spatrick#include <__locale> 21646035553Spatrick#include <system_error> 21746035553Spatrick 21846035553Spatrick#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER) 21946035553Spatrick#include <atomic> // for __xindex_ 22046035553Spatrick#endif 22146035553Spatrick 22246035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 22346035553Spatrick#pragma GCC system_header 22446035553Spatrick#endif 22546035553Spatrick 22646035553Spatrick_LIBCPP_BEGIN_NAMESPACE_STD 22746035553Spatrick 22846035553Spatricktypedef ptrdiff_t streamsize; 22946035553Spatrick 23046035553Spatrickclass _LIBCPP_TYPE_VIS ios_base 23146035553Spatrick{ 23246035553Spatrickpublic: 23346035553Spatrick class _LIBCPP_EXCEPTION_ABI failure; 23446035553Spatrick 23546035553Spatrick typedef unsigned int fmtflags; 23646035553Spatrick static const fmtflags boolalpha = 0x0001; 23746035553Spatrick static const fmtflags dec = 0x0002; 23846035553Spatrick static const fmtflags fixed = 0x0004; 23946035553Spatrick static const fmtflags hex = 0x0008; 24046035553Spatrick static const fmtflags internal = 0x0010; 24146035553Spatrick static const fmtflags left = 0x0020; 24246035553Spatrick static const fmtflags oct = 0x0040; 24346035553Spatrick static const fmtflags right = 0x0080; 24446035553Spatrick static const fmtflags scientific = 0x0100; 24546035553Spatrick static const fmtflags showbase = 0x0200; 24646035553Spatrick static const fmtflags showpoint = 0x0400; 24746035553Spatrick static const fmtflags showpos = 0x0800; 24846035553Spatrick static const fmtflags skipws = 0x1000; 24946035553Spatrick static const fmtflags unitbuf = 0x2000; 25046035553Spatrick static const fmtflags uppercase = 0x4000; 25146035553Spatrick static const fmtflags adjustfield = left | right | internal; 25246035553Spatrick static const fmtflags basefield = dec | oct | hex; 25346035553Spatrick static const fmtflags floatfield = scientific | fixed; 25446035553Spatrick 25546035553Spatrick typedef unsigned int iostate; 25646035553Spatrick static const iostate badbit = 0x1; 25746035553Spatrick static const iostate eofbit = 0x2; 25846035553Spatrick static const iostate failbit = 0x4; 25946035553Spatrick static const iostate goodbit = 0x0; 26046035553Spatrick 26146035553Spatrick typedef unsigned int openmode; 26246035553Spatrick static const openmode app = 0x01; 26346035553Spatrick static const openmode ate = 0x02; 26446035553Spatrick static const openmode binary = 0x04; 26546035553Spatrick static const openmode in = 0x08; 26646035553Spatrick static const openmode out = 0x10; 26746035553Spatrick static const openmode trunc = 0x20; 26846035553Spatrick 26946035553Spatrick enum seekdir {beg, cur, end}; 27046035553Spatrick 27146035553Spatrick#if _LIBCPP_STD_VER <= 14 27246035553Spatrick typedef iostate io_state; 27346035553Spatrick typedef openmode open_mode; 27446035553Spatrick typedef seekdir seek_dir; 27546035553Spatrick 27646035553Spatrick typedef _VSTD::streamoff streamoff; 27746035553Spatrick typedef _VSTD::streampos streampos; 27846035553Spatrick#endif 27946035553Spatrick 28046035553Spatrick class _LIBCPP_TYPE_VIS Init; 28146035553Spatrick 28246035553Spatrick // 27.5.2.2 fmtflags state: 28346035553Spatrick _LIBCPP_INLINE_VISIBILITY fmtflags flags() const; 28446035553Spatrick _LIBCPP_INLINE_VISIBILITY fmtflags flags(fmtflags __fmtfl); 28546035553Spatrick _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl); 28646035553Spatrick _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl, fmtflags __mask); 28746035553Spatrick _LIBCPP_INLINE_VISIBILITY void unsetf(fmtflags __mask); 28846035553Spatrick 28946035553Spatrick _LIBCPP_INLINE_VISIBILITY streamsize precision() const; 29046035553Spatrick _LIBCPP_INLINE_VISIBILITY streamsize precision(streamsize __prec); 29146035553Spatrick _LIBCPP_INLINE_VISIBILITY streamsize width() const; 29246035553Spatrick _LIBCPP_INLINE_VISIBILITY streamsize width(streamsize __wide); 29346035553Spatrick 29446035553Spatrick // 27.5.2.3 locales: 29546035553Spatrick locale imbue(const locale& __loc); 29646035553Spatrick locale getloc() const; 29746035553Spatrick 29846035553Spatrick // 27.5.2.5 storage: 29946035553Spatrick static int xalloc(); 30046035553Spatrick long& iword(int __index); 30146035553Spatrick void*& pword(int __index); 30246035553Spatrick 30346035553Spatrick // destructor 30446035553Spatrick virtual ~ios_base(); 30546035553Spatrick 30646035553Spatrick // 27.5.2.6 callbacks; 30746035553Spatrick enum event { erase_event, imbue_event, copyfmt_event }; 30846035553Spatrick typedef void (*event_callback)(event, ios_base&, int __index); 30946035553Spatrick void register_callback(event_callback __fn, int __index); 31046035553Spatrick 31146035553Spatrickprivate: 31246035553Spatrick ios_base(const ios_base&); // = delete; 31346035553Spatrick ios_base& operator=(const ios_base&); // = delete; 31446035553Spatrick 31546035553Spatrickpublic: 31646035553Spatrick static bool sync_with_stdio(bool __sync = true); 31746035553Spatrick 31846035553Spatrick _LIBCPP_INLINE_VISIBILITY iostate rdstate() const; 31946035553Spatrick void clear(iostate __state = goodbit); 32046035553Spatrick _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state); 32146035553Spatrick 32246035553Spatrick _LIBCPP_INLINE_VISIBILITY bool good() const; 32346035553Spatrick _LIBCPP_INLINE_VISIBILITY bool eof() const; 32446035553Spatrick _LIBCPP_INLINE_VISIBILITY bool fail() const; 32546035553Spatrick _LIBCPP_INLINE_VISIBILITY bool bad() const; 32646035553Spatrick 32746035553Spatrick _LIBCPP_INLINE_VISIBILITY iostate exceptions() const; 32846035553Spatrick _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate); 32946035553Spatrick 33046035553Spatrick void __set_badbit_and_consider_rethrow(); 33146035553Spatrick void __set_failbit_and_consider_rethrow(); 33246035553Spatrick 33346035553Spatrick _LIBCPP_INLINE_VISIBILITY 33446035553Spatrick void __setstate_nothrow(iostate __state) 33546035553Spatrick { 33646035553Spatrick if (__rdbuf_) 33746035553Spatrick __rdstate_ |= __state; 33846035553Spatrick else 33946035553Spatrick __rdstate_ |= __state | ios_base::badbit; 34046035553Spatrick } 34146035553Spatrick 34246035553Spatrickprotected: 34346035553Spatrick _LIBCPP_INLINE_VISIBILITY 34446035553Spatrick ios_base() {// purposefully does no initialization 34546035553Spatrick } 34646035553Spatrick 34746035553Spatrick void init(void* __sb); 34846035553Spatrick _LIBCPP_INLINE_VISIBILITY void* rdbuf() const {return __rdbuf_;} 34946035553Spatrick 35046035553Spatrick _LIBCPP_INLINE_VISIBILITY 35146035553Spatrick void rdbuf(void* __sb) 35246035553Spatrick { 35346035553Spatrick __rdbuf_ = __sb; 35446035553Spatrick clear(); 35546035553Spatrick } 35646035553Spatrick 35746035553Spatrick void __call_callbacks(event); 35846035553Spatrick void copyfmt(const ios_base&); 35946035553Spatrick void move(ios_base&); 36046035553Spatrick void swap(ios_base&) _NOEXCEPT; 36146035553Spatrick 36246035553Spatrick _LIBCPP_INLINE_VISIBILITY 36346035553Spatrick void set_rdbuf(void* __sb) 36446035553Spatrick { 36546035553Spatrick __rdbuf_ = __sb; 36646035553Spatrick } 36746035553Spatrick 36846035553Spatrickprivate: 36946035553Spatrick // All data members must be scalars 37046035553Spatrick fmtflags __fmtflags_; 37146035553Spatrick streamsize __precision_; 37246035553Spatrick streamsize __width_; 37346035553Spatrick iostate __rdstate_; 37446035553Spatrick iostate __exceptions_; 37546035553Spatrick void* __rdbuf_; 37646035553Spatrick void* __loc_; 37746035553Spatrick event_callback* __fn_; 37846035553Spatrick int* __index_; 37946035553Spatrick size_t __event_size_; 38046035553Spatrick size_t __event_cap_; 38146035553Spatrick// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only 38246035553Spatrick// enabled with clang. 38346035553Spatrick#if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS) 38446035553Spatrick static atomic<int> __xindex_; 38546035553Spatrick#else 38646035553Spatrick static int __xindex_; 38746035553Spatrick#endif 38846035553Spatrick long* __iarray_; 38946035553Spatrick size_t __iarray_size_; 39046035553Spatrick size_t __iarray_cap_; 39146035553Spatrick void** __parray_; 39246035553Spatrick size_t __parray_size_; 39346035553Spatrick size_t __parray_cap_; 39446035553Spatrick}; 39546035553Spatrick 39646035553Spatrick//enum class io_errc 39746035553Spatrick_LIBCPP_DECLARE_STRONG_ENUM(io_errc) 39846035553Spatrick{ 39946035553Spatrick stream = 1 40046035553Spatrick}; 40146035553Spatrick_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc) 40246035553Spatrick 40346035553Spatricktemplate <> 40446035553Spatrickstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type { }; 40546035553Spatrick 40646035553Spatrick#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 40746035553Spatricktemplate <> 40846035553Spatrickstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type { }; 40946035553Spatrick#endif 41046035553Spatrick 41146035553Spatrick_LIBCPP_FUNC_VIS 41246035553Spatrickconst error_category& iostream_category() _NOEXCEPT; 41346035553Spatrick 41446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 41546035553Spatrickerror_code 41646035553Spatrickmake_error_code(io_errc __e) _NOEXCEPT 41746035553Spatrick{ 41846035553Spatrick return error_code(static_cast<int>(__e), iostream_category()); 41946035553Spatrick} 42046035553Spatrick 42146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 42246035553Spatrickerror_condition 42346035553Spatrickmake_error_condition(io_errc __e) _NOEXCEPT 42446035553Spatrick{ 42546035553Spatrick return error_condition(static_cast<int>(__e), iostream_category()); 42646035553Spatrick} 42746035553Spatrick 42846035553Spatrickclass _LIBCPP_EXCEPTION_ABI ios_base::failure 42946035553Spatrick : public system_error 43046035553Spatrick{ 43146035553Spatrickpublic: 43246035553Spatrick explicit failure(const string& __msg, const error_code& __ec = io_errc::stream); 43346035553Spatrick explicit failure(const char* __msg, const error_code& __ec = io_errc::stream); 434*037e7968Spatrick failure(const failure&) _NOEXCEPT = default; 435*037e7968Spatrick virtual ~failure() _NOEXCEPT; 43646035553Spatrick}; 43746035553Spatrick 43846035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 43946035553Spatrickvoid __throw_failure(char const* __msg) { 44046035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 44146035553Spatrick throw ios_base::failure(__msg); 44246035553Spatrick#else 44346035553Spatrick ((void)__msg); 44446035553Spatrick _VSTD::abort(); 44546035553Spatrick#endif 44646035553Spatrick} 44746035553Spatrick 44846035553Spatrickclass _LIBCPP_TYPE_VIS ios_base::Init 44946035553Spatrick{ 45046035553Spatrickpublic: 45146035553Spatrick Init(); 45246035553Spatrick ~Init(); 45346035553Spatrick}; 45446035553Spatrick 45546035553Spatrick// fmtflags 45646035553Spatrick 45746035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 45846035553Spatrickios_base::fmtflags 45946035553Spatrickios_base::flags() const 46046035553Spatrick{ 46146035553Spatrick return __fmtflags_; 46246035553Spatrick} 46346035553Spatrick 46446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 46546035553Spatrickios_base::fmtflags 46646035553Spatrickios_base::flags(fmtflags __fmtfl) 46746035553Spatrick{ 46846035553Spatrick fmtflags __r = __fmtflags_; 46946035553Spatrick __fmtflags_ = __fmtfl; 47046035553Spatrick return __r; 47146035553Spatrick} 47246035553Spatrick 47346035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 47446035553Spatrickios_base::fmtflags 47546035553Spatrickios_base::setf(fmtflags __fmtfl) 47646035553Spatrick{ 47746035553Spatrick fmtflags __r = __fmtflags_; 47846035553Spatrick __fmtflags_ |= __fmtfl; 47946035553Spatrick return __r; 48046035553Spatrick} 48146035553Spatrick 48246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 48346035553Spatrickvoid 48446035553Spatrickios_base::unsetf(fmtflags __mask) 48546035553Spatrick{ 48646035553Spatrick __fmtflags_ &= ~__mask; 48746035553Spatrick} 48846035553Spatrick 48946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 49046035553Spatrickios_base::fmtflags 49146035553Spatrickios_base::setf(fmtflags __fmtfl, fmtflags __mask) 49246035553Spatrick{ 49346035553Spatrick fmtflags __r = __fmtflags_; 49446035553Spatrick unsetf(__mask); 49546035553Spatrick __fmtflags_ |= __fmtfl & __mask; 49646035553Spatrick return __r; 49746035553Spatrick} 49846035553Spatrick 49946035553Spatrick// precision 50046035553Spatrick 50146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 50246035553Spatrickstreamsize 50346035553Spatrickios_base::precision() const 50446035553Spatrick{ 50546035553Spatrick return __precision_; 50646035553Spatrick} 50746035553Spatrick 50846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 50946035553Spatrickstreamsize 51046035553Spatrickios_base::precision(streamsize __prec) 51146035553Spatrick{ 51246035553Spatrick streamsize __r = __precision_; 51346035553Spatrick __precision_ = __prec; 51446035553Spatrick return __r; 51546035553Spatrick} 51646035553Spatrick 51746035553Spatrick// width 51846035553Spatrick 51946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 52046035553Spatrickstreamsize 52146035553Spatrickios_base::width() const 52246035553Spatrick{ 52346035553Spatrick return __width_; 52446035553Spatrick} 52546035553Spatrick 52646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 52746035553Spatrickstreamsize 52846035553Spatrickios_base::width(streamsize __wide) 52946035553Spatrick{ 53046035553Spatrick streamsize __r = __width_; 53146035553Spatrick __width_ = __wide; 53246035553Spatrick return __r; 53346035553Spatrick} 53446035553Spatrick 53546035553Spatrick// iostate 53646035553Spatrick 53746035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 53846035553Spatrickios_base::iostate 53946035553Spatrickios_base::rdstate() const 54046035553Spatrick{ 54146035553Spatrick return __rdstate_; 54246035553Spatrick} 54346035553Spatrick 54446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 54546035553Spatrickvoid 54646035553Spatrickios_base::setstate(iostate __state) 54746035553Spatrick{ 54846035553Spatrick clear(__rdstate_ | __state); 54946035553Spatrick} 55046035553Spatrick 55146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 55246035553Spatrickbool 55346035553Spatrickios_base::good() const 55446035553Spatrick{ 55546035553Spatrick return __rdstate_ == 0; 55646035553Spatrick} 55746035553Spatrick 55846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 55946035553Spatrickbool 56046035553Spatrickios_base::eof() const 56146035553Spatrick{ 56246035553Spatrick return (__rdstate_ & eofbit) != 0; 56346035553Spatrick} 56446035553Spatrick 56546035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 56646035553Spatrickbool 56746035553Spatrickios_base::fail() const 56846035553Spatrick{ 56946035553Spatrick return (__rdstate_ & (failbit | badbit)) != 0; 57046035553Spatrick} 57146035553Spatrick 57246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 57346035553Spatrickbool 57446035553Spatrickios_base::bad() const 57546035553Spatrick{ 57646035553Spatrick return (__rdstate_ & badbit) != 0; 57746035553Spatrick} 57846035553Spatrick 57946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 58046035553Spatrickios_base::iostate 58146035553Spatrickios_base::exceptions() const 58246035553Spatrick{ 58346035553Spatrick return __exceptions_; 58446035553Spatrick} 58546035553Spatrick 58646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 58746035553Spatrickvoid 58846035553Spatrickios_base::exceptions(iostate __iostate) 58946035553Spatrick{ 59046035553Spatrick __exceptions_ = __iostate; 59146035553Spatrick clear(__rdstate_); 59246035553Spatrick} 59346035553Spatrick 59446035553Spatrick#if defined(_LIBCPP_CXX03_LANG) 59546035553Spatrickstruct _LIBCPP_TYPE_VIS __cxx03_bool { 59646035553Spatrick typedef void (__cxx03_bool::*__bool_type)(); 59746035553Spatrick void __true_value() {} 59846035553Spatrick}; 59946035553Spatrick#endif 60046035553Spatrick 60146035553Spatricktemplate <class _CharT, class _Traits> 60246035553Spatrickclass _LIBCPP_TEMPLATE_VIS basic_ios 60346035553Spatrick : public ios_base 60446035553Spatrick{ 60546035553Spatrickpublic: 60646035553Spatrick // types: 60746035553Spatrick typedef _CharT char_type; 60846035553Spatrick typedef _Traits traits_type; 60946035553Spatrick 61046035553Spatrick typedef typename traits_type::int_type int_type; 61146035553Spatrick typedef typename traits_type::pos_type pos_type; 61246035553Spatrick typedef typename traits_type::off_type off_type; 61346035553Spatrick 61446035553Spatrick static_assert((is_same<_CharT, typename traits_type::char_type>::value), 61546035553Spatrick "traits_type::char_type must be the same type as CharT"); 61646035553Spatrick 61746035553Spatrick // __true_value will generate undefined references when linking unless 61846035553Spatrick // we give it internal linkage. 61946035553Spatrick 62046035553Spatrick#if defined(_LIBCPP_CXX03_LANG) 62146035553Spatrick _LIBCPP_INLINE_VISIBILITY 62246035553Spatrick operator __cxx03_bool::__bool_type() const { 62346035553Spatrick return !fail() ? &__cxx03_bool::__true_value : nullptr; 62446035553Spatrick } 62546035553Spatrick#else 62646035553Spatrick _LIBCPP_INLINE_VISIBILITY 62746035553Spatrick _LIBCPP_EXPLICIT operator bool() const {return !fail();} 62846035553Spatrick#endif 62946035553Spatrick 63046035553Spatrick _LIBCPP_INLINE_VISIBILITY bool operator!() const {return fail();} 63146035553Spatrick _LIBCPP_INLINE_VISIBILITY iostate rdstate() const {return ios_base::rdstate();} 63246035553Spatrick _LIBCPP_INLINE_VISIBILITY void clear(iostate __state = goodbit) {ios_base::clear(__state);} 63346035553Spatrick _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state) {ios_base::setstate(__state);} 63446035553Spatrick _LIBCPP_INLINE_VISIBILITY bool good() const {return ios_base::good();} 63546035553Spatrick _LIBCPP_INLINE_VISIBILITY bool eof() const {return ios_base::eof();} 63646035553Spatrick _LIBCPP_INLINE_VISIBILITY bool fail() const {return ios_base::fail();} 63746035553Spatrick _LIBCPP_INLINE_VISIBILITY bool bad() const {return ios_base::bad();} 63846035553Spatrick 63946035553Spatrick _LIBCPP_INLINE_VISIBILITY iostate exceptions() const {return ios_base::exceptions();} 64046035553Spatrick _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate) {ios_base::exceptions(__iostate);} 64146035553Spatrick 64246035553Spatrick // 27.5.4.1 Constructor/destructor: 64346035553Spatrick _LIBCPP_INLINE_VISIBILITY 64446035553Spatrick explicit basic_ios(basic_streambuf<char_type,traits_type>* __sb); 64546035553Spatrick virtual ~basic_ios(); 64646035553Spatrick 64746035553Spatrick // 27.5.4.2 Members: 64846035553Spatrick _LIBCPP_INLINE_VISIBILITY 64946035553Spatrick basic_ostream<char_type, traits_type>* tie() const; 65046035553Spatrick _LIBCPP_INLINE_VISIBILITY 65146035553Spatrick basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr); 65246035553Spatrick 65346035553Spatrick _LIBCPP_INLINE_VISIBILITY 65446035553Spatrick basic_streambuf<char_type, traits_type>* rdbuf() const; 65546035553Spatrick _LIBCPP_INLINE_VISIBILITY 65646035553Spatrick basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb); 65746035553Spatrick 65846035553Spatrick basic_ios& copyfmt(const basic_ios& __rhs); 65946035553Spatrick 66046035553Spatrick _LIBCPP_INLINE_VISIBILITY 66146035553Spatrick char_type fill() const; 66246035553Spatrick _LIBCPP_INLINE_VISIBILITY 66346035553Spatrick char_type fill(char_type __ch); 66446035553Spatrick 66546035553Spatrick _LIBCPP_INLINE_VISIBILITY 66646035553Spatrick locale imbue(const locale& __loc); 66746035553Spatrick 66846035553Spatrick _LIBCPP_INLINE_VISIBILITY 66946035553Spatrick char narrow(char_type __c, char __dfault) const; 67046035553Spatrick _LIBCPP_INLINE_VISIBILITY 67146035553Spatrick char_type widen(char __c) const; 67246035553Spatrick 67346035553Spatrickprotected: 67446035553Spatrick _LIBCPP_INLINE_VISIBILITY 67546035553Spatrick basic_ios() {// purposefully does no initialization 67646035553Spatrick } 67746035553Spatrick _LIBCPP_INLINE_VISIBILITY 67846035553Spatrick void init(basic_streambuf<char_type, traits_type>* __sb); 67946035553Spatrick 68046035553Spatrick _LIBCPP_INLINE_VISIBILITY 68146035553Spatrick void move(basic_ios& __rhs); 68246035553Spatrick#ifndef _LIBCPP_CXX03_LANG 68346035553Spatrick _LIBCPP_INLINE_VISIBILITY 68446035553Spatrick void move(basic_ios&& __rhs) {move(__rhs);} 68546035553Spatrick#endif 68646035553Spatrick _LIBCPP_INLINE_VISIBILITY 68746035553Spatrick void swap(basic_ios& __rhs) _NOEXCEPT; 68846035553Spatrick _LIBCPP_INLINE_VISIBILITY 68946035553Spatrick void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb); 69046035553Spatrickprivate: 69146035553Spatrick basic_ostream<char_type, traits_type>* __tie_; 69246035553Spatrick mutable int_type __fill_; 69346035553Spatrick}; 69446035553Spatrick 69546035553Spatricktemplate <class _CharT, class _Traits> 69646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 69746035553Spatrickbasic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type,traits_type>* __sb) 69846035553Spatrick{ 69946035553Spatrick init(__sb); 70046035553Spatrick} 70146035553Spatrick 70246035553Spatricktemplate <class _CharT, class _Traits> 70346035553Spatrickbasic_ios<_CharT, _Traits>::~basic_ios() 70446035553Spatrick{ 70546035553Spatrick} 70646035553Spatrick 70746035553Spatricktemplate <class _CharT, class _Traits> 70846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 70946035553Spatrickvoid 71046035553Spatrickbasic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb) 71146035553Spatrick{ 71246035553Spatrick ios_base::init(__sb); 71346035553Spatrick __tie_ = 0; 71446035553Spatrick __fill_ = traits_type::eof(); 71546035553Spatrick} 71646035553Spatrick 71746035553Spatricktemplate <class _CharT, class _Traits> 71846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 71946035553Spatrickbasic_ostream<_CharT, _Traits>* 72046035553Spatrickbasic_ios<_CharT, _Traits>::tie() const 72146035553Spatrick{ 72246035553Spatrick return __tie_; 72346035553Spatrick} 72446035553Spatrick 72546035553Spatricktemplate <class _CharT, class _Traits> 72646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 72746035553Spatrickbasic_ostream<_CharT, _Traits>* 72846035553Spatrickbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr) 72946035553Spatrick{ 73046035553Spatrick basic_ostream<char_type, traits_type>* __r = __tie_; 73146035553Spatrick __tie_ = __tiestr; 73246035553Spatrick return __r; 73346035553Spatrick} 73446035553Spatrick 73546035553Spatricktemplate <class _CharT, class _Traits> 73646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 73746035553Spatrickbasic_streambuf<_CharT, _Traits>* 73846035553Spatrickbasic_ios<_CharT, _Traits>::rdbuf() const 73946035553Spatrick{ 74046035553Spatrick return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf()); 74146035553Spatrick} 74246035553Spatrick 74346035553Spatricktemplate <class _CharT, class _Traits> 74446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 74546035553Spatrickbasic_streambuf<_CharT, _Traits>* 74646035553Spatrickbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb) 74746035553Spatrick{ 74846035553Spatrick basic_streambuf<char_type, traits_type>* __r = rdbuf(); 74946035553Spatrick ios_base::rdbuf(__sb); 75046035553Spatrick return __r; 75146035553Spatrick} 75246035553Spatrick 75346035553Spatricktemplate <class _CharT, class _Traits> 75446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 75546035553Spatricklocale 75646035553Spatrickbasic_ios<_CharT, _Traits>::imbue(const locale& __loc) 75746035553Spatrick{ 75846035553Spatrick locale __r = getloc(); 75946035553Spatrick ios_base::imbue(__loc); 76046035553Spatrick if (rdbuf()) 76146035553Spatrick rdbuf()->pubimbue(__loc); 76246035553Spatrick return __r; 76346035553Spatrick} 76446035553Spatrick 76546035553Spatricktemplate <class _CharT, class _Traits> 76646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 76746035553Spatrickchar 76846035553Spatrickbasic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const 76946035553Spatrick{ 77046035553Spatrick return use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault); 77146035553Spatrick} 77246035553Spatrick 77346035553Spatricktemplate <class _CharT, class _Traits> 77446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 77546035553Spatrick_CharT 77646035553Spatrickbasic_ios<_CharT, _Traits>::widen(char __c) const 77746035553Spatrick{ 77846035553Spatrick return use_facet<ctype<char_type> >(getloc()).widen(__c); 77946035553Spatrick} 78046035553Spatrick 78146035553Spatricktemplate <class _CharT, class _Traits> 78246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 78346035553Spatrick_CharT 78446035553Spatrickbasic_ios<_CharT, _Traits>::fill() const 78546035553Spatrick{ 78646035553Spatrick if (traits_type::eq_int_type(traits_type::eof(), __fill_)) 78746035553Spatrick __fill_ = widen(' '); 78846035553Spatrick return __fill_; 78946035553Spatrick} 79046035553Spatrick 79146035553Spatricktemplate <class _CharT, class _Traits> 79246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 79346035553Spatrick_CharT 79446035553Spatrickbasic_ios<_CharT, _Traits>::fill(char_type __ch) 79546035553Spatrick{ 79646035553Spatrick char_type __r = __fill_; 79746035553Spatrick __fill_ = __ch; 79846035553Spatrick return __r; 79946035553Spatrick} 80046035553Spatrick 80146035553Spatricktemplate <class _CharT, class _Traits> 80246035553Spatrickbasic_ios<_CharT, _Traits>& 80346035553Spatrickbasic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) 80446035553Spatrick{ 80546035553Spatrick if (this != &__rhs) 80646035553Spatrick { 80746035553Spatrick __call_callbacks(erase_event); 80846035553Spatrick ios_base::copyfmt(__rhs); 80946035553Spatrick __tie_ = __rhs.__tie_; 81046035553Spatrick __fill_ = __rhs.__fill_; 81146035553Spatrick __call_callbacks(copyfmt_event); 81246035553Spatrick exceptions(__rhs.exceptions()); 81346035553Spatrick } 81446035553Spatrick return *this; 81546035553Spatrick} 81646035553Spatrick 81746035553Spatricktemplate <class _CharT, class _Traits> 81846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 81946035553Spatrickvoid 82046035553Spatrickbasic_ios<_CharT, _Traits>::move(basic_ios& __rhs) 82146035553Spatrick{ 82246035553Spatrick ios_base::move(__rhs); 82346035553Spatrick __tie_ = __rhs.__tie_; 82446035553Spatrick __rhs.__tie_ = 0; 82546035553Spatrick __fill_ = __rhs.__fill_; 82646035553Spatrick} 82746035553Spatrick 82846035553Spatricktemplate <class _CharT, class _Traits> 82946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 83046035553Spatrickvoid 83146035553Spatrickbasic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT 83246035553Spatrick{ 83346035553Spatrick ios_base::swap(__rhs); 83446035553Spatrick _VSTD::swap(__tie_, __rhs.__tie_); 83546035553Spatrick _VSTD::swap(__fill_, __rhs.__fill_); 83646035553Spatrick} 83746035553Spatrick 83846035553Spatricktemplate <class _CharT, class _Traits> 83946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 84046035553Spatrickvoid 84146035553Spatrickbasic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb) 84246035553Spatrick{ 84346035553Spatrick ios_base::set_rdbuf(__sb); 84446035553Spatrick} 84546035553Spatrick 846*037e7968Spatrickinline 84746035553Spatrickios_base& 84846035553Spatrickboolalpha(ios_base& __str) 84946035553Spatrick{ 85046035553Spatrick __str.setf(ios_base::boolalpha); 85146035553Spatrick return __str; 85246035553Spatrick} 85346035553Spatrick 854*037e7968Spatrickinline 85546035553Spatrickios_base& 85646035553Spatricknoboolalpha(ios_base& __str) 85746035553Spatrick{ 85846035553Spatrick __str.unsetf(ios_base::boolalpha); 85946035553Spatrick return __str; 86046035553Spatrick} 86146035553Spatrick 862*037e7968Spatrickinline 86346035553Spatrickios_base& 86446035553Spatrickshowbase(ios_base& __str) 86546035553Spatrick{ 86646035553Spatrick __str.setf(ios_base::showbase); 86746035553Spatrick return __str; 86846035553Spatrick} 86946035553Spatrick 870*037e7968Spatrickinline 87146035553Spatrickios_base& 87246035553Spatricknoshowbase(ios_base& __str) 87346035553Spatrick{ 87446035553Spatrick __str.unsetf(ios_base::showbase); 87546035553Spatrick return __str; 87646035553Spatrick} 87746035553Spatrick 878*037e7968Spatrickinline 87946035553Spatrickios_base& 88046035553Spatrickshowpoint(ios_base& __str) 88146035553Spatrick{ 88246035553Spatrick __str.setf(ios_base::showpoint); 88346035553Spatrick return __str; 88446035553Spatrick} 88546035553Spatrick 886*037e7968Spatrickinline 88746035553Spatrickios_base& 88846035553Spatricknoshowpoint(ios_base& __str) 88946035553Spatrick{ 89046035553Spatrick __str.unsetf(ios_base::showpoint); 89146035553Spatrick return __str; 89246035553Spatrick} 89346035553Spatrick 894*037e7968Spatrickinline 89546035553Spatrickios_base& 89646035553Spatrickshowpos(ios_base& __str) 89746035553Spatrick{ 89846035553Spatrick __str.setf(ios_base::showpos); 89946035553Spatrick return __str; 90046035553Spatrick} 90146035553Spatrick 902*037e7968Spatrickinline 90346035553Spatrickios_base& 90446035553Spatricknoshowpos(ios_base& __str) 90546035553Spatrick{ 90646035553Spatrick __str.unsetf(ios_base::showpos); 90746035553Spatrick return __str; 90846035553Spatrick} 90946035553Spatrick 910*037e7968Spatrickinline 91146035553Spatrickios_base& 91246035553Spatrickskipws(ios_base& __str) 91346035553Spatrick{ 91446035553Spatrick __str.setf(ios_base::skipws); 91546035553Spatrick return __str; 91646035553Spatrick} 91746035553Spatrick 918*037e7968Spatrickinline 91946035553Spatrickios_base& 92046035553Spatricknoskipws(ios_base& __str) 92146035553Spatrick{ 92246035553Spatrick __str.unsetf(ios_base::skipws); 92346035553Spatrick return __str; 92446035553Spatrick} 92546035553Spatrick 926*037e7968Spatrickinline 92746035553Spatrickios_base& 92846035553Spatrickuppercase(ios_base& __str) 92946035553Spatrick{ 93046035553Spatrick __str.setf(ios_base::uppercase); 93146035553Spatrick return __str; 93246035553Spatrick} 93346035553Spatrick 934*037e7968Spatrickinline 93546035553Spatrickios_base& 93646035553Spatricknouppercase(ios_base& __str) 93746035553Spatrick{ 93846035553Spatrick __str.unsetf(ios_base::uppercase); 93946035553Spatrick return __str; 94046035553Spatrick} 94146035553Spatrick 942*037e7968Spatrickinline 94346035553Spatrickios_base& 94446035553Spatrickunitbuf(ios_base& __str) 94546035553Spatrick{ 94646035553Spatrick __str.setf(ios_base::unitbuf); 94746035553Spatrick return __str; 94846035553Spatrick} 94946035553Spatrick 950*037e7968Spatrickinline 95146035553Spatrickios_base& 95246035553Spatricknounitbuf(ios_base& __str) 95346035553Spatrick{ 95446035553Spatrick __str.unsetf(ios_base::unitbuf); 95546035553Spatrick return __str; 95646035553Spatrick} 95746035553Spatrick 958*037e7968Spatrickinline 95946035553Spatrickios_base& 96046035553Spatrickinternal(ios_base& __str) 96146035553Spatrick{ 96246035553Spatrick __str.setf(ios_base::internal, ios_base::adjustfield); 96346035553Spatrick return __str; 96446035553Spatrick} 96546035553Spatrick 966*037e7968Spatrickinline 96746035553Spatrickios_base& 96846035553Spatrickleft(ios_base& __str) 96946035553Spatrick{ 97046035553Spatrick __str.setf(ios_base::left, ios_base::adjustfield); 97146035553Spatrick return __str; 97246035553Spatrick} 97346035553Spatrick 974*037e7968Spatrickinline 97546035553Spatrickios_base& 97646035553Spatrickright(ios_base& __str) 97746035553Spatrick{ 97846035553Spatrick __str.setf(ios_base::right, ios_base::adjustfield); 97946035553Spatrick return __str; 98046035553Spatrick} 98146035553Spatrick 982*037e7968Spatrickinline 98346035553Spatrickios_base& 98446035553Spatrickdec(ios_base& __str) 98546035553Spatrick{ 98646035553Spatrick __str.setf(ios_base::dec, ios_base::basefield); 98746035553Spatrick return __str; 98846035553Spatrick} 98946035553Spatrick 990*037e7968Spatrickinline 99146035553Spatrickios_base& 99246035553Spatrickhex(ios_base& __str) 99346035553Spatrick{ 99446035553Spatrick __str.setf(ios_base::hex, ios_base::basefield); 99546035553Spatrick return __str; 99646035553Spatrick} 99746035553Spatrick 998*037e7968Spatrickinline 99946035553Spatrickios_base& 100046035553Spatrickoct(ios_base& __str) 100146035553Spatrick{ 100246035553Spatrick __str.setf(ios_base::oct, ios_base::basefield); 100346035553Spatrick return __str; 100446035553Spatrick} 100546035553Spatrick 1006*037e7968Spatrickinline 100746035553Spatrickios_base& 100846035553Spatrickfixed(ios_base& __str) 100946035553Spatrick{ 101046035553Spatrick __str.setf(ios_base::fixed, ios_base::floatfield); 101146035553Spatrick return __str; 101246035553Spatrick} 101346035553Spatrick 1014*037e7968Spatrickinline 101546035553Spatrickios_base& 101646035553Spatrickscientific(ios_base& __str) 101746035553Spatrick{ 101846035553Spatrick __str.setf(ios_base::scientific, ios_base::floatfield); 101946035553Spatrick return __str; 102046035553Spatrick} 102146035553Spatrick 1022*037e7968Spatrickinline 102346035553Spatrickios_base& 102446035553Spatrickhexfloat(ios_base& __str) 102546035553Spatrick{ 102646035553Spatrick __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); 102746035553Spatrick return __str; 102846035553Spatrick} 102946035553Spatrick 1030*037e7968Spatrickinline 103146035553Spatrickios_base& 103246035553Spatrickdefaultfloat(ios_base& __str) 103346035553Spatrick{ 103446035553Spatrick __str.unsetf(ios_base::floatfield); 103546035553Spatrick return __str; 103646035553Spatrick} 103746035553Spatrick 103846035553Spatricktemplate <class _CharT, class _Traits> 103946035553Spatrickclass __save_flags 104046035553Spatrick{ 104146035553Spatrick typedef basic_ios<_CharT, _Traits> __stream_type; 104246035553Spatrick typedef typename __stream_type::fmtflags fmtflags; 104346035553Spatrick 104446035553Spatrick __stream_type& __stream_; 104546035553Spatrick fmtflags __fmtflags_; 104646035553Spatrick _CharT __fill_; 104746035553Spatrick 104846035553Spatrick __save_flags(const __save_flags&); 104946035553Spatrick __save_flags& operator=(const __save_flags&); 105046035553Spatrickpublic: 105146035553Spatrick _LIBCPP_INLINE_VISIBILITY 105246035553Spatrick explicit __save_flags(__stream_type& __stream) 105346035553Spatrick : __stream_(__stream), 105446035553Spatrick __fmtflags_(__stream.flags()), 105546035553Spatrick __fill_(__stream.fill()) 105646035553Spatrick {} 105746035553Spatrick _LIBCPP_INLINE_VISIBILITY 105846035553Spatrick ~__save_flags() 105946035553Spatrick { 106046035553Spatrick __stream_.flags(__fmtflags_); 106146035553Spatrick __stream_.fill(__fill_); 106246035553Spatrick } 106346035553Spatrick}; 106446035553Spatrick 106546035553Spatrick_LIBCPP_END_NAMESPACE_STD 106646035553Spatrick 106746035553Spatrick#endif // _LIBCPP_IOS 1068