1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_IOS 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_IOS 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser ios synopsis 15e78f53d1SNikolas Klauser 1673fbae83SNikolas Klauser#include <__cxx03/iosfwd> 17e78f53d1SNikolas Klauser 18e78f53d1SNikolas Klausernamespace std 19e78f53d1SNikolas Klauser{ 20e78f53d1SNikolas Klauser 21e78f53d1SNikolas Klausertypedef OFF_T streamoff; 22e78f53d1SNikolas Klausertypedef SZ_T streamsize; 23e78f53d1SNikolas Klausertemplate <class stateT> class fpos; 24e78f53d1SNikolas Klauser 25e78f53d1SNikolas Klauserclass ios_base 26e78f53d1SNikolas Klauser{ 27e78f53d1SNikolas Klauserpublic: 28e78f53d1SNikolas Klauser class failure; 29e78f53d1SNikolas Klauser 30e78f53d1SNikolas Klauser typedef T1 fmtflags; 31e78f53d1SNikolas Klauser static constexpr fmtflags boolalpha; 32e78f53d1SNikolas Klauser static constexpr fmtflags dec; 33e78f53d1SNikolas Klauser static constexpr fmtflags fixed; 34e78f53d1SNikolas Klauser static constexpr fmtflags hex; 35e78f53d1SNikolas Klauser static constexpr fmtflags internal; 36e78f53d1SNikolas Klauser static constexpr fmtflags left; 37e78f53d1SNikolas Klauser static constexpr fmtflags oct; 38e78f53d1SNikolas Klauser static constexpr fmtflags right; 39e78f53d1SNikolas Klauser static constexpr fmtflags scientific; 40e78f53d1SNikolas Klauser static constexpr fmtflags showbase; 41e78f53d1SNikolas Klauser static constexpr fmtflags showpoint; 42e78f53d1SNikolas Klauser static constexpr fmtflags showpos; 43e78f53d1SNikolas Klauser static constexpr fmtflags skipws; 44e78f53d1SNikolas Klauser static constexpr fmtflags unitbuf; 45e78f53d1SNikolas Klauser static constexpr fmtflags uppercase; 46e78f53d1SNikolas Klauser static constexpr fmtflags adjustfield; 47e78f53d1SNikolas Klauser static constexpr fmtflags basefield; 48e78f53d1SNikolas Klauser static constexpr fmtflags floatfield; 49e78f53d1SNikolas Klauser 50e78f53d1SNikolas Klauser typedef T2 iostate; 51e78f53d1SNikolas Klauser static constexpr iostate badbit; 52e78f53d1SNikolas Klauser static constexpr iostate eofbit; 53e78f53d1SNikolas Klauser static constexpr iostate failbit; 54e78f53d1SNikolas Klauser static constexpr iostate goodbit; 55e78f53d1SNikolas Klauser 56e78f53d1SNikolas Klauser typedef T3 openmode; 57e78f53d1SNikolas Klauser static constexpr openmode app; 58e78f53d1SNikolas Klauser static constexpr openmode ate; 59e78f53d1SNikolas Klauser static constexpr openmode binary; 60e78f53d1SNikolas Klauser static constexpr openmode in; 61e78f53d1SNikolas Klauser static constexpr openmode noreplace; // since C++23 62e78f53d1SNikolas Klauser static constexpr openmode out; 63e78f53d1SNikolas Klauser static constexpr openmode trunc; 64e78f53d1SNikolas Klauser 65e78f53d1SNikolas Klauser typedef T4 seekdir; 66e78f53d1SNikolas Klauser static constexpr seekdir beg; 67e78f53d1SNikolas Klauser static constexpr seekdir cur; 68e78f53d1SNikolas Klauser static constexpr seekdir end; 69e78f53d1SNikolas Klauser 70e78f53d1SNikolas Klauser class Init; 71e78f53d1SNikolas Klauser 72e78f53d1SNikolas Klauser // 27.5.2.2 fmtflags state: 73e78f53d1SNikolas Klauser fmtflags flags() const; 74e78f53d1SNikolas Klauser fmtflags flags(fmtflags fmtfl); 75e78f53d1SNikolas Klauser fmtflags setf(fmtflags fmtfl); 76e78f53d1SNikolas Klauser fmtflags setf(fmtflags fmtfl, fmtflags mask); 77e78f53d1SNikolas Klauser void unsetf(fmtflags mask); 78e78f53d1SNikolas Klauser 79e78f53d1SNikolas Klauser streamsize precision() const; 80e78f53d1SNikolas Klauser streamsize precision(streamsize prec); 81e78f53d1SNikolas Klauser streamsize width() const; 82e78f53d1SNikolas Klauser streamsize width(streamsize wide); 83e78f53d1SNikolas Klauser 84e78f53d1SNikolas Klauser // 27.5.2.3 locales: 85e78f53d1SNikolas Klauser locale imbue(const locale& loc); 86e78f53d1SNikolas Klauser locale getloc() const; 87e78f53d1SNikolas Klauser 88e78f53d1SNikolas Klauser // 27.5.2.5 storage: 89e78f53d1SNikolas Klauser static int xalloc(); 90e78f53d1SNikolas Klauser long& iword(int index); 91e78f53d1SNikolas Klauser void*& pword(int index); 92e78f53d1SNikolas Klauser 93e78f53d1SNikolas Klauser // destructor 94e78f53d1SNikolas Klauser virtual ~ios_base(); 95e78f53d1SNikolas Klauser 96e78f53d1SNikolas Klauser // 27.5.2.6 callbacks; 97e78f53d1SNikolas Klauser enum event { erase_event, imbue_event, copyfmt_event }; 98e78f53d1SNikolas Klauser typedef void (*event_callback)(event, ios_base&, int index); 99e78f53d1SNikolas Klauser void register_callback(event_callback fn, int index); 100e78f53d1SNikolas Klauser 101e78f53d1SNikolas Klauser ios_base(const ios_base&) = delete; 102e78f53d1SNikolas Klauser ios_base& operator=(const ios_base&) = delete; 103e78f53d1SNikolas Klauser 104e78f53d1SNikolas Klauser static bool sync_with_stdio(bool sync = true); 105e78f53d1SNikolas Klauser 106e78f53d1SNikolas Klauserprotected: 107e78f53d1SNikolas Klauser ios_base(); 108e78f53d1SNikolas Klauser}; 109e78f53d1SNikolas Klauser 110e78f53d1SNikolas Klausertemplate <class charT, class traits = char_traits<charT> > 111e78f53d1SNikolas Klauserclass basic_ios 112e78f53d1SNikolas Klauser : public ios_base 113e78f53d1SNikolas Klauser{ 114e78f53d1SNikolas Klauserpublic: 115e78f53d1SNikolas Klauser // types: 116e78f53d1SNikolas Klauser typedef charT char_type; 117e78f53d1SNikolas Klauser typedef typename traits::int_type int_type; // removed in C++17 118e78f53d1SNikolas Klauser typedef typename traits::pos_type pos_type; // removed in C++17 119e78f53d1SNikolas Klauser typedef typename traits::off_type off_type; // removed in C++17 120e78f53d1SNikolas Klauser typedef traits traits_type; 121e78f53d1SNikolas Klauser 122e78f53d1SNikolas Klauser operator unspecified-bool-type() const; 123e78f53d1SNikolas Klauser bool operator!() const; 124e78f53d1SNikolas Klauser iostate rdstate() const; 125e78f53d1SNikolas Klauser void clear(iostate state = goodbit); 126e78f53d1SNikolas Klauser void setstate(iostate state); 127e78f53d1SNikolas Klauser bool good() const; 128e78f53d1SNikolas Klauser bool eof() const; 129e78f53d1SNikolas Klauser bool fail() const; 130e78f53d1SNikolas Klauser bool bad() const; 131e78f53d1SNikolas Klauser 132e78f53d1SNikolas Klauser iostate exceptions() const; 133e78f53d1SNikolas Klauser void exceptions(iostate except); 134e78f53d1SNikolas Klauser 135e78f53d1SNikolas Klauser // 27.5.4.1 Constructor/destructor: 136e78f53d1SNikolas Klauser explicit basic_ios(basic_streambuf<charT,traits>* sb); 137e78f53d1SNikolas Klauser virtual ~basic_ios(); 138e78f53d1SNikolas Klauser 139e78f53d1SNikolas Klauser // 27.5.4.2 Members: 140e78f53d1SNikolas Klauser basic_ostream<charT,traits>* tie() const; 141e78f53d1SNikolas Klauser basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr); 142e78f53d1SNikolas Klauser 143e78f53d1SNikolas Klauser basic_streambuf<charT,traits>* rdbuf() const; 144e78f53d1SNikolas Klauser basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb); 145e78f53d1SNikolas Klauser 146e78f53d1SNikolas Klauser basic_ios& copyfmt(const basic_ios& rhs); 147e78f53d1SNikolas Klauser 148e78f53d1SNikolas Klauser char_type fill() const; 149e78f53d1SNikolas Klauser char_type fill(char_type ch); 150e78f53d1SNikolas Klauser 151e78f53d1SNikolas Klauser locale imbue(const locale& loc); 152e78f53d1SNikolas Klauser 153e78f53d1SNikolas Klauser char narrow(char_type c, char dfault) const; 154e78f53d1SNikolas Klauser char_type widen(char c) const; 155e78f53d1SNikolas Klauser 156e78f53d1SNikolas Klauser basic_ios(const basic_ios& ) = delete; 157e78f53d1SNikolas Klauser basic_ios& operator=(const basic_ios&) = delete; 158e78f53d1SNikolas Klauser 159e78f53d1SNikolas Klauserprotected: 160e78f53d1SNikolas Klauser basic_ios(); 161e78f53d1SNikolas Klauser void init(basic_streambuf<charT,traits>* sb); 162e78f53d1SNikolas Klauser void move(basic_ios& rhs); 163e78f53d1SNikolas Klauser void swap(basic_ios& rhs) noexcept; 164e78f53d1SNikolas Klauser void set_rdbuf(basic_streambuf<charT, traits>* sb); 165e78f53d1SNikolas Klauser}; 166e78f53d1SNikolas Klauser 167e78f53d1SNikolas Klauser// 27.5.5, manipulators: 168e78f53d1SNikolas Klauserios_base& boolalpha (ios_base& str); 169e78f53d1SNikolas Klauserios_base& noboolalpha(ios_base& str); 170e78f53d1SNikolas Klauserios_base& showbase (ios_base& str); 171e78f53d1SNikolas Klauserios_base& noshowbase (ios_base& str); 172e78f53d1SNikolas Klauserios_base& showpoint (ios_base& str); 173e78f53d1SNikolas Klauserios_base& noshowpoint(ios_base& str); 174e78f53d1SNikolas Klauserios_base& showpos (ios_base& str); 175e78f53d1SNikolas Klauserios_base& noshowpos (ios_base& str); 176e78f53d1SNikolas Klauserios_base& skipws (ios_base& str); 177e78f53d1SNikolas Klauserios_base& noskipws (ios_base& str); 178e78f53d1SNikolas Klauserios_base& uppercase (ios_base& str); 179e78f53d1SNikolas Klauserios_base& nouppercase(ios_base& str); 180e78f53d1SNikolas Klauserios_base& unitbuf (ios_base& str); 181e78f53d1SNikolas Klauserios_base& nounitbuf (ios_base& str); 182e78f53d1SNikolas Klauser 183e78f53d1SNikolas Klauser// 27.5.5.2 adjustfield: 184e78f53d1SNikolas Klauserios_base& internal (ios_base& str); 185e78f53d1SNikolas Klauserios_base& left (ios_base& str); 186e78f53d1SNikolas Klauserios_base& right (ios_base& str); 187e78f53d1SNikolas Klauser 188e78f53d1SNikolas Klauser// 27.5.5.3 basefield: 189e78f53d1SNikolas Klauserios_base& dec (ios_base& str); 190e78f53d1SNikolas Klauserios_base& hex (ios_base& str); 191e78f53d1SNikolas Klauserios_base& oct (ios_base& str); 192e78f53d1SNikolas Klauser 193e78f53d1SNikolas Klauser// 27.5.5.4 floatfield: 194e78f53d1SNikolas Klauserios_base& fixed (ios_base& str); 195e78f53d1SNikolas Klauserios_base& scientific (ios_base& str); 196e78f53d1SNikolas Klauserios_base& hexfloat (ios_base& str); 197e78f53d1SNikolas Klauserios_base& defaultfloat(ios_base& str); 198e78f53d1SNikolas Klauser 199e78f53d1SNikolas Klauser// 27.5.5.5 error reporting: 200e78f53d1SNikolas Klauserenum class io_errc 201e78f53d1SNikolas Klauser{ 202e78f53d1SNikolas Klauser stream = 1 203e78f53d1SNikolas Klauser}; 204e78f53d1SNikolas Klauser 205e78f53d1SNikolas Klauserconcept_map ErrorCodeEnum<io_errc> { }; 206e78f53d1SNikolas Klausererror_code make_error_code(io_errc e) noexcept; 207e78f53d1SNikolas Klausererror_condition make_error_condition(io_errc e) noexcept; 208e78f53d1SNikolas Klauserstorage-class-specifier const error_category& iostream_category() noexcept; 209e78f53d1SNikolas Klauser 210e78f53d1SNikolas Klauser} // std 211e78f53d1SNikolas Klauser 212e78f53d1SNikolas Klauser*/ 213e78f53d1SNikolas Klauser 21473fbae83SNikolas Klauser#include <__cxx03/__config> 215e78f53d1SNikolas Klauser 216e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 217e78f53d1SNikolas Klauser 21873fbae83SNikolas Klauser# include <__cxx03/__fwd/ios.h> 21973fbae83SNikolas Klauser# include <__cxx03/__ios/fpos.h> 22073fbae83SNikolas Klauser# include <__cxx03/__locale> 22173fbae83SNikolas Klauser# include <__cxx03/__system_error/error_category.h> 22273fbae83SNikolas Klauser# include <__cxx03/__system_error/error_code.h> 22373fbae83SNikolas Klauser# include <__cxx03/__system_error/error_condition.h> 22473fbae83SNikolas Klauser# include <__cxx03/__system_error/system_error.h> 22573fbae83SNikolas Klauser# include <__cxx03/__utility/swap.h> 22673fbae83SNikolas Klauser# include <__cxx03/__verbose_abort> 22773fbae83SNikolas Klauser# include <__cxx03/version> 228e78f53d1SNikolas Klauser 229e78f53d1SNikolas Klauser// standard-mandated includes 230e78f53d1SNikolas Klauser 231e78f53d1SNikolas Klauser// [ios.syn] 23273fbae83SNikolas Klauser# include <__cxx03/iosfwd> 233e78f53d1SNikolas Klauser 234e78f53d1SNikolas Klauser# if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER) 23573fbae83SNikolas Klauser# include <__cxx03/__atomic/atomic.h> // for __xindex_ 236e78f53d1SNikolas Klauser# endif 237e78f53d1SNikolas Klauser 238e78f53d1SNikolas Klauser# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 239e78f53d1SNikolas Klauser# pragma GCC system_header 240e78f53d1SNikolas Klauser# endif 241e78f53d1SNikolas Klauser 242e78f53d1SNikolas Klauser_LIBCPP_PUSH_MACROS 24373fbae83SNikolas Klauser# include <__cxx03/__undef_macros> 244e78f53d1SNikolas Klauser 245e78f53d1SNikolas Klauser_LIBCPP_BEGIN_NAMESPACE_STD 246e78f53d1SNikolas Klauser 247e78f53d1SNikolas Klausertypedef ptrdiff_t streamsize; 248e78f53d1SNikolas Klauser 249e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI ios_base { 250e78f53d1SNikolas Klauserpublic: 251e78f53d1SNikolas Klauser class _LIBCPP_EXPORTED_FROM_ABI failure; 252e78f53d1SNikolas Klauser 253e78f53d1SNikolas Klauser typedef unsigned int fmtflags; 254e78f53d1SNikolas Klauser static const fmtflags boolalpha = 0x0001; 255e78f53d1SNikolas Klauser static const fmtflags dec = 0x0002; 256e78f53d1SNikolas Klauser static const fmtflags fixed = 0x0004; 257e78f53d1SNikolas Klauser static const fmtflags hex = 0x0008; 258e78f53d1SNikolas Klauser static const fmtflags internal = 0x0010; 259e78f53d1SNikolas Klauser static const fmtflags left = 0x0020; 260e78f53d1SNikolas Klauser static const fmtflags oct = 0x0040; 261e78f53d1SNikolas Klauser static const fmtflags right = 0x0080; 262e78f53d1SNikolas Klauser static const fmtflags scientific = 0x0100; 263e78f53d1SNikolas Klauser static const fmtflags showbase = 0x0200; 264e78f53d1SNikolas Klauser static const fmtflags showpoint = 0x0400; 265e78f53d1SNikolas Klauser static const fmtflags showpos = 0x0800; 266e78f53d1SNikolas Klauser static const fmtflags skipws = 0x1000; 267e78f53d1SNikolas Klauser static const fmtflags unitbuf = 0x2000; 268e78f53d1SNikolas Klauser static const fmtflags uppercase = 0x4000; 269e78f53d1SNikolas Klauser static const fmtflags adjustfield = left | right | internal; 270e78f53d1SNikolas Klauser static const fmtflags basefield = dec | oct | hex; 271e78f53d1SNikolas Klauser static const fmtflags floatfield = scientific | fixed; 272e78f53d1SNikolas Klauser 273e78f53d1SNikolas Klauser typedef unsigned int iostate; 274e78f53d1SNikolas Klauser static const iostate badbit = 0x1; 275e78f53d1SNikolas Klauser static const iostate eofbit = 0x2; 276e78f53d1SNikolas Klauser static const iostate failbit = 0x4; 277e78f53d1SNikolas Klauser static const iostate goodbit = 0x0; 278e78f53d1SNikolas Klauser 279e78f53d1SNikolas Klauser typedef unsigned int openmode; 280e78f53d1SNikolas Klauser static const openmode app = 0x01; 281e78f53d1SNikolas Klauser static const openmode ate = 0x02; 282e78f53d1SNikolas Klauser static const openmode binary = 0x04; 283e78f53d1SNikolas Klauser static const openmode in = 0x08; 284e78f53d1SNikolas Klauser static const openmode out = 0x10; 285e78f53d1SNikolas Klauser static const openmode trunc = 0x20; 286e78f53d1SNikolas Klauser# if _LIBCPP_STD_VER >= 23 287e78f53d1SNikolas Klauser static const openmode noreplace = 0x40; 288e78f53d1SNikolas Klauser# endif 289e78f53d1SNikolas Klauser 290e78f53d1SNikolas Klauser enum seekdir { beg, cur, end }; 291e78f53d1SNikolas Klauser 292e78f53d1SNikolas Klauser# if _LIBCPP_STD_VER <= 14 293e78f53d1SNikolas Klauser typedef iostate io_state; 294e78f53d1SNikolas Klauser typedef openmode open_mode; 295e78f53d1SNikolas Klauser typedef seekdir seek_dir; 296e78f53d1SNikolas Klauser 297e78f53d1SNikolas Klauser typedef std::streamoff streamoff; 298e78f53d1SNikolas Klauser typedef std::streampos streampos; 299e78f53d1SNikolas Klauser# endif 300e78f53d1SNikolas Klauser 301e78f53d1SNikolas Klauser class _LIBCPP_EXPORTED_FROM_ABI Init; 302e78f53d1SNikolas Klauser 303e78f53d1SNikolas Klauser // 27.5.2.2 fmtflags state: 304e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI fmtflags flags() const; 305e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI fmtflags flags(fmtflags __fmtfl); 306e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI fmtflags setf(fmtflags __fmtfl); 307e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI fmtflags setf(fmtflags __fmtfl, fmtflags __mask); 308e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void unsetf(fmtflags __mask); 309e78f53d1SNikolas Klauser 310e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI streamsize precision() const; 311e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI streamsize precision(streamsize __prec); 312e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI streamsize width() const; 313e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI streamsize width(streamsize __wide); 314e78f53d1SNikolas Klauser 315e78f53d1SNikolas Klauser // 27.5.2.3 locales: 316e78f53d1SNikolas Klauser locale imbue(const locale& __loc); 317e78f53d1SNikolas Klauser locale getloc() const; 318e78f53d1SNikolas Klauser 319e78f53d1SNikolas Klauser // 27.5.2.5 storage: 320e78f53d1SNikolas Klauser static int xalloc(); 321e78f53d1SNikolas Klauser long& iword(int __index); 322e78f53d1SNikolas Klauser void*& pword(int __index); 323e78f53d1SNikolas Klauser 324e78f53d1SNikolas Klauser // destructor 325e78f53d1SNikolas Klauser virtual ~ios_base(); 326e78f53d1SNikolas Klauser 327e78f53d1SNikolas Klauser // 27.5.2.6 callbacks; 328e78f53d1SNikolas Klauser enum event { erase_event, imbue_event, copyfmt_event }; 329e78f53d1SNikolas Klauser typedef void (*event_callback)(event, ios_base&, int __index); 330e78f53d1SNikolas Klauser void register_callback(event_callback __fn, int __index); 331e78f53d1SNikolas Klauser 332e78f53d1SNikolas Klauser ios_base(const ios_base&) = delete; 333e78f53d1SNikolas Klauser ios_base& operator=(const ios_base&) = delete; 334e78f53d1SNikolas Klauser 335e78f53d1SNikolas Klauser static bool sync_with_stdio(bool __sync = true); 336e78f53d1SNikolas Klauser 337e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI iostate rdstate() const; 338e78f53d1SNikolas Klauser void clear(iostate __state = goodbit); 339e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void setstate(iostate __state); 340e78f53d1SNikolas Klauser 341e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool good() const; 342e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool eof() const; 343e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool fail() const; 344e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool bad() const; 345e78f53d1SNikolas Klauser 346e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI iostate exceptions() const; 347e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void exceptions(iostate __iostate); 348e78f53d1SNikolas Klauser 349e78f53d1SNikolas Klauser void __set_badbit_and_consider_rethrow(); 350e78f53d1SNikolas Klauser void __set_failbit_and_consider_rethrow(); 351e78f53d1SNikolas Klauser 352e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void __setstate_nothrow(iostate __state) { 353e78f53d1SNikolas Klauser if (__rdbuf_) 354e78f53d1SNikolas Klauser __rdstate_ |= __state; 355e78f53d1SNikolas Klauser else 356e78f53d1SNikolas Klauser __rdstate_ |= __state | ios_base::badbit; 357e78f53d1SNikolas Klauser } 358e78f53d1SNikolas Klauser 359e78f53d1SNikolas Klauserprotected: 360e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI ios_base() : __loc_(nullptr) { 361e78f53d1SNikolas Klauser // Purposefully does no initialization 362e78f53d1SNikolas Klauser // 363e78f53d1SNikolas Klauser // Except for the locale, this is a sentinel to avoid destroying 364e78f53d1SNikolas Klauser // an uninitialized object. See 365e78f53d1SNikolas Klauser // test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp 366e78f53d1SNikolas Klauser // for the details. 367e78f53d1SNikolas Klauser } 368e78f53d1SNikolas Klauser 369e78f53d1SNikolas Klauser void init(void* __sb); 370e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void* rdbuf() const { return __rdbuf_; } 371e78f53d1SNikolas Klauser 372e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void rdbuf(void* __sb) { 373e78f53d1SNikolas Klauser __rdbuf_ = __sb; 374e78f53d1SNikolas Klauser clear(); 375e78f53d1SNikolas Klauser } 376e78f53d1SNikolas Klauser 377e78f53d1SNikolas Klauser void __call_callbacks(event); 378e78f53d1SNikolas Klauser void copyfmt(const ios_base&); 379e78f53d1SNikolas Klauser void move(ios_base&); 380e78f53d1SNikolas Klauser void swap(ios_base&) _NOEXCEPT; 381e78f53d1SNikolas Klauser 382e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void set_rdbuf(void* __sb) { __rdbuf_ = __sb; } 383e78f53d1SNikolas Klauser 384e78f53d1SNikolas Klauserprivate: 385e78f53d1SNikolas Klauser // All data members must be scalars 386e78f53d1SNikolas Klauser fmtflags __fmtflags_; 387e78f53d1SNikolas Klauser streamsize __precision_; 388e78f53d1SNikolas Klauser streamsize __width_; 389e78f53d1SNikolas Klauser iostate __rdstate_; 390e78f53d1SNikolas Klauser iostate __exceptions_; 391e78f53d1SNikolas Klauser void* __rdbuf_; 392e78f53d1SNikolas Klauser void* __loc_; 393e78f53d1SNikolas Klauser event_callback* __fn_; 394e78f53d1SNikolas Klauser int* __index_; 395e78f53d1SNikolas Klauser size_t __event_size_; 396e78f53d1SNikolas Klauser size_t __event_cap_; 397e78f53d1SNikolas Klauser// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only 398e78f53d1SNikolas Klauser// enabled with clang. 399e78f53d1SNikolas Klauser# if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS) 400e78f53d1SNikolas Klauser static atomic<int> __xindex_; 401e78f53d1SNikolas Klauser# else 402e78f53d1SNikolas Klauser static int __xindex_; 403e78f53d1SNikolas Klauser# endif 404e78f53d1SNikolas Klauser long* __iarray_; 405e78f53d1SNikolas Klauser size_t __iarray_size_; 406e78f53d1SNikolas Klauser size_t __iarray_cap_; 407e78f53d1SNikolas Klauser void** __parray_; 408e78f53d1SNikolas Klauser size_t __parray_size_; 409e78f53d1SNikolas Klauser size_t __parray_cap_; 410e78f53d1SNikolas Klauser}; 411e78f53d1SNikolas Klauser 412e78f53d1SNikolas Klauser// enum class io_errc 413e78f53d1SNikolas Klauser_LIBCPP_DECLARE_STRONG_ENUM(io_errc){stream = 1}; 414e78f53d1SNikolas Klauser_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc) 415e78f53d1SNikolas Klauser 416e78f53d1SNikolas Klausertemplate <> 417e78f53d1SNikolas Klauserstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type {}; 418e78f53d1SNikolas Klauser 419e78f53d1SNikolas Klauser# ifdef _LIBCPP_CXX03_LANG 420e78f53d1SNikolas Klausertemplate <> 421e78f53d1SNikolas Klauserstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type {}; 422e78f53d1SNikolas Klauser# endif 423e78f53d1SNikolas Klauser 424e78f53d1SNikolas Klauser_LIBCPP_EXPORTED_FROM_ABI const error_category& iostream_category() _NOEXCEPT; 425e78f53d1SNikolas Klauser 426e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI error_code make_error_code(io_errc __e) _NOEXCEPT { 427e78f53d1SNikolas Klauser return error_code(static_cast<int>(__e), iostream_category()); 428e78f53d1SNikolas Klauser} 429e78f53d1SNikolas Klauser 430e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI error_condition make_error_condition(io_errc __e) _NOEXCEPT { 431e78f53d1SNikolas Klauser return error_condition(static_cast<int>(__e), iostream_category()); 432e78f53d1SNikolas Klauser} 433e78f53d1SNikolas Klauser 434e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI ios_base::failure : public system_error { 435e78f53d1SNikolas Klauserpublic: 436e78f53d1SNikolas Klauser explicit failure(const string& __msg, const error_code& __ec = io_errc::stream); 437e78f53d1SNikolas Klauser explicit failure(const char* __msg, const error_code& __ec = io_errc::stream); 438e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI failure(const failure&) _NOEXCEPT = default; 439e78f53d1SNikolas Klauser ~failure() _NOEXCEPT override; 440e78f53d1SNikolas Klauser}; 441e78f53d1SNikolas Klauser 442e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_failure(char const* __msg) { 443e78f53d1SNikolas Klauser# ifndef _LIBCPP_HAS_NO_EXCEPTIONS 444e78f53d1SNikolas Klauser throw ios_base::failure(__msg); 445e78f53d1SNikolas Klauser# else 446e78f53d1SNikolas Klauser _LIBCPP_VERBOSE_ABORT("ios_base::failure was thrown in -fno-exceptions mode with message \"%s\"", __msg); 447e78f53d1SNikolas Klauser# endif 448e78f53d1SNikolas Klauser} 449e78f53d1SNikolas Klauser 450e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI ios_base::Init { 451e78f53d1SNikolas Klauserpublic: 452e78f53d1SNikolas Klauser Init(); 453e78f53d1SNikolas Klauser ~Init(); 454e78f53d1SNikolas Klauser}; 455e78f53d1SNikolas Klauser 456e78f53d1SNikolas Klauser// fmtflags 457e78f53d1SNikolas Klauser 458e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::flags() const { return __fmtflags_; } 459e78f53d1SNikolas Klauser 460e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::flags(fmtflags __fmtfl) { 461e78f53d1SNikolas Klauser fmtflags __r = __fmtflags_; 462e78f53d1SNikolas Klauser __fmtflags_ = __fmtfl; 463e78f53d1SNikolas Klauser return __r; 464e78f53d1SNikolas Klauser} 465e78f53d1SNikolas Klauser 466e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::setf(fmtflags __fmtfl) { 467e78f53d1SNikolas Klauser fmtflags __r = __fmtflags_; 468e78f53d1SNikolas Klauser __fmtflags_ |= __fmtfl; 469e78f53d1SNikolas Klauser return __r; 470e78f53d1SNikolas Klauser} 471e78f53d1SNikolas Klauser 472e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void ios_base::unsetf(fmtflags __mask) { __fmtflags_ &= ~__mask; } 473e78f53d1SNikolas Klauser 474e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::setf(fmtflags __fmtfl, fmtflags __mask) { 475e78f53d1SNikolas Klauser fmtflags __r = __fmtflags_; 476e78f53d1SNikolas Klauser unsetf(__mask); 477e78f53d1SNikolas Klauser __fmtflags_ |= __fmtfl & __mask; 478e78f53d1SNikolas Klauser return __r; 479e78f53d1SNikolas Klauser} 480e78f53d1SNikolas Klauser 481e78f53d1SNikolas Klauser// precision 482e78f53d1SNikolas Klauser 483e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::precision() const { return __precision_; } 484e78f53d1SNikolas Klauser 485e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::precision(streamsize __prec) { 486e78f53d1SNikolas Klauser streamsize __r = __precision_; 487e78f53d1SNikolas Klauser __precision_ = __prec; 488e78f53d1SNikolas Klauser return __r; 489e78f53d1SNikolas Klauser} 490e78f53d1SNikolas Klauser 491e78f53d1SNikolas Klauser// width 492e78f53d1SNikolas Klauser 493e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::width() const { return __width_; } 494e78f53d1SNikolas Klauser 495e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::width(streamsize __wide) { 496e78f53d1SNikolas Klauser streamsize __r = __width_; 497e78f53d1SNikolas Klauser __width_ = __wide; 498e78f53d1SNikolas Klauser return __r; 499e78f53d1SNikolas Klauser} 500e78f53d1SNikolas Klauser 501e78f53d1SNikolas Klauser// iostate 502e78f53d1SNikolas Klauser 503e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::iostate ios_base::rdstate() const { return __rdstate_; } 504e78f53d1SNikolas Klauser 505e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void ios_base::setstate(iostate __state) { clear(__rdstate_ | __state); } 506e78f53d1SNikolas Klauser 507e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::good() const { return __rdstate_ == 0; } 508e78f53d1SNikolas Klauser 509e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::eof() const { return (__rdstate_ & eofbit) != 0; } 510e78f53d1SNikolas Klauser 511e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::fail() const { return (__rdstate_ & (failbit | badbit)) != 0; } 512e78f53d1SNikolas Klauser 513e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::bad() const { return (__rdstate_ & badbit) != 0; } 514e78f53d1SNikolas Klauser 515e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::iostate ios_base::exceptions() const { return __exceptions_; } 516e78f53d1SNikolas Klauser 517e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void ios_base::exceptions(iostate __iostate) { 518e78f53d1SNikolas Klauser __exceptions_ = __iostate; 519e78f53d1SNikolas Klauser clear(__rdstate_); 520e78f53d1SNikolas Klauser} 521e78f53d1SNikolas Klauser 522e78f53d1SNikolas Klausertemplate <class _Traits> 523e78f53d1SNikolas Klauser// Attribute 'packed' is used to keep the layout compatible with the previous 524e78f53d1SNikolas Klauser// definition of the '__fill_' and '_set_' pair in basic_ios on AIX & z/OS. 525e78f53d1SNikolas Klauserstruct _LIBCPP_PACKED _FillHelper { 526e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void __init() { __set_ = false; } 527e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _FillHelper& operator=(typename _Traits::int_type __x) { 528e78f53d1SNikolas Klauser __set_ = true; 529e78f53d1SNikolas Klauser __fill_val_ = __x; 530e78f53d1SNikolas Klauser return *this; 531e78f53d1SNikolas Klauser } 532e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool __is_set() const { return __set_; } 533e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI typename _Traits::int_type __get() const { return __fill_val_; } 534e78f53d1SNikolas Klauser 535e78f53d1SNikolas Klauserprivate: 536e78f53d1SNikolas Klauser typename _Traits::int_type __fill_val_; 537e78f53d1SNikolas Klauser bool __set_; 538e78f53d1SNikolas Klauser}; 539e78f53d1SNikolas Klauser 540e78f53d1SNikolas Klausertemplate <class _Traits> 541e78f53d1SNikolas Klauserstruct _LIBCPP_PACKED _SentinelValueFill { 542e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void __init() { __fill_val_ = _Traits::eof(); } 543e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI _SentinelValueFill& operator=(typename _Traits::int_type __x) { 544e78f53d1SNikolas Klauser __fill_val_ = __x; 545e78f53d1SNikolas Klauser return *this; 546e78f53d1SNikolas Klauser } 547e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool __is_set() const { return __fill_val_ != _Traits::eof(); } 548e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI typename _Traits::int_type __get() const { return __fill_val_; } 549e78f53d1SNikolas Klauser 550e78f53d1SNikolas Klauserprivate: 551e78f53d1SNikolas Klauser typename _Traits::int_type __fill_val_; 552e78f53d1SNikolas Klauser}; 553e78f53d1SNikolas Klauser 554e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 555e78f53d1SNikolas Klauserclass _LIBCPP_TEMPLATE_VIS basic_ios : public ios_base { 556e78f53d1SNikolas Klauserpublic: 557e78f53d1SNikolas Klauser // types: 558e78f53d1SNikolas Klauser typedef _CharT char_type; 559e78f53d1SNikolas Klauser typedef _Traits traits_type; 560e78f53d1SNikolas Klauser 561e78f53d1SNikolas Klauser typedef typename traits_type::int_type int_type; 562e78f53d1SNikolas Klauser typedef typename traits_type::pos_type pos_type; 563e78f53d1SNikolas Klauser typedef typename traits_type::off_type off_type; 564e78f53d1SNikolas Klauser 565e78f53d1SNikolas Klauser static_assert(is_same<_CharT, typename traits_type::char_type>::value, 566e78f53d1SNikolas Klauser "traits_type::char_type must be the same type as CharT"); 567e78f53d1SNikolas Klauser 568e78f53d1SNikolas Klauser# ifdef _LIBCPP_CXX03_LANG 569e78f53d1SNikolas Klauser // Preserve the ability to compare with literal 0, 570e78f53d1SNikolas Klauser // and implicitly convert to bool, but not implicitly convert to int. 571e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI operator void*() const { return fail() ? nullptr : (void*)this; } 572e78f53d1SNikolas Klauser# else 573e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit operator bool() const { return !fail(); } 574e78f53d1SNikolas Klauser# endif 575e78f53d1SNikolas Klauser 576e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool operator!() const { return fail(); } 577e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI iostate rdstate() const { return ios_base::rdstate(); } 578e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void clear(iostate __state = goodbit) { ios_base::clear(__state); } 579e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void setstate(iostate __state) { ios_base::setstate(__state); } 580e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool good() const { return ios_base::good(); } 581e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool eof() const { return ios_base::eof(); } 582e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool fail() const { return ios_base::fail(); } 583e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI bool bad() const { return ios_base::bad(); } 584e78f53d1SNikolas Klauser 585e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI iostate exceptions() const { return ios_base::exceptions(); } 586e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void exceptions(iostate __iostate) { ios_base::exceptions(__iostate); } 587e78f53d1SNikolas Klauser 588e78f53d1SNikolas Klauser // 27.5.4.1 Constructor/destructor: 589e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit basic_ios(basic_streambuf<char_type, traits_type>* __sb); 590e78f53d1SNikolas Klauser ~basic_ios() override; 591e78f53d1SNikolas Klauser 592e78f53d1SNikolas Klauser // 27.5.4.2 Members: 593e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI basic_ostream<char_type, traits_type>* tie() const; 594e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr); 595e78f53d1SNikolas Klauser 596e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI basic_streambuf<char_type, traits_type>* rdbuf() const; 597e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb); 598e78f53d1SNikolas Klauser 599e78f53d1SNikolas Klauser basic_ios& copyfmt(const basic_ios& __rhs); 600e78f53d1SNikolas Klauser 601e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI char_type fill() const; 602e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI char_type fill(char_type __ch); 603e78f53d1SNikolas Klauser 604e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI locale imbue(const locale& __loc); 605e78f53d1SNikolas Klauser 606e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI char narrow(char_type __c, char __dfault) const; 607e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI char_type widen(char __c) const; 608e78f53d1SNikolas Klauser 609e78f53d1SNikolas Klauserprotected: 610e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI basic_ios() { 611e78f53d1SNikolas Klauser // purposefully does no initialization 612e78f53d1SNikolas Klauser // since the destructor does nothing this does not have ios_base issues. 613e78f53d1SNikolas Klauser } 614e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void init(basic_streambuf<char_type, traits_type>* __sb); 615e78f53d1SNikolas Klauser 616e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void move(basic_ios& __rhs); 617e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void move(basic_ios&& __rhs) { move(__rhs); } 618e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void swap(basic_ios& __rhs) _NOEXCEPT; 619e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb); 620e78f53d1SNikolas Klauser 621e78f53d1SNikolas Klauserprivate: 622e78f53d1SNikolas Klauser basic_ostream<char_type, traits_type>* __tie_; 623e78f53d1SNikolas Klauser 624e78f53d1SNikolas Klauser# if defined(_LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE) 625e78f53d1SNikolas Klauser using _FillType = _FillHelper<traits_type>; 626e78f53d1SNikolas Klauser# else 627e78f53d1SNikolas Klauser using _FillType = _SentinelValueFill<traits_type>; 628e78f53d1SNikolas Klauser# endif 629e78f53d1SNikolas Klauser mutable _FillType __fill_; 630e78f53d1SNikolas Klauser}; 631e78f53d1SNikolas Klauser 632e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 633e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type, traits_type>* __sb) { 634e78f53d1SNikolas Klauser init(__sb); 635e78f53d1SNikolas Klauser} 636e78f53d1SNikolas Klauser 637e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 638e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>::~basic_ios() {} 639e78f53d1SNikolas Klauser 640e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 641e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb) { 642e78f53d1SNikolas Klauser ios_base::init(__sb); 643e78f53d1SNikolas Klauser __tie_ = nullptr; 644e78f53d1SNikolas Klauser __fill_.__init(); 645e78f53d1SNikolas Klauser} 646e78f53d1SNikolas Klauser 647e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 648e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>* basic_ios<_CharT, _Traits>::tie() const { 649e78f53d1SNikolas Klauser return __tie_; 650e78f53d1SNikolas Klauser} 651e78f53d1SNikolas Klauser 652e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 653e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>* 654e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr) { 655e78f53d1SNikolas Klauser basic_ostream<char_type, traits_type>* __r = __tie_; 656e78f53d1SNikolas Klauser __tie_ = __tiestr; 657e78f53d1SNikolas Klauser return __r; 658e78f53d1SNikolas Klauser} 659e78f53d1SNikolas Klauser 660e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 661e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_streambuf<_CharT, _Traits>* basic_ios<_CharT, _Traits>::rdbuf() const { 662e78f53d1SNikolas Klauser return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf()); 663e78f53d1SNikolas Klauser} 664e78f53d1SNikolas Klauser 665e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 666e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_streambuf<_CharT, _Traits>* 667e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb) { 668e78f53d1SNikolas Klauser basic_streambuf<char_type, traits_type>* __r = rdbuf(); 669e78f53d1SNikolas Klauser ios_base::rdbuf(__sb); 670e78f53d1SNikolas Klauser return __r; 671e78f53d1SNikolas Klauser} 672e78f53d1SNikolas Klauser 673e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 674e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI locale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) { 675e78f53d1SNikolas Klauser locale __r = getloc(); 676e78f53d1SNikolas Klauser ios_base::imbue(__loc); 677e78f53d1SNikolas Klauser if (rdbuf()) 678e78f53d1SNikolas Klauser rdbuf()->pubimbue(__loc); 679e78f53d1SNikolas Klauser return __r; 680e78f53d1SNikolas Klauser} 681e78f53d1SNikolas Klauser 682e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 683e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI char basic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const { 684e78f53d1SNikolas Klauser return std::use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault); 685e78f53d1SNikolas Klauser} 686e78f53d1SNikolas Klauser 687e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 688e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::widen(char __c) const { 689e78f53d1SNikolas Klauser return std::use_facet<ctype<char_type> >(getloc()).widen(__c); 690e78f53d1SNikolas Klauser} 691e78f53d1SNikolas Klauser 692e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 693e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill() const { 694e78f53d1SNikolas Klauser if (!__fill_.__is_set()) 695e78f53d1SNikolas Klauser __fill_ = widen(' '); 696e78f53d1SNikolas Klauser return __fill_.__get(); 697e78f53d1SNikolas Klauser} 698e78f53d1SNikolas Klauser 699e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 700e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill(char_type __ch) { 701e78f53d1SNikolas Klauser if (!__fill_.__is_set()) 702e78f53d1SNikolas Klauser __fill_ = widen(' '); 703e78f53d1SNikolas Klauser char_type __r = __fill_.__get(); 704e78f53d1SNikolas Klauser __fill_ = __ch; 705e78f53d1SNikolas Klauser return __r; 706e78f53d1SNikolas Klauser} 707e78f53d1SNikolas Klauser 708e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 709e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>& basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) { 710e78f53d1SNikolas Klauser if (this != &__rhs) { 711e78f53d1SNikolas Klauser __call_callbacks(erase_event); 712e78f53d1SNikolas Klauser ios_base::copyfmt(__rhs); 713e78f53d1SNikolas Klauser __tie_ = __rhs.__tie_; 714e78f53d1SNikolas Klauser __fill_ = __rhs.__fill_; 715e78f53d1SNikolas Klauser __call_callbacks(copyfmt_event); 716e78f53d1SNikolas Klauser exceptions(__rhs.exceptions()); 717e78f53d1SNikolas Klauser } 718e78f53d1SNikolas Klauser return *this; 719e78f53d1SNikolas Klauser} 720e78f53d1SNikolas Klauser 721e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 722e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::move(basic_ios& __rhs) { 723e78f53d1SNikolas Klauser ios_base::move(__rhs); 724e78f53d1SNikolas Klauser __tie_ = __rhs.__tie_; 725e78f53d1SNikolas Klauser __rhs.__tie_ = nullptr; 726e78f53d1SNikolas Klauser __fill_ = __rhs.__fill_; 727e78f53d1SNikolas Klauser} 728e78f53d1SNikolas Klauser 729e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 730e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT { 731e78f53d1SNikolas Klauser ios_base::swap(__rhs); 732e78f53d1SNikolas Klauser std::swap(__tie_, __rhs.__tie_); 733e78f53d1SNikolas Klauser std::swap(__fill_, __rhs.__fill_); 734e78f53d1SNikolas Klauser} 735e78f53d1SNikolas Klauser 736e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits> 737e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb) { 738e78f53d1SNikolas Klauser ios_base::set_rdbuf(__sb); 739e78f53d1SNikolas Klauser} 740e78f53d1SNikolas Klauser 741e78f53d1SNikolas Klauserextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<char>; 742e78f53d1SNikolas Klauser 743e78f53d1SNikolas Klauser# ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 744e78f53d1SNikolas Klauserextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<wchar_t>; 745e78f53d1SNikolas Klauser# endif 746e78f53d1SNikolas Klauser 747e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& boolalpha(ios_base& __str) { 748e78f53d1SNikolas Klauser __str.setf(ios_base::boolalpha); 749e78f53d1SNikolas Klauser return __str; 750e78f53d1SNikolas Klauser} 751e78f53d1SNikolas Klauser 752e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noboolalpha(ios_base& __str) { 753e78f53d1SNikolas Klauser __str.unsetf(ios_base::boolalpha); 754e78f53d1SNikolas Klauser return __str; 755e78f53d1SNikolas Klauser} 756e78f53d1SNikolas Klauser 757e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& showbase(ios_base& __str) { 758e78f53d1SNikolas Klauser __str.setf(ios_base::showbase); 759e78f53d1SNikolas Klauser return __str; 760e78f53d1SNikolas Klauser} 761e78f53d1SNikolas Klauser 762e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowbase(ios_base& __str) { 763e78f53d1SNikolas Klauser __str.unsetf(ios_base::showbase); 764e78f53d1SNikolas Klauser return __str; 765e78f53d1SNikolas Klauser} 766e78f53d1SNikolas Klauser 767e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& showpoint(ios_base& __str) { 768e78f53d1SNikolas Klauser __str.setf(ios_base::showpoint); 769e78f53d1SNikolas Klauser return __str; 770e78f53d1SNikolas Klauser} 771e78f53d1SNikolas Klauser 772e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowpoint(ios_base& __str) { 773e78f53d1SNikolas Klauser __str.unsetf(ios_base::showpoint); 774e78f53d1SNikolas Klauser return __str; 775e78f53d1SNikolas Klauser} 776e78f53d1SNikolas Klauser 777e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& showpos(ios_base& __str) { 778e78f53d1SNikolas Klauser __str.setf(ios_base::showpos); 779e78f53d1SNikolas Klauser return __str; 780e78f53d1SNikolas Klauser} 781e78f53d1SNikolas Klauser 782e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowpos(ios_base& __str) { 783e78f53d1SNikolas Klauser __str.unsetf(ios_base::showpos); 784e78f53d1SNikolas Klauser return __str; 785e78f53d1SNikolas Klauser} 786e78f53d1SNikolas Klauser 787e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& skipws(ios_base& __str) { 788e78f53d1SNikolas Klauser __str.setf(ios_base::skipws); 789e78f53d1SNikolas Klauser return __str; 790e78f53d1SNikolas Klauser} 791e78f53d1SNikolas Klauser 792e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noskipws(ios_base& __str) { 793e78f53d1SNikolas Klauser __str.unsetf(ios_base::skipws); 794e78f53d1SNikolas Klauser return __str; 795e78f53d1SNikolas Klauser} 796e78f53d1SNikolas Klauser 797e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& uppercase(ios_base& __str) { 798e78f53d1SNikolas Klauser __str.setf(ios_base::uppercase); 799e78f53d1SNikolas Klauser return __str; 800e78f53d1SNikolas Klauser} 801e78f53d1SNikolas Klauser 802e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& nouppercase(ios_base& __str) { 803e78f53d1SNikolas Klauser __str.unsetf(ios_base::uppercase); 804e78f53d1SNikolas Klauser return __str; 805e78f53d1SNikolas Klauser} 806e78f53d1SNikolas Klauser 807e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& unitbuf(ios_base& __str) { 808e78f53d1SNikolas Klauser __str.setf(ios_base::unitbuf); 809e78f53d1SNikolas Klauser return __str; 810e78f53d1SNikolas Klauser} 811e78f53d1SNikolas Klauser 812e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& nounitbuf(ios_base& __str) { 813e78f53d1SNikolas Klauser __str.unsetf(ios_base::unitbuf); 814e78f53d1SNikolas Klauser return __str; 815e78f53d1SNikolas Klauser} 816e78f53d1SNikolas Klauser 817e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& internal(ios_base& __str) { 818e78f53d1SNikolas Klauser __str.setf(ios_base::internal, ios_base::adjustfield); 819e78f53d1SNikolas Klauser return __str; 820e78f53d1SNikolas Klauser} 821e78f53d1SNikolas Klauser 822e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& left(ios_base& __str) { 823e78f53d1SNikolas Klauser __str.setf(ios_base::left, ios_base::adjustfield); 824e78f53d1SNikolas Klauser return __str; 825e78f53d1SNikolas Klauser} 826e78f53d1SNikolas Klauser 827e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& right(ios_base& __str) { 828e78f53d1SNikolas Klauser __str.setf(ios_base::right, ios_base::adjustfield); 829e78f53d1SNikolas Klauser return __str; 830e78f53d1SNikolas Klauser} 831e78f53d1SNikolas Klauser 832e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& dec(ios_base& __str) { 833e78f53d1SNikolas Klauser __str.setf(ios_base::dec, ios_base::basefield); 834e78f53d1SNikolas Klauser return __str; 835e78f53d1SNikolas Klauser} 836e78f53d1SNikolas Klauser 837e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& hex(ios_base& __str) { 838e78f53d1SNikolas Klauser __str.setf(ios_base::hex, ios_base::basefield); 839e78f53d1SNikolas Klauser return __str; 840e78f53d1SNikolas Klauser} 841e78f53d1SNikolas Klauser 842e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& oct(ios_base& __str) { 843e78f53d1SNikolas Klauser __str.setf(ios_base::oct, ios_base::basefield); 844e78f53d1SNikolas Klauser return __str; 845e78f53d1SNikolas Klauser} 846e78f53d1SNikolas Klauser 847e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& fixed(ios_base& __str) { 848e78f53d1SNikolas Klauser __str.setf(ios_base::fixed, ios_base::floatfield); 849e78f53d1SNikolas Klauser return __str; 850e78f53d1SNikolas Klauser} 851e78f53d1SNikolas Klauser 852e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& scientific(ios_base& __str) { 853e78f53d1SNikolas Klauser __str.setf(ios_base::scientific, ios_base::floatfield); 854e78f53d1SNikolas Klauser return __str; 855e78f53d1SNikolas Klauser} 856e78f53d1SNikolas Klauser 857e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& hexfloat(ios_base& __str) { 858e78f53d1SNikolas Klauser __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); 859e78f53d1SNikolas Klauser return __str; 860e78f53d1SNikolas Klauser} 861e78f53d1SNikolas Klauser 862e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& defaultfloat(ios_base& __str) { 863e78f53d1SNikolas Klauser __str.unsetf(ios_base::floatfield); 864e78f53d1SNikolas Klauser return __str; 865e78f53d1SNikolas Klauser} 866e78f53d1SNikolas Klauser 867e78f53d1SNikolas Klauser_LIBCPP_END_NAMESPACE_STD 868e78f53d1SNikolas Klauser 869e78f53d1SNikolas Klauser_LIBCPP_POP_MACROS 870e78f53d1SNikolas Klauser 871e78f53d1SNikolas Klauser#endif // !defined(_LIBCPP_HAS_NO_LOCALIZATION) 872e78f53d1SNikolas Klauser 873e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 87473fbae83SNikolas Klauser# include <__cxx03/atomic> 87573fbae83SNikolas Klauser# include <__cxx03/concepts> 87673fbae83SNikolas Klauser# include <__cxx03/cstddef> 87773fbae83SNikolas Klauser# include <__cxx03/cstdlib> 87873fbae83SNikolas Klauser# include <__cxx03/cstring> 87973fbae83SNikolas Klauser# include <__cxx03/initializer_list> 88073fbae83SNikolas Klauser# include <__cxx03/limits> 88173fbae83SNikolas Klauser# include <__cxx03/mutex> 88273fbae83SNikolas Klauser# include <__cxx03/new> 88373fbae83SNikolas Klauser# include <__cxx03/stdexcept> 88473fbae83SNikolas Klauser# include <__cxx03/system_error> 88573fbae83SNikolas Klauser# include <__cxx03/type_traits> 88673fbae83SNikolas Klauser# include <__cxx03/typeinfo> 887e78f53d1SNikolas Klauser#endif 888e78f53d1SNikolas Klauser 889*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_IOS 890