13e519524SHoward Hinnant// -*- C++ -*- 2eb8650a7SLouis Dionne//===----------------------------------------------------------------------===// 33e519524SHoward Hinnant// 457b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 557b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 657b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 73e519524SHoward Hinnant// 83e519524SHoward Hinnant//===----------------------------------------------------------------------===// 93e519524SHoward Hinnant 103e519524SHoward Hinnant#ifndef _LIBCPP_IOS 113e519524SHoward Hinnant#define _LIBCPP_IOS 123e519524SHoward Hinnant 133e519524SHoward Hinnant/* 143e519524SHoward Hinnant ios synopsis 153e519524SHoward Hinnant 163e519524SHoward Hinnant#include <iosfwd> 173e519524SHoward Hinnant 183e519524SHoward Hinnantnamespace std 193e519524SHoward Hinnant{ 203e519524SHoward Hinnant 213e519524SHoward Hinnanttypedef OFF_T streamoff; 223e519524SHoward Hinnanttypedef SZ_T streamsize; 233e519524SHoward Hinnanttemplate <class stateT> class fpos; 243e519524SHoward Hinnant 253e519524SHoward Hinnantclass ios_base 263e519524SHoward Hinnant{ 273e519524SHoward Hinnantpublic: 283e519524SHoward Hinnant class failure; 293e519524SHoward Hinnant 303e519524SHoward Hinnant typedef T1 fmtflags; 315d926bf1SHoward Hinnant static constexpr fmtflags boolalpha; 325d926bf1SHoward Hinnant static constexpr fmtflags dec; 335d926bf1SHoward Hinnant static constexpr fmtflags fixed; 345d926bf1SHoward Hinnant static constexpr fmtflags hex; 355d926bf1SHoward Hinnant static constexpr fmtflags internal; 365d926bf1SHoward Hinnant static constexpr fmtflags left; 375d926bf1SHoward Hinnant static constexpr fmtflags oct; 385d926bf1SHoward Hinnant static constexpr fmtflags right; 395d926bf1SHoward Hinnant static constexpr fmtflags scientific; 405d926bf1SHoward Hinnant static constexpr fmtflags showbase; 415d926bf1SHoward Hinnant static constexpr fmtflags showpoint; 425d926bf1SHoward Hinnant static constexpr fmtflags showpos; 435d926bf1SHoward Hinnant static constexpr fmtflags skipws; 445d926bf1SHoward Hinnant static constexpr fmtflags unitbuf; 455d926bf1SHoward Hinnant static constexpr fmtflags uppercase; 465d926bf1SHoward Hinnant static constexpr fmtflags adjustfield; 475d926bf1SHoward Hinnant static constexpr fmtflags basefield; 485d926bf1SHoward Hinnant static constexpr fmtflags floatfield; 493e519524SHoward Hinnant 503e519524SHoward Hinnant typedef T2 iostate; 515d926bf1SHoward Hinnant static constexpr iostate badbit; 525d926bf1SHoward Hinnant static constexpr iostate eofbit; 535d926bf1SHoward Hinnant static constexpr iostate failbit; 545d926bf1SHoward Hinnant static constexpr iostate goodbit; 553e519524SHoward Hinnant 563e519524SHoward Hinnant typedef T3 openmode; 575d926bf1SHoward Hinnant static constexpr openmode app; 585d926bf1SHoward Hinnant static constexpr openmode ate; 595d926bf1SHoward Hinnant static constexpr openmode binary; 605d926bf1SHoward Hinnant static constexpr openmode in; 615d926bf1SHoward Hinnant static constexpr openmode out; 625d926bf1SHoward Hinnant static constexpr openmode trunc; 633e519524SHoward Hinnant 643e519524SHoward Hinnant typedef T4 seekdir; 655d926bf1SHoward Hinnant static constexpr seekdir beg; 665d926bf1SHoward Hinnant static constexpr seekdir cur; 675d926bf1SHoward Hinnant static constexpr seekdir end; 683e519524SHoward Hinnant 693e519524SHoward Hinnant class Init; 703e519524SHoward Hinnant 713e519524SHoward Hinnant // 27.5.2.2 fmtflags state: 723e519524SHoward Hinnant fmtflags flags() const; 733e519524SHoward Hinnant fmtflags flags(fmtflags fmtfl); 743e519524SHoward Hinnant fmtflags setf(fmtflags fmtfl); 753e519524SHoward Hinnant fmtflags setf(fmtflags fmtfl, fmtflags mask); 763e519524SHoward Hinnant void unsetf(fmtflags mask); 773e519524SHoward Hinnant 783e519524SHoward Hinnant streamsize precision() const; 793e519524SHoward Hinnant streamsize precision(streamsize prec); 803e519524SHoward Hinnant streamsize width() const; 813e519524SHoward Hinnant streamsize width(streamsize wide); 823e519524SHoward Hinnant 833e519524SHoward Hinnant // 27.5.2.3 locales: 843e519524SHoward Hinnant locale imbue(const locale& loc); 853e519524SHoward Hinnant locale getloc() const; 863e519524SHoward Hinnant 873e519524SHoward Hinnant // 27.5.2.5 storage: 883e519524SHoward Hinnant static int xalloc(); 893e519524SHoward Hinnant long& iword(int index); 903e519524SHoward Hinnant void*& pword(int index); 913e519524SHoward Hinnant 923e519524SHoward Hinnant // destructor 933e519524SHoward Hinnant virtual ~ios_base(); 943e519524SHoward Hinnant 953e519524SHoward Hinnant // 27.5.2.6 callbacks; 963e519524SHoward Hinnant enum event { erase_event, imbue_event, copyfmt_event }; 973e519524SHoward Hinnant typedef void (*event_callback)(event, ios_base&, int index); 983e519524SHoward Hinnant void register_callback(event_callback fn, int index); 993e519524SHoward Hinnant 1003e519524SHoward Hinnant ios_base(const ios_base&) = delete; 1013e519524SHoward Hinnant ios_base& operator=(const ios_base&) = delete; 1023e519524SHoward Hinnant 1033e519524SHoward Hinnant static bool sync_with_stdio(bool sync = true); 1043e519524SHoward Hinnant 1053e519524SHoward Hinnantprotected: 1063e519524SHoward Hinnant ios_base(); 1073e519524SHoward Hinnant}; 1083e519524SHoward Hinnant 1093e519524SHoward Hinnanttemplate <class charT, class traits = char_traits<charT> > 1103e519524SHoward Hinnantclass basic_ios 1113e519524SHoward Hinnant : public ios_base 1123e519524SHoward Hinnant{ 1133e519524SHoward Hinnantpublic: 1143e519524SHoward Hinnant // types: 1153e519524SHoward Hinnant typedef charT char_type; 116131733bcSMarshall Clow typedef typename traits::int_type int_type; // removed in C++17 117131733bcSMarshall Clow typedef typename traits::pos_type pos_type; // removed in C++17 118131733bcSMarshall Clow typedef typename traits::off_type off_type; // removed in C++17 1193e519524SHoward Hinnant typedef traits traits_type; 1203e519524SHoward Hinnant 1213e519524SHoward Hinnant operator unspecified-bool-type() const; 1223e519524SHoward Hinnant bool operator!() const; 1233e519524SHoward Hinnant iostate rdstate() const; 1243e519524SHoward Hinnant void clear(iostate state = goodbit); 1253e519524SHoward Hinnant void setstate(iostate state); 1263e519524SHoward Hinnant bool good() const; 1273e519524SHoward Hinnant bool eof() const; 1283e519524SHoward Hinnant bool fail() const; 1293e519524SHoward Hinnant bool bad() const; 1303e519524SHoward Hinnant 1313e519524SHoward Hinnant iostate exceptions() const; 1323e519524SHoward Hinnant void exceptions(iostate except); 1333e519524SHoward Hinnant 1343e519524SHoward Hinnant // 27.5.4.1 Constructor/destructor: 1353e519524SHoward Hinnant explicit basic_ios(basic_streambuf<charT,traits>* sb); 1363e519524SHoward Hinnant virtual ~basic_ios(); 1373e519524SHoward Hinnant 1383e519524SHoward Hinnant // 27.5.4.2 Members: 1393e519524SHoward Hinnant basic_ostream<charT,traits>* tie() const; 1403e519524SHoward Hinnant basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr); 1413e519524SHoward Hinnant 1423e519524SHoward Hinnant basic_streambuf<charT,traits>* rdbuf() const; 1433e519524SHoward Hinnant basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb); 1443e519524SHoward Hinnant 1453e519524SHoward Hinnant basic_ios& copyfmt(const basic_ios& rhs); 1463e519524SHoward Hinnant 1473e519524SHoward Hinnant char_type fill() const; 1483e519524SHoward Hinnant char_type fill(char_type ch); 1493e519524SHoward Hinnant 1503e519524SHoward Hinnant locale imbue(const locale& loc); 1513e519524SHoward Hinnant 1523e519524SHoward Hinnant char narrow(char_type c, char dfault) const; 1533e519524SHoward Hinnant char_type widen(char c) const; 1543e519524SHoward Hinnant 1553e519524SHoward Hinnant basic_ios(const basic_ios& ) = delete; 1563e519524SHoward Hinnant basic_ios& operator=(const basic_ios&) = delete; 1573e519524SHoward Hinnant 1583e519524SHoward Hinnantprotected: 1593e519524SHoward Hinnant basic_ios(); 1603e519524SHoward Hinnant void init(basic_streambuf<charT,traits>* sb); 1613e519524SHoward Hinnant void move(basic_ios& rhs); 1625d926bf1SHoward Hinnant void swap(basic_ios& rhs) noexcept; 1633e519524SHoward Hinnant void set_rdbuf(basic_streambuf<charT, traits>* sb); 1643e519524SHoward Hinnant}; 1653e519524SHoward Hinnant 1663e519524SHoward Hinnant// 27.5.5, manipulators: 1673e519524SHoward Hinnantios_base& boolalpha (ios_base& str); 1683e519524SHoward Hinnantios_base& noboolalpha(ios_base& str); 1693e519524SHoward Hinnantios_base& showbase (ios_base& str); 1703e519524SHoward Hinnantios_base& noshowbase (ios_base& str); 1713e519524SHoward Hinnantios_base& showpoint (ios_base& str); 1723e519524SHoward Hinnantios_base& noshowpoint(ios_base& str); 1733e519524SHoward Hinnantios_base& showpos (ios_base& str); 1743e519524SHoward Hinnantios_base& noshowpos (ios_base& str); 1753e519524SHoward Hinnantios_base& skipws (ios_base& str); 1763e519524SHoward Hinnantios_base& noskipws (ios_base& str); 1773e519524SHoward Hinnantios_base& uppercase (ios_base& str); 1783e519524SHoward Hinnantios_base& nouppercase(ios_base& str); 1793e519524SHoward Hinnantios_base& unitbuf (ios_base& str); 1803e519524SHoward Hinnantios_base& nounitbuf (ios_base& str); 1813e519524SHoward Hinnant 1823e519524SHoward Hinnant// 27.5.5.2 adjustfield: 1833e519524SHoward Hinnantios_base& internal (ios_base& str); 1843e519524SHoward Hinnantios_base& left (ios_base& str); 1853e519524SHoward Hinnantios_base& right (ios_base& str); 1863e519524SHoward Hinnant 1873e519524SHoward Hinnant// 27.5.5.3 basefield: 1883e519524SHoward Hinnantios_base& dec (ios_base& str); 1893e519524SHoward Hinnantios_base& hex (ios_base& str); 1903e519524SHoward Hinnantios_base& oct (ios_base& str); 1913e519524SHoward Hinnant 1923e519524SHoward Hinnant// 27.5.5.4 floatfield: 1933e519524SHoward Hinnantios_base& fixed (ios_base& str); 1943e519524SHoward Hinnantios_base& scientific (ios_base& str); 1953e519524SHoward Hinnantios_base& hexfloat (ios_base& str); 1963e519524SHoward Hinnantios_base& defaultfloat(ios_base& str); 1973e519524SHoward Hinnant 1983e519524SHoward Hinnant// 27.5.5.5 error reporting: 1993e519524SHoward Hinnantenum class io_errc 2003e519524SHoward Hinnant{ 2013e519524SHoward Hinnant stream = 1 2023e519524SHoward Hinnant}; 2033e519524SHoward Hinnant 2043e519524SHoward Hinnantconcept_map ErrorCodeEnum<io_errc> { }; 205c3776b1cSMarshall Clowerror_code make_error_code(io_errc e) noexcept; 206c3776b1cSMarshall Clowerror_condition make_error_condition(io_errc e) noexcept; 207c3776b1cSMarshall Clowstorage-class-specifier const error_category& iostream_category() noexcept; 2083e519524SHoward Hinnant 2093e519524SHoward Hinnant} // std 2103e519524SHoward Hinnant 2113e519524SHoward Hinnant*/ 2123e519524SHoward Hinnant 2133e519524SHoward Hinnant#include <__config> 2141c4b31c3SLouis Dionne 2151c4b31c3SLouis Dionne#if defined(_LIBCPP_HAS_NO_LOCALIZATION) 2161c4b31c3SLouis Dionne# error "The iostreams library is not supported since libc++ has been configured without support for localization." 2171c4b31c3SLouis Dionne#endif 2181c4b31c3SLouis Dionne 2191c4b31c3SLouis Dionne#include <__assert> // all public C++ headers provide the assertion handler 220679f8a88SNikolas Klauser#include <__ios/fpos.h> 2213e519524SHoward Hinnant#include <__locale> 22252915d78SNikolas Klauser#include <__utility/swap.h> 2233e519524SHoward Hinnant#include <system_error> 224bd6e6846SMark de Wever#include <version> 2253e519524SHoward Hinnant 226*db1978b6SNikolas Klauser// standard-mandated includes 227*db1978b6SNikolas Klauser#include <iosfwd> 228*db1978b6SNikolas Klauser 229749adebaSEric Fiselier#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER) 230f28fd284SMarshall Clow#include <atomic> // for __xindex_ 231f28fd284SMarshall Clow#endif 232f28fd284SMarshall Clow 233073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 2343e519524SHoward Hinnant# pragma GCC system_header 235073458b1SHoward Hinnant#endif 2363e519524SHoward Hinnant 2373e519524SHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 2383e519524SHoward Hinnant 2393e519524SHoward Hinnanttypedef ptrdiff_t streamsize; 2403e519524SHoward Hinnant 2416e41256fSHoward Hinnantclass _LIBCPP_TYPE_VIS ios_base 2423e519524SHoward Hinnant{ 2433e519524SHoward Hinnantpublic: 24462b98b6cSEric Fiselier class _LIBCPP_EXCEPTION_ABI failure; 2453e519524SHoward Hinnant 2463e519524SHoward Hinnant typedef unsigned int fmtflags; 2473e519524SHoward Hinnant static const fmtflags boolalpha = 0x0001; 2483e519524SHoward Hinnant static const fmtflags dec = 0x0002; 2493e519524SHoward Hinnant static const fmtflags fixed = 0x0004; 2503e519524SHoward Hinnant static const fmtflags hex = 0x0008; 2513e519524SHoward Hinnant static const fmtflags internal = 0x0010; 2523e519524SHoward Hinnant static const fmtflags left = 0x0020; 2533e519524SHoward Hinnant static const fmtflags oct = 0x0040; 2543e519524SHoward Hinnant static const fmtflags right = 0x0080; 2553e519524SHoward Hinnant static const fmtflags scientific = 0x0100; 2563e519524SHoward Hinnant static const fmtflags showbase = 0x0200; 2573e519524SHoward Hinnant static const fmtflags showpoint = 0x0400; 2583e519524SHoward Hinnant static const fmtflags showpos = 0x0800; 2593e519524SHoward Hinnant static const fmtflags skipws = 0x1000; 2603e519524SHoward Hinnant static const fmtflags unitbuf = 0x2000; 2613e519524SHoward Hinnant static const fmtflags uppercase = 0x4000; 2623e519524SHoward Hinnant static const fmtflags adjustfield = left | right | internal; 2633e519524SHoward Hinnant static const fmtflags basefield = dec | oct | hex; 2643e519524SHoward Hinnant static const fmtflags floatfield = scientific | fixed; 2653e519524SHoward Hinnant 2663e519524SHoward Hinnant typedef unsigned int iostate; 2673e519524SHoward Hinnant static const iostate badbit = 0x1; 2683e519524SHoward Hinnant static const iostate eofbit = 0x2; 2693e519524SHoward Hinnant static const iostate failbit = 0x4; 2703e519524SHoward Hinnant static const iostate goodbit = 0x0; 2713e519524SHoward Hinnant 2723e519524SHoward Hinnant typedef unsigned int openmode; 2733e519524SHoward Hinnant static const openmode app = 0x01; 2743e519524SHoward Hinnant static const openmode ate = 0x02; 2753e519524SHoward Hinnant static const openmode binary = 0x04; 2763e519524SHoward Hinnant static const openmode in = 0x08; 2773e519524SHoward Hinnant static const openmode out = 0x10; 2783e519524SHoward Hinnant static const openmode trunc = 0x20; 2793e519524SHoward Hinnant 2803e519524SHoward Hinnant enum seekdir {beg, cur, end}; 281131733bcSMarshall Clow 282131733bcSMarshall Clow#if _LIBCPP_STD_VER <= 14 283131733bcSMarshall Clow typedef iostate io_state; 284131733bcSMarshall Clow typedef openmode open_mode; 2853e519524SHoward Hinnant typedef seekdir seek_dir; 2863e519524SHoward Hinnant 287ce48a113SHoward Hinnant typedef _VSTD::streamoff streamoff; 288ce48a113SHoward Hinnant typedef _VSTD::streampos streampos; 289131733bcSMarshall Clow#endif 2903e519524SHoward Hinnant 2916e41256fSHoward Hinnant class _LIBCPP_TYPE_VIS Init; 2923e519524SHoward Hinnant 2933e519524SHoward Hinnant // 27.5.2.2 fmtflags state: 294c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY fmtflags flags() const; 295c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY fmtflags flags(fmtflags __fmtfl); 296c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl); 297c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl, fmtflags __mask); 298c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY void unsetf(fmtflags __mask); 2993e519524SHoward Hinnant 300c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY streamsize precision() const; 301c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY streamsize precision(streamsize __prec); 302c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY streamsize width() const; 303c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY streamsize width(streamsize __wide); 3043e519524SHoward Hinnant 3053e519524SHoward Hinnant // 27.5.2.3 locales: 3063e519524SHoward Hinnant locale imbue(const locale& __loc); 3073e519524SHoward Hinnant locale getloc() const; 3083e519524SHoward Hinnant 3093e519524SHoward Hinnant // 27.5.2.5 storage: 3103e519524SHoward Hinnant static int xalloc(); 3113e519524SHoward Hinnant long& iword(int __index); 3123e519524SHoward Hinnant void*& pword(int __index); 3133e519524SHoward Hinnant 3143e519524SHoward Hinnant // destructor 3153e519524SHoward Hinnant virtual ~ios_base(); 3163e519524SHoward Hinnant 3173e519524SHoward Hinnant // 27.5.2.6 callbacks; 3183e519524SHoward Hinnant enum event { erase_event, imbue_event, copyfmt_event }; 3193e519524SHoward Hinnant typedef void (*event_callback)(event, ios_base&, int __index); 3203e519524SHoward Hinnant void register_callback(event_callback __fn, int __index); 3213e519524SHoward Hinnant 322feb80aa9SNikolas Klauser ios_base(const ios_base&) = delete; 323feb80aa9SNikolas Klauser ios_base& operator=(const ios_base&) = delete; 3243e519524SHoward Hinnant 3253e519524SHoward Hinnant static bool sync_with_stdio(bool __sync = true); 3263e519524SHoward Hinnant 327c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY iostate rdstate() const; 3283e519524SHoward Hinnant void clear(iostate __state = goodbit); 329c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state); 3303e519524SHoward Hinnant 331c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY bool good() const; 332c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY bool eof() const; 333c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY bool fail() const; 334c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY bool bad() const; 3353e519524SHoward Hinnant 336c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY iostate exceptions() const; 33704c63bdbSHoward Hinnant _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate); 3383e519524SHoward Hinnant 3393e519524SHoward Hinnant void __set_badbit_and_consider_rethrow(); 3403e519524SHoward Hinnant void __set_failbit_and_consider_rethrow(); 3413e519524SHoward Hinnant 342396145d0SLouis Dionne _LIBCPP_INLINE_VISIBILITY 343396145d0SLouis Dionne void __setstate_nothrow(iostate __state) 344396145d0SLouis Dionne { 345396145d0SLouis Dionne if (__rdbuf_) 346396145d0SLouis Dionne __rdstate_ |= __state; 347396145d0SLouis Dionne else 348396145d0SLouis Dionne __rdstate_ |= __state | ios_base::badbit; 349396145d0SLouis Dionne } 350396145d0SLouis Dionne 3513e519524SHoward Hinnantprotected: 3523030b2f1SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3533e519524SHoward Hinnant ios_base() {// purposefully does no initialization 3543e519524SHoward Hinnant } 3553e519524SHoward Hinnant 3563e519524SHoward Hinnant void init(void* __sb); 357dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY void* rdbuf() const {return __rdbuf_;} 3583e519524SHoward Hinnant 359dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 3603e519524SHoward Hinnant void rdbuf(void* __sb) 3613e519524SHoward Hinnant { 3623e519524SHoward Hinnant __rdbuf_ = __sb; 3633e519524SHoward Hinnant clear(); 3643e519524SHoward Hinnant } 3653e519524SHoward Hinnant 3663e519524SHoward Hinnant void __call_callbacks(event); 3673e519524SHoward Hinnant void copyfmt(const ios_base&); 3683e519524SHoward Hinnant void move(ios_base&); 3695d926bf1SHoward Hinnant void swap(ios_base&) _NOEXCEPT; 3703e519524SHoward Hinnant 371dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 3723e519524SHoward Hinnant void set_rdbuf(void* __sb) 3733e519524SHoward Hinnant { 3743e519524SHoward Hinnant __rdbuf_ = __sb; 3753e519524SHoward Hinnant } 3763e519524SHoward Hinnant 3773e519524SHoward Hinnantprivate: 3783e519524SHoward Hinnant // All data members must be scalars 3793e519524SHoward Hinnant fmtflags __fmtflags_; 3803e519524SHoward Hinnant streamsize __precision_; 3813e519524SHoward Hinnant streamsize __width_; 3823e519524SHoward Hinnant iostate __rdstate_; 3833e519524SHoward Hinnant iostate __exceptions_; 3843e519524SHoward Hinnant void* __rdbuf_; 3853e519524SHoward Hinnant void* __loc_; 3863e519524SHoward Hinnant event_callback* __fn_; 3873e519524SHoward Hinnant int* __index_; 3883e519524SHoward Hinnant size_t __event_size_; 3893e519524SHoward Hinnant size_t __event_cap_; 390749adebaSEric Fiselier// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only 391749adebaSEric Fiselier// enabled with clang. 392749adebaSEric Fiselier#if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS) 393f28fd284SMarshall Clow static atomic<int> __xindex_; 394f28fd284SMarshall Clow#else 3953e519524SHoward Hinnant static int __xindex_; 396f28fd284SMarshall Clow#endif 3973e519524SHoward Hinnant long* __iarray_; 3983e519524SHoward Hinnant size_t __iarray_size_; 3993e519524SHoward Hinnant size_t __iarray_cap_; 4003e519524SHoward Hinnant void** __parray_; 4013e519524SHoward Hinnant size_t __parray_size_; 4023e519524SHoward Hinnant size_t __parray_cap_; 4033e519524SHoward Hinnant}; 4043e519524SHoward Hinnant 4053e519524SHoward Hinnant//enum class io_errc 40675689c10SHoward Hinnant_LIBCPP_DECLARE_STRONG_ENUM(io_errc) 4073e519524SHoward Hinnant{ 4083e519524SHoward Hinnant stream = 1 4093e519524SHoward Hinnant}; 41075689c10SHoward Hinnant_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc) 4113e519524SHoward Hinnant 4123030b2f1SHoward Hinnanttemplate <> 413e2f2d1edSEric Fiselierstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type { }; 41475689c10SHoward Hinnant 41593b33390SMark de Wever#ifdef _LIBCPP_CXX03_LANG 4163030b2f1SHoward Hinnanttemplate <> 417e2f2d1edSEric Fiselierstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type { }; 41875689c10SHoward Hinnant#endif 4193e519524SHoward Hinnant 4206e41256fSHoward Hinnant_LIBCPP_FUNC_VIS 421c3776b1cSMarshall Clowconst error_category& iostream_category() _NOEXCEPT; 4223e519524SHoward Hinnant 4233e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4243e519524SHoward Hinnanterror_code 425c3776b1cSMarshall Clowmake_error_code(io_errc __e) _NOEXCEPT 4263e519524SHoward Hinnant{ 4273e519524SHoward Hinnant return error_code(static_cast<int>(__e), iostream_category()); 4283e519524SHoward Hinnant} 4293e519524SHoward Hinnant 4303e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4313e519524SHoward Hinnanterror_condition 432c3776b1cSMarshall Clowmake_error_condition(io_errc __e) _NOEXCEPT 4333e519524SHoward Hinnant{ 4343e519524SHoward Hinnant return error_condition(static_cast<int>(__e), iostream_category()); 4353e519524SHoward Hinnant} 4363e519524SHoward Hinnant 4373030b2f1SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI ios_base::failure 4383e519524SHoward Hinnant : public system_error 4393e519524SHoward Hinnant{ 4403e519524SHoward Hinnantpublic: 4413e519524SHoward Hinnant explicit failure(const string& __msg, const error_code& __ec = io_errc::stream); 4423e519524SHoward Hinnant explicit failure(const char* __msg, const error_code& __ec = io_errc::stream); 443585a3cc3SDimitry Andric failure(const failure&) _NOEXCEPT = default; 444585a3cc3SDimitry Andric virtual ~failure() _NOEXCEPT; 4453e519524SHoward Hinnant}; 4463e519524SHoward Hinnant 4477232a84eSLouis Dionne_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 4487232a84eSLouis Dionnevoid __throw_failure(char const* __msg) { 4497232a84eSLouis Dionne#ifndef _LIBCPP_NO_EXCEPTIONS 4507232a84eSLouis Dionne throw ios_base::failure(__msg); 4517232a84eSLouis Dionne#else 4527232a84eSLouis Dionne ((void)__msg); 4537232a84eSLouis Dionne _VSTD::abort(); 4547232a84eSLouis Dionne#endif 4557232a84eSLouis Dionne} 4567232a84eSLouis Dionne 4576e41256fSHoward Hinnantclass _LIBCPP_TYPE_VIS ios_base::Init 4583e519524SHoward Hinnant{ 4593e519524SHoward Hinnantpublic: 4603e519524SHoward Hinnant Init(); 4613e519524SHoward Hinnant ~Init(); 4623e519524SHoward Hinnant}; 4633e519524SHoward Hinnant 4643e519524SHoward Hinnant// fmtflags 4653e519524SHoward Hinnant 4663e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4673e519524SHoward Hinnantios_base::fmtflags 4683e519524SHoward Hinnantios_base::flags() const 4693e519524SHoward Hinnant{ 4703e519524SHoward Hinnant return __fmtflags_; 4713e519524SHoward Hinnant} 4723e519524SHoward Hinnant 4733e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4743e519524SHoward Hinnantios_base::fmtflags 4753e519524SHoward Hinnantios_base::flags(fmtflags __fmtfl) 4763e519524SHoward Hinnant{ 4773e519524SHoward Hinnant fmtflags __r = __fmtflags_; 4783e519524SHoward Hinnant __fmtflags_ = __fmtfl; 4793e519524SHoward Hinnant return __r; 4803e519524SHoward Hinnant} 4813e519524SHoward Hinnant 4823e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4833e519524SHoward Hinnantios_base::fmtflags 4843e519524SHoward Hinnantios_base::setf(fmtflags __fmtfl) 4853e519524SHoward Hinnant{ 4863e519524SHoward Hinnant fmtflags __r = __fmtflags_; 4873e519524SHoward Hinnant __fmtflags_ |= __fmtfl; 4883e519524SHoward Hinnant return __r; 4893e519524SHoward Hinnant} 4903e519524SHoward Hinnant 4913e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4923e519524SHoward Hinnantvoid 4933e519524SHoward Hinnantios_base::unsetf(fmtflags __mask) 4943e519524SHoward Hinnant{ 4953e519524SHoward Hinnant __fmtflags_ &= ~__mask; 4963e519524SHoward Hinnant} 4973e519524SHoward Hinnant 4983e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4993e519524SHoward Hinnantios_base::fmtflags 5003e519524SHoward Hinnantios_base::setf(fmtflags __fmtfl, fmtflags __mask) 5013e519524SHoward Hinnant{ 5023e519524SHoward Hinnant fmtflags __r = __fmtflags_; 5033e519524SHoward Hinnant unsetf(__mask); 5043e519524SHoward Hinnant __fmtflags_ |= __fmtfl & __mask; 5053e519524SHoward Hinnant return __r; 5063e519524SHoward Hinnant} 5073e519524SHoward Hinnant 5083e519524SHoward Hinnant// precision 5093e519524SHoward Hinnant 5103e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5113e519524SHoward Hinnantstreamsize 5123e519524SHoward Hinnantios_base::precision() const 5133e519524SHoward Hinnant{ 5143e519524SHoward Hinnant return __precision_; 5153e519524SHoward Hinnant} 5163e519524SHoward Hinnant 5173e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5183e519524SHoward Hinnantstreamsize 5193e519524SHoward Hinnantios_base::precision(streamsize __prec) 5203e519524SHoward Hinnant{ 5213e519524SHoward Hinnant streamsize __r = __precision_; 5223e519524SHoward Hinnant __precision_ = __prec; 5233e519524SHoward Hinnant return __r; 5243e519524SHoward Hinnant} 5253e519524SHoward Hinnant 5263e519524SHoward Hinnant// width 5273e519524SHoward Hinnant 5283e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5293e519524SHoward Hinnantstreamsize 5303e519524SHoward Hinnantios_base::width() const 5313e519524SHoward Hinnant{ 5323e519524SHoward Hinnant return __width_; 5333e519524SHoward Hinnant} 5343e519524SHoward Hinnant 5353e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5363e519524SHoward Hinnantstreamsize 5373e519524SHoward Hinnantios_base::width(streamsize __wide) 5383e519524SHoward Hinnant{ 5393e519524SHoward Hinnant streamsize __r = __width_; 5403e519524SHoward Hinnant __width_ = __wide; 5413e519524SHoward Hinnant return __r; 5423e519524SHoward Hinnant} 5433e519524SHoward Hinnant 5443e519524SHoward Hinnant// iostate 5453e519524SHoward Hinnant 5463e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5473e519524SHoward Hinnantios_base::iostate 5483e519524SHoward Hinnantios_base::rdstate() const 5493e519524SHoward Hinnant{ 5503e519524SHoward Hinnant return __rdstate_; 5513e519524SHoward Hinnant} 5523e519524SHoward Hinnant 5533e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5543e519524SHoward Hinnantvoid 5553e519524SHoward Hinnantios_base::setstate(iostate __state) 5563e519524SHoward Hinnant{ 5573e519524SHoward Hinnant clear(__rdstate_ | __state); 5583e519524SHoward Hinnant} 5593e519524SHoward Hinnant 5603e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5613e519524SHoward Hinnantbool 5623e519524SHoward Hinnantios_base::good() const 5633e519524SHoward Hinnant{ 5643e519524SHoward Hinnant return __rdstate_ == 0; 5653e519524SHoward Hinnant} 5663e519524SHoward Hinnant 5673e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5683e519524SHoward Hinnantbool 5693e519524SHoward Hinnantios_base::eof() const 5703e519524SHoward Hinnant{ 5715b40666cSMarshall Clow return (__rdstate_ & eofbit) != 0; 5723e519524SHoward Hinnant} 5733e519524SHoward Hinnant 5743e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5753e519524SHoward Hinnantbool 5763e519524SHoward Hinnantios_base::fail() const 5773e519524SHoward Hinnant{ 5785b40666cSMarshall Clow return (__rdstate_ & (failbit | badbit)) != 0; 5793e519524SHoward Hinnant} 5803e519524SHoward Hinnant 5813e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5823e519524SHoward Hinnantbool 5833e519524SHoward Hinnantios_base::bad() const 5843e519524SHoward Hinnant{ 5855b40666cSMarshall Clow return (__rdstate_ & badbit) != 0; 5863e519524SHoward Hinnant} 5873e519524SHoward Hinnant 5883e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5893e519524SHoward Hinnantios_base::iostate 5903e519524SHoward Hinnantios_base::exceptions() const 5913e519524SHoward Hinnant{ 5923e519524SHoward Hinnant return __exceptions_; 5933e519524SHoward Hinnant} 5943e519524SHoward Hinnant 5953e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 5963e519524SHoward Hinnantvoid 59704c63bdbSHoward Hinnantios_base::exceptions(iostate __iostate) 5983e519524SHoward Hinnant{ 59904c63bdbSHoward Hinnant __exceptions_ = __iostate; 6003e519524SHoward Hinnant clear(__rdstate_); 6013e519524SHoward Hinnant} 6023e519524SHoward Hinnant 6033e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 604e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS basic_ios 6053e519524SHoward Hinnant : public ios_base 6063e519524SHoward Hinnant{ 6073e519524SHoward Hinnantpublic: 6083e519524SHoward Hinnant // types: 6093e519524SHoward Hinnant typedef _CharT char_type; 6103e519524SHoward Hinnant typedef _Traits traits_type; 6113e519524SHoward Hinnant 6123e519524SHoward Hinnant typedef typename traits_type::int_type int_type; 6133e519524SHoward Hinnant typedef typename traits_type::pos_type pos_type; 6143e519524SHoward Hinnant typedef typename traits_type::off_type off_type; 6153e519524SHoward Hinnant 6161a6493b4SMarshall Clow static_assert((is_same<_CharT, typename traits_type::char_type>::value), 6171a6493b4SMarshall Clow "traits_type::char_type must be the same type as CharT"); 6181a6493b4SMarshall Clow 619c1a8f128SArthur O'Dwyer#ifdef _LIBCPP_CXX03_LANG 620c1a8f128SArthur O'Dwyer // Preserve the ability to compare with literal 0, 621c1a8f128SArthur O'Dwyer // and implicitly convert to bool, but not implicitly convert to int. 622c1a8f128SArthur O'Dwyer _LIBCPP_INLINE_VISIBILITY 623c1a8f128SArthur O'Dwyer operator void*() const {return fail() ? nullptr : (void*)this;} 624c1a8f128SArthur O'Dwyer#else 625dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 626317e92a3SArthur O'Dwyer explicit operator bool() const {return !fail();} 627c1a8f128SArthur O'Dwyer#endif 6281b06dfe7SEric Fiselier 629dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY bool operator!() const {return fail();} 630dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY iostate rdstate() const {return ios_base::rdstate();} 631dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY void clear(iostate __state = goodbit) {ios_base::clear(__state);} 632dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state) {ios_base::setstate(__state);} 633dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY bool good() const {return ios_base::good();} 634dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY bool eof() const {return ios_base::eof();} 635dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY bool fail() const {return ios_base::fail();} 636dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY bool bad() const {return ios_base::bad();} 6373e519524SHoward Hinnant 638dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY iostate exceptions() const {return ios_base::exceptions();} 639dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate) {ios_base::exceptions(__iostate);} 6403e519524SHoward Hinnant 6413e519524SHoward Hinnant // 27.5.4.1 Constructor/destructor: 642c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6433e519524SHoward Hinnant explicit basic_ios(basic_streambuf<char_type,traits_type>* __sb); 6443e519524SHoward Hinnant virtual ~basic_ios(); 6453e519524SHoward Hinnant 6463e519524SHoward Hinnant // 27.5.4.2 Members: 647c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6483e519524SHoward Hinnant basic_ostream<char_type, traits_type>* tie() const; 649c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6503e519524SHoward Hinnant basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr); 6513e519524SHoward Hinnant 652c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6533e519524SHoward Hinnant basic_streambuf<char_type, traits_type>* rdbuf() const; 654c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6553e519524SHoward Hinnant basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb); 6563e519524SHoward Hinnant 6573e519524SHoward Hinnant basic_ios& copyfmt(const basic_ios& __rhs); 6583e519524SHoward Hinnant 659c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6603e519524SHoward Hinnant char_type fill() const; 661c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6623e519524SHoward Hinnant char_type fill(char_type __ch); 6633e519524SHoward Hinnant 664c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6653e519524SHoward Hinnant locale imbue(const locale& __loc); 6663e519524SHoward Hinnant 667c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6683e519524SHoward Hinnant char narrow(char_type __c, char __dfault) const; 669c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6703e519524SHoward Hinnant char_type widen(char __c) const; 6713e519524SHoward Hinnant 6723e519524SHoward Hinnantprotected: 673dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 6743e519524SHoward Hinnant basic_ios() {// purposefully does no initialization 6753e519524SHoward Hinnant } 676c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6773e519524SHoward Hinnant void init(basic_streambuf<char_type, traits_type>* __sb); 6783e519524SHoward Hinnant 679c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6803e519524SHoward Hinnant void move(basic_ios& __rhs); 681dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 6823e519524SHoward Hinnant void move(basic_ios&& __rhs) {move(__rhs);} 683c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6845d926bf1SHoward Hinnant void swap(basic_ios& __rhs) _NOEXCEPT; 685c950e77dSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 6863e519524SHoward Hinnant void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb); 6873e519524SHoward Hinnantprivate: 6883e519524SHoward Hinnant basic_ostream<char_type, traits_type>* __tie_; 6893320c058SHoward Hinnant mutable int_type __fill_; 6903e519524SHoward Hinnant}; 6913e519524SHoward Hinnant 6923e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 6933e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 6943e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type,traits_type>* __sb) 6953e519524SHoward Hinnant{ 6963e519524SHoward Hinnant init(__sb); 6973e519524SHoward Hinnant} 6983e519524SHoward Hinnant 6993e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7003e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::~basic_ios() 7013e519524SHoward Hinnant{ 7023e519524SHoward Hinnant} 7033e519524SHoward Hinnant 7043e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7053e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7063e519524SHoward Hinnantvoid 7073e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb) 7083e519524SHoward Hinnant{ 7093e519524SHoward Hinnant ios_base::init(__sb); 710527a7fdfSBruce Mitchener __tie_ = nullptr; 7113320c058SHoward Hinnant __fill_ = traits_type::eof(); 7123e519524SHoward Hinnant} 7133e519524SHoward Hinnant 7143e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7153e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7163e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>* 7173e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::tie() const 7183e519524SHoward Hinnant{ 7193e519524SHoward Hinnant return __tie_; 7203e519524SHoward Hinnant} 7213e519524SHoward Hinnant 7223e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7233e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7243e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>* 7253e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr) 7263e519524SHoward Hinnant{ 7273e519524SHoward Hinnant basic_ostream<char_type, traits_type>* __r = __tie_; 7283e519524SHoward Hinnant __tie_ = __tiestr; 7293e519524SHoward Hinnant return __r; 7303e519524SHoward Hinnant} 7313e519524SHoward Hinnant 7323e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7333e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7343e519524SHoward Hinnantbasic_streambuf<_CharT, _Traits>* 7353e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::rdbuf() const 7363e519524SHoward Hinnant{ 7373e519524SHoward Hinnant return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf()); 7383e519524SHoward Hinnant} 7393e519524SHoward Hinnant 7403e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7413e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7423e519524SHoward Hinnantbasic_streambuf<_CharT, _Traits>* 7433e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb) 7443e519524SHoward Hinnant{ 7453e519524SHoward Hinnant basic_streambuf<char_type, traits_type>* __r = rdbuf(); 7463e519524SHoward Hinnant ios_base::rdbuf(__sb); 7473e519524SHoward Hinnant return __r; 7483e519524SHoward Hinnant} 7493e519524SHoward Hinnant 7503e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7513e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7523e519524SHoward Hinnantlocale 7533e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::imbue(const locale& __loc) 7543e519524SHoward Hinnant{ 7553e519524SHoward Hinnant locale __r = getloc(); 7563e519524SHoward Hinnant ios_base::imbue(__loc); 7573e519524SHoward Hinnant if (rdbuf()) 7583e519524SHoward Hinnant rdbuf()->pubimbue(__loc); 7593e519524SHoward Hinnant return __r; 7603e519524SHoward Hinnant} 7613e519524SHoward Hinnant 7623e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7633e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7643e519524SHoward Hinnantchar 7653e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const 7663e519524SHoward Hinnant{ 7673e519524SHoward Hinnant return use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault); 7683e519524SHoward Hinnant} 7693e519524SHoward Hinnant 7703e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7713e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7723e519524SHoward Hinnant_CharT 7733e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::widen(char __c) const 7743e519524SHoward Hinnant{ 7753e519524SHoward Hinnant return use_facet<ctype<char_type> >(getloc()).widen(__c); 7763e519524SHoward Hinnant} 7773e519524SHoward Hinnant 7783e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7793e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7803e519524SHoward Hinnant_CharT 7813e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::fill() const 7823e519524SHoward Hinnant{ 7833320c058SHoward Hinnant if (traits_type::eq_int_type(traits_type::eof(), __fill_)) 7843320c058SHoward Hinnant __fill_ = widen(' '); 7853e519524SHoward Hinnant return __fill_; 7863e519524SHoward Hinnant} 7873e519524SHoward Hinnant 7883e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7893e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 7903e519524SHoward Hinnant_CharT 7913e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::fill(char_type __ch) 7923e519524SHoward Hinnant{ 7933e877191SJake Egan if (traits_type::eq_int_type(traits_type::eof(), __fill_)) 7943e877191SJake Egan __fill_ = widen(' '); 7953e519524SHoward Hinnant char_type __r = __fill_; 7963e519524SHoward Hinnant __fill_ = __ch; 7973e519524SHoward Hinnant return __r; 7983e519524SHoward Hinnant} 7993e519524SHoward Hinnant 8003e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 8013e519524SHoward Hinnantbasic_ios<_CharT, _Traits>& 8023e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) 8033e519524SHoward Hinnant{ 8043e519524SHoward Hinnant if (this != &__rhs) 8053e519524SHoward Hinnant { 8063e519524SHoward Hinnant __call_callbacks(erase_event); 8073e519524SHoward Hinnant ios_base::copyfmt(__rhs); 8083e519524SHoward Hinnant __tie_ = __rhs.__tie_; 8093e519524SHoward Hinnant __fill_ = __rhs.__fill_; 8103e519524SHoward Hinnant __call_callbacks(copyfmt_event); 8113e519524SHoward Hinnant exceptions(__rhs.exceptions()); 8123e519524SHoward Hinnant } 8133e519524SHoward Hinnant return *this; 8143e519524SHoward Hinnant} 8153e519524SHoward Hinnant 8163e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 8173e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 8183e519524SHoward Hinnantvoid 8193e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::move(basic_ios& __rhs) 8203e519524SHoward Hinnant{ 8213e519524SHoward Hinnant ios_base::move(__rhs); 8223e519524SHoward Hinnant __tie_ = __rhs.__tie_; 823527a7fdfSBruce Mitchener __rhs.__tie_ = nullptr; 8243e519524SHoward Hinnant __fill_ = __rhs.__fill_; 8253e519524SHoward Hinnant} 8263e519524SHoward Hinnant 8273e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 8283e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 8293e519524SHoward Hinnantvoid 8305d926bf1SHoward Hinnantbasic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT 8313e519524SHoward Hinnant{ 8323e519524SHoward Hinnant ios_base::swap(__rhs); 833ce48a113SHoward Hinnant _VSTD::swap(__tie_, __rhs.__tie_); 834ce48a113SHoward Hinnant _VSTD::swap(__fill_, __rhs.__fill_); 8353e519524SHoward Hinnant} 8363e519524SHoward Hinnant 8373e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 8383e519524SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 8393e519524SHoward Hinnantvoid 8403e519524SHoward Hinnantbasic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb) 8413e519524SHoward Hinnant{ 8423e519524SHoward Hinnant ios_base::set_rdbuf(__sb); 8433e519524SHoward Hinnant} 8443e519524SHoward Hinnant 8452d3b8cc8SLouis Dionneinline 8463e519524SHoward Hinnantios_base& 8473e519524SHoward Hinnantboolalpha(ios_base& __str) 8483e519524SHoward Hinnant{ 8493e519524SHoward Hinnant __str.setf(ios_base::boolalpha); 8503e519524SHoward Hinnant return __str; 8513e519524SHoward Hinnant} 8523e519524SHoward Hinnant 8532d3b8cc8SLouis Dionneinline 8543e519524SHoward Hinnantios_base& 8553e519524SHoward Hinnantnoboolalpha(ios_base& __str) 8563e519524SHoward Hinnant{ 8573e519524SHoward Hinnant __str.unsetf(ios_base::boolalpha); 8583e519524SHoward Hinnant return __str; 8593e519524SHoward Hinnant} 8603e519524SHoward Hinnant 8612d3b8cc8SLouis Dionneinline 8623e519524SHoward Hinnantios_base& 8633e519524SHoward Hinnantshowbase(ios_base& __str) 8643e519524SHoward Hinnant{ 8653e519524SHoward Hinnant __str.setf(ios_base::showbase); 8663e519524SHoward Hinnant return __str; 8673e519524SHoward Hinnant} 8683e519524SHoward Hinnant 8692d3b8cc8SLouis Dionneinline 8703e519524SHoward Hinnantios_base& 8713e519524SHoward Hinnantnoshowbase(ios_base& __str) 8723e519524SHoward Hinnant{ 8733e519524SHoward Hinnant __str.unsetf(ios_base::showbase); 8743e519524SHoward Hinnant return __str; 8753e519524SHoward Hinnant} 8763e519524SHoward Hinnant 8772d3b8cc8SLouis Dionneinline 8783e519524SHoward Hinnantios_base& 8793e519524SHoward Hinnantshowpoint(ios_base& __str) 8803e519524SHoward Hinnant{ 8813e519524SHoward Hinnant __str.setf(ios_base::showpoint); 8823e519524SHoward Hinnant return __str; 8833e519524SHoward Hinnant} 8843e519524SHoward Hinnant 8852d3b8cc8SLouis Dionneinline 8863e519524SHoward Hinnantios_base& 8873e519524SHoward Hinnantnoshowpoint(ios_base& __str) 8883e519524SHoward Hinnant{ 8893e519524SHoward Hinnant __str.unsetf(ios_base::showpoint); 8903e519524SHoward Hinnant return __str; 8913e519524SHoward Hinnant} 8923e519524SHoward Hinnant 8932d3b8cc8SLouis Dionneinline 8943e519524SHoward Hinnantios_base& 8953e519524SHoward Hinnantshowpos(ios_base& __str) 8963e519524SHoward Hinnant{ 8973e519524SHoward Hinnant __str.setf(ios_base::showpos); 8983e519524SHoward Hinnant return __str; 8993e519524SHoward Hinnant} 9003e519524SHoward Hinnant 9012d3b8cc8SLouis Dionneinline 9023e519524SHoward Hinnantios_base& 9033e519524SHoward Hinnantnoshowpos(ios_base& __str) 9043e519524SHoward Hinnant{ 9053e519524SHoward Hinnant __str.unsetf(ios_base::showpos); 9063e519524SHoward Hinnant return __str; 9073e519524SHoward Hinnant} 9083e519524SHoward Hinnant 9092d3b8cc8SLouis Dionneinline 9103e519524SHoward Hinnantios_base& 9113e519524SHoward Hinnantskipws(ios_base& __str) 9123e519524SHoward Hinnant{ 9133e519524SHoward Hinnant __str.setf(ios_base::skipws); 9143e519524SHoward Hinnant return __str; 9153e519524SHoward Hinnant} 9163e519524SHoward Hinnant 9172d3b8cc8SLouis Dionneinline 9183e519524SHoward Hinnantios_base& 9193e519524SHoward Hinnantnoskipws(ios_base& __str) 9203e519524SHoward Hinnant{ 9213e519524SHoward Hinnant __str.unsetf(ios_base::skipws); 9223e519524SHoward Hinnant return __str; 9233e519524SHoward Hinnant} 9243e519524SHoward Hinnant 9252d3b8cc8SLouis Dionneinline 9263e519524SHoward Hinnantios_base& 9273e519524SHoward Hinnantuppercase(ios_base& __str) 9283e519524SHoward Hinnant{ 9293e519524SHoward Hinnant __str.setf(ios_base::uppercase); 9303e519524SHoward Hinnant return __str; 9313e519524SHoward Hinnant} 9323e519524SHoward Hinnant 9332d3b8cc8SLouis Dionneinline 9343e519524SHoward Hinnantios_base& 9353e519524SHoward Hinnantnouppercase(ios_base& __str) 9363e519524SHoward Hinnant{ 9373e519524SHoward Hinnant __str.unsetf(ios_base::uppercase); 9383e519524SHoward Hinnant return __str; 9393e519524SHoward Hinnant} 9403e519524SHoward Hinnant 9412d3b8cc8SLouis Dionneinline 9423e519524SHoward Hinnantios_base& 9433e519524SHoward Hinnantunitbuf(ios_base& __str) 9443e519524SHoward Hinnant{ 9453e519524SHoward Hinnant __str.setf(ios_base::unitbuf); 9463e519524SHoward Hinnant return __str; 9473e519524SHoward Hinnant} 9483e519524SHoward Hinnant 9492d3b8cc8SLouis Dionneinline 9503e519524SHoward Hinnantios_base& 9513e519524SHoward Hinnantnounitbuf(ios_base& __str) 9523e519524SHoward Hinnant{ 9533e519524SHoward Hinnant __str.unsetf(ios_base::unitbuf); 9543e519524SHoward Hinnant return __str; 9553e519524SHoward Hinnant} 9563e519524SHoward Hinnant 9572d3b8cc8SLouis Dionneinline 9583e519524SHoward Hinnantios_base& 9593e519524SHoward Hinnantinternal(ios_base& __str) 9603e519524SHoward Hinnant{ 9613e519524SHoward Hinnant __str.setf(ios_base::internal, ios_base::adjustfield); 9623e519524SHoward Hinnant return __str; 9633e519524SHoward Hinnant} 9643e519524SHoward Hinnant 9652d3b8cc8SLouis Dionneinline 9663e519524SHoward Hinnantios_base& 9673e519524SHoward Hinnantleft(ios_base& __str) 9683e519524SHoward Hinnant{ 9693e519524SHoward Hinnant __str.setf(ios_base::left, ios_base::adjustfield); 9703e519524SHoward Hinnant return __str; 9713e519524SHoward Hinnant} 9723e519524SHoward Hinnant 9732d3b8cc8SLouis Dionneinline 9743e519524SHoward Hinnantios_base& 9753e519524SHoward Hinnantright(ios_base& __str) 9763e519524SHoward Hinnant{ 9773e519524SHoward Hinnant __str.setf(ios_base::right, ios_base::adjustfield); 9783e519524SHoward Hinnant return __str; 9793e519524SHoward Hinnant} 9803e519524SHoward Hinnant 9812d3b8cc8SLouis Dionneinline 9823e519524SHoward Hinnantios_base& 9833e519524SHoward Hinnantdec(ios_base& __str) 9843e519524SHoward Hinnant{ 9853e519524SHoward Hinnant __str.setf(ios_base::dec, ios_base::basefield); 9863e519524SHoward Hinnant return __str; 9873e519524SHoward Hinnant} 9883e519524SHoward Hinnant 9892d3b8cc8SLouis Dionneinline 9903e519524SHoward Hinnantios_base& 9913e519524SHoward Hinnanthex(ios_base& __str) 9923e519524SHoward Hinnant{ 9933e519524SHoward Hinnant __str.setf(ios_base::hex, ios_base::basefield); 9943e519524SHoward Hinnant return __str; 9953e519524SHoward Hinnant} 9963e519524SHoward Hinnant 9972d3b8cc8SLouis Dionneinline 9983e519524SHoward Hinnantios_base& 9993e519524SHoward Hinnantoct(ios_base& __str) 10003e519524SHoward Hinnant{ 10013e519524SHoward Hinnant __str.setf(ios_base::oct, ios_base::basefield); 10023e519524SHoward Hinnant return __str; 10033e519524SHoward Hinnant} 10043e519524SHoward Hinnant 10052d3b8cc8SLouis Dionneinline 10063e519524SHoward Hinnantios_base& 10073e519524SHoward Hinnantfixed(ios_base& __str) 10083e519524SHoward Hinnant{ 10093e519524SHoward Hinnant __str.setf(ios_base::fixed, ios_base::floatfield); 10103e519524SHoward Hinnant return __str; 10113e519524SHoward Hinnant} 10123e519524SHoward Hinnant 10132d3b8cc8SLouis Dionneinline 10143e519524SHoward Hinnantios_base& 10153e519524SHoward Hinnantscientific(ios_base& __str) 10163e519524SHoward Hinnant{ 10173e519524SHoward Hinnant __str.setf(ios_base::scientific, ios_base::floatfield); 10183e519524SHoward Hinnant return __str; 10193e519524SHoward Hinnant} 10203e519524SHoward Hinnant 10212d3b8cc8SLouis Dionneinline 10223e519524SHoward Hinnantios_base& 10233e519524SHoward Hinnanthexfloat(ios_base& __str) 10243e519524SHoward Hinnant{ 10253e519524SHoward Hinnant __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); 10263e519524SHoward Hinnant return __str; 10273e519524SHoward Hinnant} 10283e519524SHoward Hinnant 10292d3b8cc8SLouis Dionneinline 10303e519524SHoward Hinnantios_base& 10313e519524SHoward Hinnantdefaultfloat(ios_base& __str) 10323e519524SHoward Hinnant{ 10333e519524SHoward Hinnant __str.unsetf(ios_base::floatfield); 10343e519524SHoward Hinnant return __str; 10353e519524SHoward Hinnant} 10363e519524SHoward Hinnant 10373e519524SHoward Hinnant_LIBCPP_END_NAMESPACE_STD 10383e519524SHoward Hinnant 10393e519524SHoward Hinnant#endif // _LIBCPP_IOS 1040