10b57cec5SDimitry Andric// -*- C++ -*- 2349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 30b57cec5SDimitry Andric// 40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70b57cec5SDimitry Andric// 80b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 90b57cec5SDimitry Andric 100b57cec5SDimitry Andric#ifndef _LIBCPP_IOS 110b57cec5SDimitry Andric#define _LIBCPP_IOS 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric/* 140b57cec5SDimitry Andric ios synopsis 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric#include <iosfwd> 170b57cec5SDimitry Andric 180b57cec5SDimitry Andricnamespace std 190b57cec5SDimitry Andric{ 200b57cec5SDimitry Andric 210b57cec5SDimitry Andrictypedef OFF_T streamoff; 220b57cec5SDimitry Andrictypedef SZ_T streamsize; 230b57cec5SDimitry Andrictemplate <class stateT> class fpos; 240b57cec5SDimitry Andric 250b57cec5SDimitry Andricclass ios_base 260b57cec5SDimitry Andric{ 270b57cec5SDimitry Andricpublic: 280b57cec5SDimitry Andric class failure; 290b57cec5SDimitry Andric 300b57cec5SDimitry Andric typedef T1 fmtflags; 310b57cec5SDimitry Andric static constexpr fmtflags boolalpha; 320b57cec5SDimitry Andric static constexpr fmtflags dec; 330b57cec5SDimitry Andric static constexpr fmtflags fixed; 340b57cec5SDimitry Andric static constexpr fmtflags hex; 350b57cec5SDimitry Andric static constexpr fmtflags internal; 360b57cec5SDimitry Andric static constexpr fmtflags left; 370b57cec5SDimitry Andric static constexpr fmtflags oct; 380b57cec5SDimitry Andric static constexpr fmtflags right; 390b57cec5SDimitry Andric static constexpr fmtflags scientific; 400b57cec5SDimitry Andric static constexpr fmtflags showbase; 410b57cec5SDimitry Andric static constexpr fmtflags showpoint; 420b57cec5SDimitry Andric static constexpr fmtflags showpos; 430b57cec5SDimitry Andric static constexpr fmtflags skipws; 440b57cec5SDimitry Andric static constexpr fmtflags unitbuf; 450b57cec5SDimitry Andric static constexpr fmtflags uppercase; 460b57cec5SDimitry Andric static constexpr fmtflags adjustfield; 470b57cec5SDimitry Andric static constexpr fmtflags basefield; 480b57cec5SDimitry Andric static constexpr fmtflags floatfield; 490b57cec5SDimitry Andric 500b57cec5SDimitry Andric typedef T2 iostate; 510b57cec5SDimitry Andric static constexpr iostate badbit; 520b57cec5SDimitry Andric static constexpr iostate eofbit; 530b57cec5SDimitry Andric static constexpr iostate failbit; 540b57cec5SDimitry Andric static constexpr iostate goodbit; 550b57cec5SDimitry Andric 560b57cec5SDimitry Andric typedef T3 openmode; 570b57cec5SDimitry Andric static constexpr openmode app; 580b57cec5SDimitry Andric static constexpr openmode ate; 590b57cec5SDimitry Andric static constexpr openmode binary; 600b57cec5SDimitry Andric static constexpr openmode in; 615f757f3fSDimitry Andric static constexpr openmode noreplace; // since C++23 620b57cec5SDimitry Andric static constexpr openmode out; 630b57cec5SDimitry Andric static constexpr openmode trunc; 640b57cec5SDimitry Andric 650b57cec5SDimitry Andric typedef T4 seekdir; 660b57cec5SDimitry Andric static constexpr seekdir beg; 670b57cec5SDimitry Andric static constexpr seekdir cur; 680b57cec5SDimitry Andric static constexpr seekdir end; 690b57cec5SDimitry Andric 700b57cec5SDimitry Andric class Init; 710b57cec5SDimitry Andric 720b57cec5SDimitry Andric // 27.5.2.2 fmtflags state: 730b57cec5SDimitry Andric fmtflags flags() const; 740b57cec5SDimitry Andric fmtflags flags(fmtflags fmtfl); 750b57cec5SDimitry Andric fmtflags setf(fmtflags fmtfl); 760b57cec5SDimitry Andric fmtflags setf(fmtflags fmtfl, fmtflags mask); 770b57cec5SDimitry Andric void unsetf(fmtflags mask); 780b57cec5SDimitry Andric 790b57cec5SDimitry Andric streamsize precision() const; 800b57cec5SDimitry Andric streamsize precision(streamsize prec); 810b57cec5SDimitry Andric streamsize width() const; 820b57cec5SDimitry Andric streamsize width(streamsize wide); 830b57cec5SDimitry Andric 840b57cec5SDimitry Andric // 27.5.2.3 locales: 850b57cec5SDimitry Andric locale imbue(const locale& loc); 860b57cec5SDimitry Andric locale getloc() const; 870b57cec5SDimitry Andric 880b57cec5SDimitry Andric // 27.5.2.5 storage: 890b57cec5SDimitry Andric static int xalloc(); 900b57cec5SDimitry Andric long& iword(int index); 910b57cec5SDimitry Andric void*& pword(int index); 920b57cec5SDimitry Andric 930b57cec5SDimitry Andric // destructor 940b57cec5SDimitry Andric virtual ~ios_base(); 950b57cec5SDimitry Andric 960b57cec5SDimitry Andric // 27.5.2.6 callbacks; 970b57cec5SDimitry Andric enum event { erase_event, imbue_event, copyfmt_event }; 980b57cec5SDimitry Andric typedef void (*event_callback)(event, ios_base&, int index); 990b57cec5SDimitry Andric void register_callback(event_callback fn, int index); 1000b57cec5SDimitry Andric 1010b57cec5SDimitry Andric ios_base(const ios_base&) = delete; 1020b57cec5SDimitry Andric ios_base& operator=(const ios_base&) = delete; 1030b57cec5SDimitry Andric 1040b57cec5SDimitry Andric static bool sync_with_stdio(bool sync = true); 1050b57cec5SDimitry Andric 1060b57cec5SDimitry Andricprotected: 1070b57cec5SDimitry Andric ios_base(); 1080b57cec5SDimitry Andric}; 1090b57cec5SDimitry Andric 1100b57cec5SDimitry Andrictemplate <class charT, class traits = char_traits<charT> > 1110b57cec5SDimitry Andricclass basic_ios 1120b57cec5SDimitry Andric : public ios_base 1130b57cec5SDimitry Andric{ 1140b57cec5SDimitry Andricpublic: 1150b57cec5SDimitry Andric // types: 1160b57cec5SDimitry Andric typedef charT char_type; 1170b57cec5SDimitry Andric typedef typename traits::int_type int_type; // removed in C++17 1180b57cec5SDimitry Andric typedef typename traits::pos_type pos_type; // removed in C++17 1190b57cec5SDimitry Andric typedef typename traits::off_type off_type; // removed in C++17 1200b57cec5SDimitry Andric typedef traits traits_type; 1210b57cec5SDimitry Andric 1220b57cec5SDimitry Andric operator unspecified-bool-type() const; 1230b57cec5SDimitry Andric bool operator!() const; 1240b57cec5SDimitry Andric iostate rdstate() const; 1250b57cec5SDimitry Andric void clear(iostate state = goodbit); 1260b57cec5SDimitry Andric void setstate(iostate state); 1270b57cec5SDimitry Andric bool good() const; 1280b57cec5SDimitry Andric bool eof() const; 1290b57cec5SDimitry Andric bool fail() const; 1300b57cec5SDimitry Andric bool bad() const; 1310b57cec5SDimitry Andric 1320b57cec5SDimitry Andric iostate exceptions() const; 1330b57cec5SDimitry Andric void exceptions(iostate except); 1340b57cec5SDimitry Andric 1350b57cec5SDimitry Andric // 27.5.4.1 Constructor/destructor: 1360b57cec5SDimitry Andric explicit basic_ios(basic_streambuf<charT,traits>* sb); 1370b57cec5SDimitry Andric virtual ~basic_ios(); 1380b57cec5SDimitry Andric 1390b57cec5SDimitry Andric // 27.5.4.2 Members: 1400b57cec5SDimitry Andric basic_ostream<charT,traits>* tie() const; 1410b57cec5SDimitry Andric basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr); 1420b57cec5SDimitry Andric 1430b57cec5SDimitry Andric basic_streambuf<charT,traits>* rdbuf() const; 1440b57cec5SDimitry Andric basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb); 1450b57cec5SDimitry Andric 1460b57cec5SDimitry Andric basic_ios& copyfmt(const basic_ios& rhs); 1470b57cec5SDimitry Andric 1480b57cec5SDimitry Andric char_type fill() const; 1490b57cec5SDimitry Andric char_type fill(char_type ch); 1500b57cec5SDimitry Andric 1510b57cec5SDimitry Andric locale imbue(const locale& loc); 1520b57cec5SDimitry Andric 1530b57cec5SDimitry Andric char narrow(char_type c, char dfault) const; 1540b57cec5SDimitry Andric char_type widen(char c) const; 1550b57cec5SDimitry Andric 1560b57cec5SDimitry Andric basic_ios(const basic_ios& ) = delete; 1570b57cec5SDimitry Andric basic_ios& operator=(const basic_ios&) = delete; 1580b57cec5SDimitry Andric 1590b57cec5SDimitry Andricprotected: 1600b57cec5SDimitry Andric basic_ios(); 1610b57cec5SDimitry Andric void init(basic_streambuf<charT,traits>* sb); 1620b57cec5SDimitry Andric void move(basic_ios& rhs); 1630b57cec5SDimitry Andric void swap(basic_ios& rhs) noexcept; 1640b57cec5SDimitry Andric void set_rdbuf(basic_streambuf<charT, traits>* sb); 1650b57cec5SDimitry Andric}; 1660b57cec5SDimitry Andric 1670b57cec5SDimitry Andric// 27.5.5, manipulators: 1680b57cec5SDimitry Andricios_base& boolalpha (ios_base& str); 1690b57cec5SDimitry Andricios_base& noboolalpha(ios_base& str); 1700b57cec5SDimitry Andricios_base& showbase (ios_base& str); 1710b57cec5SDimitry Andricios_base& noshowbase (ios_base& str); 1720b57cec5SDimitry Andricios_base& showpoint (ios_base& str); 1730b57cec5SDimitry Andricios_base& noshowpoint(ios_base& str); 1740b57cec5SDimitry Andricios_base& showpos (ios_base& str); 1750b57cec5SDimitry Andricios_base& noshowpos (ios_base& str); 1760b57cec5SDimitry Andricios_base& skipws (ios_base& str); 1770b57cec5SDimitry Andricios_base& noskipws (ios_base& str); 1780b57cec5SDimitry Andricios_base& uppercase (ios_base& str); 1790b57cec5SDimitry Andricios_base& nouppercase(ios_base& str); 1800b57cec5SDimitry Andricios_base& unitbuf (ios_base& str); 1810b57cec5SDimitry Andricios_base& nounitbuf (ios_base& str); 1820b57cec5SDimitry Andric 1830b57cec5SDimitry Andric// 27.5.5.2 adjustfield: 1840b57cec5SDimitry Andricios_base& internal (ios_base& str); 1850b57cec5SDimitry Andricios_base& left (ios_base& str); 1860b57cec5SDimitry Andricios_base& right (ios_base& str); 1870b57cec5SDimitry Andric 1880b57cec5SDimitry Andric// 27.5.5.3 basefield: 1890b57cec5SDimitry Andricios_base& dec (ios_base& str); 1900b57cec5SDimitry Andricios_base& hex (ios_base& str); 1910b57cec5SDimitry Andricios_base& oct (ios_base& str); 1920b57cec5SDimitry Andric 1930b57cec5SDimitry Andric// 27.5.5.4 floatfield: 1940b57cec5SDimitry Andricios_base& fixed (ios_base& str); 1950b57cec5SDimitry Andricios_base& scientific (ios_base& str); 1960b57cec5SDimitry Andricios_base& hexfloat (ios_base& str); 1970b57cec5SDimitry Andricios_base& defaultfloat(ios_base& str); 1980b57cec5SDimitry Andric 1990b57cec5SDimitry Andric// 27.5.5.5 error reporting: 2000b57cec5SDimitry Andricenum class io_errc 2010b57cec5SDimitry Andric{ 2020b57cec5SDimitry Andric stream = 1 2030b57cec5SDimitry Andric}; 2040b57cec5SDimitry Andric 2050b57cec5SDimitry Andricconcept_map ErrorCodeEnum<io_errc> { }; 2060b57cec5SDimitry Andricerror_code make_error_code(io_errc e) noexcept; 2070b57cec5SDimitry Andricerror_condition make_error_condition(io_errc e) noexcept; 2080b57cec5SDimitry Andricstorage-class-specifier const error_category& iostream_category() noexcept; 2090b57cec5SDimitry Andric 2100b57cec5SDimitry Andric} // std 2110b57cec5SDimitry Andric 2120b57cec5SDimitry Andric*/ 2130b57cec5SDimitry Andric 2140b57cec5SDimitry Andric#include <__config> 21581ad6265SDimitry Andric 216*0fca6ea1SDimitry Andric#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 21781ad6265SDimitry Andric 21806c3fb27SDimitry Andric# include <__fwd/ios.h> 21981ad6265SDimitry Andric# include <__ios/fpos.h> 2200b57cec5SDimitry Andric# include <__locale> 22106c3fb27SDimitry Andric# include <__system_error/error_category.h> 22206c3fb27SDimitry Andric# include <__system_error/error_code.h> 22306c3fb27SDimitry Andric# include <__system_error/error_condition.h> 22406c3fb27SDimitry Andric# include <__system_error/system_error.h> 22581ad6265SDimitry Andric# include <__utility/swap.h> 22606c3fb27SDimitry Andric# include <__verbose_abort> 22704eeddc0SDimitry Andric# include <version> 2280b57cec5SDimitry Andric 22981ad6265SDimitry Andric// standard-mandated includes 230bdd1243dSDimitry Andric 231bdd1243dSDimitry Andric// [ios.syn] 23281ad6265SDimitry Andric# include <iosfwd> 23381ad6265SDimitry Andric 2340b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER) 23506c3fb27SDimitry Andric# include <__atomic/atomic.h> // for __xindex_ 2360b57cec5SDimitry Andric# endif 2370b57cec5SDimitry Andric 2380b57cec5SDimitry Andric# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 2390b57cec5SDimitry Andric# pragma GCC system_header 2400b57cec5SDimitry Andric# endif 2410b57cec5SDimitry Andric 242b3edf446SDimitry Andric_LIBCPP_PUSH_MACROS 243b3edf446SDimitry Andric# include <__undef_macros> 244b3edf446SDimitry Andric 2450b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 2460b57cec5SDimitry Andric 2470b57cec5SDimitry Andrictypedef ptrdiff_t streamsize; 2480b57cec5SDimitry Andric 249cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI ios_base { 2500b57cec5SDimitry Andricpublic: 25106c3fb27SDimitry Andric class _LIBCPP_EXPORTED_FROM_ABI failure; 2520b57cec5SDimitry Andric 2530b57cec5SDimitry Andric typedef unsigned int fmtflags; 2540b57cec5SDimitry Andric static const fmtflags boolalpha = 0x0001; 2550b57cec5SDimitry Andric static const fmtflags dec = 0x0002; 2560b57cec5SDimitry Andric static const fmtflags fixed = 0x0004; 2570b57cec5SDimitry Andric static const fmtflags hex = 0x0008; 2580b57cec5SDimitry Andric static const fmtflags internal = 0x0010; 2590b57cec5SDimitry Andric static const fmtflags left = 0x0020; 2600b57cec5SDimitry Andric static const fmtflags oct = 0x0040; 2610b57cec5SDimitry Andric static const fmtflags right = 0x0080; 2620b57cec5SDimitry Andric static const fmtflags scientific = 0x0100; 2630b57cec5SDimitry Andric static const fmtflags showbase = 0x0200; 2640b57cec5SDimitry Andric static const fmtflags showpoint = 0x0400; 2650b57cec5SDimitry Andric static const fmtflags showpos = 0x0800; 2660b57cec5SDimitry Andric static const fmtflags skipws = 0x1000; 2670b57cec5SDimitry Andric static const fmtflags unitbuf = 0x2000; 2680b57cec5SDimitry Andric static const fmtflags uppercase = 0x4000; 2690b57cec5SDimitry Andric static const fmtflags adjustfield = left | right | internal; 2700b57cec5SDimitry Andric static const fmtflags basefield = dec | oct | hex; 2710b57cec5SDimitry Andric static const fmtflags floatfield = scientific | fixed; 2720b57cec5SDimitry Andric 2730b57cec5SDimitry Andric typedef unsigned int iostate; 2740b57cec5SDimitry Andric static const iostate badbit = 0x1; 2750b57cec5SDimitry Andric static const iostate eofbit = 0x2; 2760b57cec5SDimitry Andric static const iostate failbit = 0x4; 2770b57cec5SDimitry Andric static const iostate goodbit = 0x0; 2780b57cec5SDimitry Andric 2790b57cec5SDimitry Andric typedef unsigned int openmode; 2800b57cec5SDimitry Andric static const openmode app = 0x01; 2810b57cec5SDimitry Andric static const openmode ate = 0x02; 2820b57cec5SDimitry Andric static const openmode binary = 0x04; 2830b57cec5SDimitry Andric static const openmode in = 0x08; 2840b57cec5SDimitry Andric static const openmode out = 0x10; 2850b57cec5SDimitry Andric static const openmode trunc = 0x20; 2865f757f3fSDimitry Andric# if _LIBCPP_STD_VER >= 23 2875f757f3fSDimitry Andric static const openmode noreplace = 0x40; 2885f757f3fSDimitry Andric# endif 2890b57cec5SDimitry Andric 2900b57cec5SDimitry Andric enum seekdir { beg, cur, end }; 2910b57cec5SDimitry Andric 2920b57cec5SDimitry Andric# if _LIBCPP_STD_VER <= 14 2930b57cec5SDimitry Andric typedef iostate io_state; 2940b57cec5SDimitry Andric typedef openmode open_mode; 2950b57cec5SDimitry Andric typedef seekdir seek_dir; 2960b57cec5SDimitry Andric 2975f757f3fSDimitry Andric typedef std::streamoff streamoff; 2985f757f3fSDimitry Andric typedef std::streampos streampos; 2990b57cec5SDimitry Andric# endif 3000b57cec5SDimitry Andric 30106c3fb27SDimitry Andric class _LIBCPP_EXPORTED_FROM_ABI Init; 3020b57cec5SDimitry Andric 3030b57cec5SDimitry Andric // 27.5.2.2 fmtflags state: 3045f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI fmtflags flags() const; 3055f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI fmtflags flags(fmtflags __fmtfl); 3065f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI fmtflags setf(fmtflags __fmtfl); 3075f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI fmtflags setf(fmtflags __fmtfl, fmtflags __mask); 3085f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI void unsetf(fmtflags __mask); 3090b57cec5SDimitry Andric 3105f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI streamsize precision() const; 3115f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI streamsize precision(streamsize __prec); 3125f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI streamsize width() const; 3135f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI streamsize width(streamsize __wide); 3140b57cec5SDimitry Andric 3150b57cec5SDimitry Andric // 27.5.2.3 locales: 3160b57cec5SDimitry Andric locale imbue(const locale& __loc); 3170b57cec5SDimitry Andric locale getloc() const; 3180b57cec5SDimitry Andric 3190b57cec5SDimitry Andric // 27.5.2.5 storage: 3200b57cec5SDimitry Andric static int xalloc(); 3210b57cec5SDimitry Andric long& iword(int __index); 3220b57cec5SDimitry Andric void*& pword(int __index); 3230b57cec5SDimitry Andric 3240b57cec5SDimitry Andric // destructor 3250b57cec5SDimitry Andric virtual ~ios_base(); 3260b57cec5SDimitry Andric 3270b57cec5SDimitry Andric // 27.5.2.6 callbacks; 3280b57cec5SDimitry Andric enum event { erase_event, imbue_event, copyfmt_event }; 3290b57cec5SDimitry Andric typedef void (*event_callback)(event, ios_base&, int __index); 3300b57cec5SDimitry Andric void register_callback(event_callback __fn, int __index); 3310b57cec5SDimitry Andric 3320eae32dcSDimitry Andric ios_base(const ios_base&) = delete; 3330eae32dcSDimitry Andric ios_base& operator=(const ios_base&) = delete; 3340b57cec5SDimitry Andric 3350b57cec5SDimitry Andric static bool sync_with_stdio(bool __sync = true); 3360b57cec5SDimitry Andric 3375f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI iostate rdstate() const; 3380b57cec5SDimitry Andric void clear(iostate __state = goodbit); 3395f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI void setstate(iostate __state); 3400b57cec5SDimitry Andric 3415f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool good() const; 3425f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool eof() const; 3435f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool fail() const; 3445f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool bad() const; 3450b57cec5SDimitry Andric 3465f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI iostate exceptions() const; 3475f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI void exceptions(iostate __iostate); 3480b57cec5SDimitry Andric 3490b57cec5SDimitry Andric void __set_badbit_and_consider_rethrow(); 3500b57cec5SDimitry Andric void __set_failbit_and_consider_rethrow(); 3510b57cec5SDimitry Andric 352cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void __setstate_nothrow(iostate __state) { 3530b57cec5SDimitry Andric if (__rdbuf_) 3540b57cec5SDimitry Andric __rdstate_ |= __state; 3550b57cec5SDimitry Andric else 3560b57cec5SDimitry Andric __rdstate_ |= __state | ios_base::badbit; 3570b57cec5SDimitry Andric } 3580b57cec5SDimitry Andric 3590b57cec5SDimitry Andricprotected: 360*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI ios_base() : __loc_(nullptr) { 361*0fca6ea1SDimitry Andric // Purposefully does no initialization 362*0fca6ea1SDimitry Andric // 363*0fca6ea1SDimitry Andric // Except for the locale, this is a sentinel to avoid destroying 364*0fca6ea1SDimitry Andric // an uninitialized object. See 365*0fca6ea1SDimitry Andric // test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp 366*0fca6ea1SDimitry Andric // for the details. 3670b57cec5SDimitry Andric } 3680b57cec5SDimitry Andric 3690b57cec5SDimitry Andric void init(void* __sb); 3705f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI void* rdbuf() const { return __rdbuf_; } 3710b57cec5SDimitry Andric 372cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void rdbuf(void* __sb) { 3730b57cec5SDimitry Andric __rdbuf_ = __sb; 3740b57cec5SDimitry Andric clear(); 3750b57cec5SDimitry Andric } 3760b57cec5SDimitry Andric 3770b57cec5SDimitry Andric void __call_callbacks(event); 3780b57cec5SDimitry Andric void copyfmt(const ios_base&); 3790b57cec5SDimitry Andric void move(ios_base&); 3800b57cec5SDimitry Andric void swap(ios_base&) _NOEXCEPT; 3810b57cec5SDimitry Andric 382cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void set_rdbuf(void* __sb) { __rdbuf_ = __sb; } 3830b57cec5SDimitry Andric 3840b57cec5SDimitry Andricprivate: 3850b57cec5SDimitry Andric // All data members must be scalars 3860b57cec5SDimitry Andric fmtflags __fmtflags_; 3870b57cec5SDimitry Andric streamsize __precision_; 3880b57cec5SDimitry Andric streamsize __width_; 3890b57cec5SDimitry Andric iostate __rdstate_; 3900b57cec5SDimitry Andric iostate __exceptions_; 3910b57cec5SDimitry Andric void* __rdbuf_; 3920b57cec5SDimitry Andric void* __loc_; 3930b57cec5SDimitry Andric event_callback* __fn_; 3940b57cec5SDimitry Andric int* __index_; 3950b57cec5SDimitry Andric size_t __event_size_; 3960b57cec5SDimitry Andric size_t __event_cap_; 3970b57cec5SDimitry Andric// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only 3980b57cec5SDimitry Andric// enabled with clang. 3990b57cec5SDimitry Andric# if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS) 4000b57cec5SDimitry Andric static atomic<int> __xindex_; 4010b57cec5SDimitry Andric# else 4020b57cec5SDimitry Andric static int __xindex_; 4030b57cec5SDimitry Andric# endif 4040b57cec5SDimitry Andric long* __iarray_; 4050b57cec5SDimitry Andric size_t __iarray_size_; 4060b57cec5SDimitry Andric size_t __iarray_cap_; 4070b57cec5SDimitry Andric void** __parray_; 4080b57cec5SDimitry Andric size_t __parray_size_; 4090b57cec5SDimitry Andric size_t __parray_cap_; 4100b57cec5SDimitry Andric}; 4110b57cec5SDimitry Andric 4120b57cec5SDimitry Andric// enum class io_errc 413cb14a3feSDimitry Andric_LIBCPP_DECLARE_STRONG_ENUM(io_errc){stream = 1}; 4140b57cec5SDimitry Andric_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc) 4150b57cec5SDimitry Andric 4160b57cec5SDimitry Andrictemplate <> 4170b57cec5SDimitry Andricstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type {}; 4180b57cec5SDimitry Andric 41981ad6265SDimitry Andric# ifdef _LIBCPP_CXX03_LANG 4200b57cec5SDimitry Andrictemplate <> 4210b57cec5SDimitry Andricstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type {}; 4220b57cec5SDimitry Andric# endif 4230b57cec5SDimitry Andric 42406c3fb27SDimitry Andric_LIBCPP_EXPORTED_FROM_ABI const error_category& iostream_category() _NOEXCEPT; 4250b57cec5SDimitry Andric 426cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI error_code make_error_code(io_errc __e) _NOEXCEPT { 4270b57cec5SDimitry Andric return error_code(static_cast<int>(__e), iostream_category()); 4280b57cec5SDimitry Andric} 4290b57cec5SDimitry Andric 430cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI error_condition make_error_condition(io_errc __e) _NOEXCEPT { 4310b57cec5SDimitry Andric return error_condition(static_cast<int>(__e), iostream_category()); 4320b57cec5SDimitry Andric} 4330b57cec5SDimitry Andric 434cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI ios_base::failure : public system_error { 4350b57cec5SDimitry Andricpublic: 4360b57cec5SDimitry Andric explicit failure(const string& __msg, const error_code& __ec = io_errc::stream); 4370b57cec5SDimitry Andric explicit failure(const char* __msg, const error_code& __ec = io_errc::stream); 43806c3fb27SDimitry Andric _LIBCPP_HIDE_FROM_ABI failure(const failure&) _NOEXCEPT = default; 439bdd1243dSDimitry Andric ~failure() _NOEXCEPT override; 4400b57cec5SDimitry Andric}; 4410b57cec5SDimitry Andric 442cb14a3feSDimitry Andric_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_failure(char const* __msg) { 44306c3fb27SDimitry Andric# ifndef _LIBCPP_HAS_NO_EXCEPTIONS 4440b57cec5SDimitry Andric throw ios_base::failure(__msg); 4450b57cec5SDimitry Andric# else 44606c3fb27SDimitry Andric _LIBCPP_VERBOSE_ABORT("ios_base::failure was thrown in -fno-exceptions mode with message \"%s\"", __msg); 4470b57cec5SDimitry Andric# endif 4480b57cec5SDimitry Andric} 4490b57cec5SDimitry Andric 450cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI ios_base::Init { 4510b57cec5SDimitry Andricpublic: 4520b57cec5SDimitry Andric Init(); 4530b57cec5SDimitry Andric ~Init(); 4540b57cec5SDimitry Andric}; 4550b57cec5SDimitry Andric 4560b57cec5SDimitry Andric// fmtflags 4570b57cec5SDimitry Andric 458cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::flags() const { return __fmtflags_; } 4590b57cec5SDimitry Andric 460cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::flags(fmtflags __fmtfl) { 4610b57cec5SDimitry Andric fmtflags __r = __fmtflags_; 4620b57cec5SDimitry Andric __fmtflags_ = __fmtfl; 4630b57cec5SDimitry Andric return __r; 4640b57cec5SDimitry Andric} 4650b57cec5SDimitry Andric 466cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::setf(fmtflags __fmtfl) { 4670b57cec5SDimitry Andric fmtflags __r = __fmtflags_; 4680b57cec5SDimitry Andric __fmtflags_ |= __fmtfl; 4690b57cec5SDimitry Andric return __r; 4700b57cec5SDimitry Andric} 4710b57cec5SDimitry Andric 472cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI void ios_base::unsetf(fmtflags __mask) { __fmtflags_ &= ~__mask; } 4730b57cec5SDimitry Andric 474cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::setf(fmtflags __fmtfl, fmtflags __mask) { 4750b57cec5SDimitry Andric fmtflags __r = __fmtflags_; 4760b57cec5SDimitry Andric unsetf(__mask); 4770b57cec5SDimitry Andric __fmtflags_ |= __fmtfl & __mask; 4780b57cec5SDimitry Andric return __r; 4790b57cec5SDimitry Andric} 4800b57cec5SDimitry Andric 4810b57cec5SDimitry Andric// precision 4820b57cec5SDimitry Andric 483cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::precision() const { return __precision_; } 4840b57cec5SDimitry Andric 485cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::precision(streamsize __prec) { 4860b57cec5SDimitry Andric streamsize __r = __precision_; 4870b57cec5SDimitry Andric __precision_ = __prec; 4880b57cec5SDimitry Andric return __r; 4890b57cec5SDimitry Andric} 4900b57cec5SDimitry Andric 4910b57cec5SDimitry Andric// width 4920b57cec5SDimitry Andric 493cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::width() const { return __width_; } 4940b57cec5SDimitry Andric 495cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::width(streamsize __wide) { 4960b57cec5SDimitry Andric streamsize __r = __width_; 4970b57cec5SDimitry Andric __width_ = __wide; 4980b57cec5SDimitry Andric return __r; 4990b57cec5SDimitry Andric} 5000b57cec5SDimitry Andric 5010b57cec5SDimitry Andric// iostate 5020b57cec5SDimitry Andric 503cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI ios_base::iostate ios_base::rdstate() const { return __rdstate_; } 5040b57cec5SDimitry Andric 505cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI void ios_base::setstate(iostate __state) { clear(__rdstate_ | __state); } 5060b57cec5SDimitry Andric 507cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI bool ios_base::good() const { return __rdstate_ == 0; } 5080b57cec5SDimitry Andric 509cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI bool ios_base::eof() const { return (__rdstate_ & eofbit) != 0; } 5100b57cec5SDimitry Andric 511cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI bool ios_base::fail() const { return (__rdstate_ & (failbit | badbit)) != 0; } 5120b57cec5SDimitry Andric 513cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI bool ios_base::bad() const { return (__rdstate_ & badbit) != 0; } 5140b57cec5SDimitry Andric 515cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI ios_base::iostate ios_base::exceptions() const { return __exceptions_; } 5160b57cec5SDimitry Andric 517cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI void ios_base::exceptions(iostate __iostate) { 5180b57cec5SDimitry Andric __exceptions_ = __iostate; 5190b57cec5SDimitry Andric clear(__rdstate_); 5200b57cec5SDimitry Andric} 5210b57cec5SDimitry Andric 522*0fca6ea1SDimitry Andrictemplate <class _Traits> 523*0fca6ea1SDimitry Andric// Attribute 'packed' is used to keep the layout compatible with the previous 524*0fca6ea1SDimitry Andric// definition of the '__fill_' and '_set_' pair in basic_ios on AIX & z/OS. 525*0fca6ea1SDimitry Andricstruct _LIBCPP_PACKED _FillHelper { 526*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI void __init() { __set_ = false; } 527*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI _FillHelper& operator=(typename _Traits::int_type __x) { 528*0fca6ea1SDimitry Andric __set_ = true; 529*0fca6ea1SDimitry Andric __fill_val_ = __x; 530*0fca6ea1SDimitry Andric return *this; 531*0fca6ea1SDimitry Andric } 532*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI bool __is_set() const { return __set_; } 533*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI typename _Traits::int_type __get() const { return __fill_val_; } 534*0fca6ea1SDimitry Andric 535*0fca6ea1SDimitry Andricprivate: 536*0fca6ea1SDimitry Andric typename _Traits::int_type __fill_val_; 537*0fca6ea1SDimitry Andric bool __set_; 538*0fca6ea1SDimitry Andric}; 539*0fca6ea1SDimitry Andric 540*0fca6ea1SDimitry Andrictemplate <class _Traits> 541*0fca6ea1SDimitry Andricstruct _LIBCPP_PACKED _SentinelValueFill { 542*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI void __init() { __fill_val_ = _Traits::eof(); } 543*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI _SentinelValueFill& operator=(typename _Traits::int_type __x) { 544*0fca6ea1SDimitry Andric __fill_val_ = __x; 545*0fca6ea1SDimitry Andric return *this; 546*0fca6ea1SDimitry Andric } 547*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI bool __is_set() const { return __fill_val_ != _Traits::eof(); } 548*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI typename _Traits::int_type __get() const { return __fill_val_; } 549*0fca6ea1SDimitry Andric 550*0fca6ea1SDimitry Andricprivate: 551*0fca6ea1SDimitry Andric typename _Traits::int_type __fill_val_; 552*0fca6ea1SDimitry Andric}; 553*0fca6ea1SDimitry Andric 5540b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 555cb14a3feSDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ios : public ios_base { 5560b57cec5SDimitry Andricpublic: 5570b57cec5SDimitry Andric // types: 5580b57cec5SDimitry Andric typedef _CharT char_type; 5590b57cec5SDimitry Andric typedef _Traits traits_type; 5600b57cec5SDimitry Andric 5610b57cec5SDimitry Andric typedef typename traits_type::int_type int_type; 5620b57cec5SDimitry Andric typedef typename traits_type::pos_type pos_type; 5630b57cec5SDimitry Andric typedef typename traits_type::off_type off_type; 5640b57cec5SDimitry Andric 565*0fca6ea1SDimitry Andric static_assert(is_same<_CharT, typename traits_type::char_type>::value, 5660b57cec5SDimitry Andric "traits_type::char_type must be the same type as CharT"); 5670b57cec5SDimitry Andric 5686e75b2fbSDimitry Andric# ifdef _LIBCPP_CXX03_LANG 5696e75b2fbSDimitry Andric // Preserve the ability to compare with literal 0, 5706e75b2fbSDimitry Andric // and implicitly convert to bool, but not implicitly convert to int. 571cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI operator void*() const { return fail() ? nullptr : (void*)this; } 5726e75b2fbSDimitry Andric# else 573cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit operator bool() const { return !fail(); } 5746e75b2fbSDimitry Andric# endif 5750b57cec5SDimitry Andric 5765f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool operator!() const { return fail(); } 5775f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI iostate rdstate() const { return ios_base::rdstate(); } 5785f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI void clear(iostate __state = goodbit) { ios_base::clear(__state); } 5795f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI void setstate(iostate __state) { ios_base::setstate(__state); } 5805f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool good() const { return ios_base::good(); } 5815f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool eof() const { return ios_base::eof(); } 5825f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool fail() const { return ios_base::fail(); } 5835f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI bool bad() const { return ios_base::bad(); } 5840b57cec5SDimitry Andric 5855f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI iostate exceptions() const { return ios_base::exceptions(); } 5865f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI void exceptions(iostate __iostate) { ios_base::exceptions(__iostate); } 5870b57cec5SDimitry Andric 5880b57cec5SDimitry Andric // 27.5.4.1 Constructor/destructor: 589cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit basic_ios(basic_streambuf<char_type, traits_type>* __sb); 590bdd1243dSDimitry Andric ~basic_ios() override; 5910b57cec5SDimitry Andric 5920b57cec5SDimitry Andric // 27.5.4.2 Members: 593cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI basic_ostream<char_type, traits_type>* tie() const; 594cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr); 5950b57cec5SDimitry Andric 596cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI basic_streambuf<char_type, traits_type>* rdbuf() const; 597cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb); 5980b57cec5SDimitry Andric 5990b57cec5SDimitry Andric basic_ios& copyfmt(const basic_ios& __rhs); 6000b57cec5SDimitry Andric 601cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI char_type fill() const; 602cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI char_type fill(char_type __ch); 6030b57cec5SDimitry Andric 604cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI locale imbue(const locale& __loc); 6050b57cec5SDimitry Andric 606cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI char narrow(char_type __c, char __dfault) const; 607cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI char_type widen(char __c) const; 6080b57cec5SDimitry Andric 6090b57cec5SDimitry Andricprotected: 610*0fca6ea1SDimitry Andric _LIBCPP_HIDE_FROM_ABI basic_ios() { 611*0fca6ea1SDimitry Andric // purposefully does no initialization 612*0fca6ea1SDimitry Andric // since the destructor does nothing this does not have ios_base issues. 6130b57cec5SDimitry Andric } 614cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void init(basic_streambuf<char_type, traits_type>* __sb); 6150b57cec5SDimitry Andric 616cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void move(basic_ios& __rhs); 617cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void move(basic_ios&& __rhs) { move(__rhs); } 618cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void swap(basic_ios& __rhs) _NOEXCEPT; 619cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb); 620cb14a3feSDimitry Andric 6210b57cec5SDimitry Andricprivate: 6220b57cec5SDimitry Andric basic_ostream<char_type, traits_type>* __tie_; 623*0fca6ea1SDimitry Andric 624*0fca6ea1SDimitry Andric#if defined(_LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE) 625*0fca6ea1SDimitry Andric using _FillType = _FillHelper<traits_type>; 626*0fca6ea1SDimitry Andric#else 627*0fca6ea1SDimitry Andric using _FillType = _SentinelValueFill<traits_type>; 628*0fca6ea1SDimitry Andric#endif 629*0fca6ea1SDimitry Andric mutable _FillType __fill_; 6300b57cec5SDimitry Andric}; 6310b57cec5SDimitry Andric 6320b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 633cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI basic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type, traits_type>* __sb) { 6340b57cec5SDimitry Andric init(__sb); 6350b57cec5SDimitry Andric} 6360b57cec5SDimitry Andric 6370b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 638cb14a3feSDimitry Andricbasic_ios<_CharT, _Traits>::~basic_ios() {} 6390b57cec5SDimitry Andric 6400b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 641cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb) { 6420b57cec5SDimitry Andric ios_base::init(__sb); 643e8d8bef9SDimitry Andric __tie_ = nullptr; 644*0fca6ea1SDimitry Andric __fill_.__init(); 6450b57cec5SDimitry Andric} 6460b57cec5SDimitry Andric 6470b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 648cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>* basic_ios<_CharT, _Traits>::tie() const { 6490b57cec5SDimitry Andric return __tie_; 6500b57cec5SDimitry Andric} 6510b57cec5SDimitry Andric 6520b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 653cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>* 654cb14a3feSDimitry Andricbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr) { 6550b57cec5SDimitry Andric basic_ostream<char_type, traits_type>* __r = __tie_; 6560b57cec5SDimitry Andric __tie_ = __tiestr; 6570b57cec5SDimitry Andric return __r; 6580b57cec5SDimitry Andric} 6590b57cec5SDimitry Andric 6600b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 661cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI basic_streambuf<_CharT, _Traits>* basic_ios<_CharT, _Traits>::rdbuf() const { 6620b57cec5SDimitry Andric return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf()); 6630b57cec5SDimitry Andric} 6640b57cec5SDimitry Andric 6650b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 666cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI basic_streambuf<_CharT, _Traits>* 667cb14a3feSDimitry Andricbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb) { 6680b57cec5SDimitry Andric basic_streambuf<char_type, traits_type>* __r = rdbuf(); 6690b57cec5SDimitry Andric ios_base::rdbuf(__sb); 6700b57cec5SDimitry Andric return __r; 6710b57cec5SDimitry Andric} 6720b57cec5SDimitry Andric 6730b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 674cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI locale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) { 6750b57cec5SDimitry Andric locale __r = getloc(); 6760b57cec5SDimitry Andric ios_base::imbue(__loc); 6770b57cec5SDimitry Andric if (rdbuf()) 6780b57cec5SDimitry Andric rdbuf()->pubimbue(__loc); 6790b57cec5SDimitry Andric return __r; 6800b57cec5SDimitry Andric} 6810b57cec5SDimitry Andric 6820b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 683cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI char basic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const { 684bdd1243dSDimitry Andric return std::use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault); 6850b57cec5SDimitry Andric} 6860b57cec5SDimitry Andric 6870b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 688cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::widen(char __c) const { 689bdd1243dSDimitry Andric return std::use_facet<ctype<char_type> >(getloc()).widen(__c); 6900b57cec5SDimitry Andric} 6910b57cec5SDimitry Andric 6920b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 693cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill() const { 694*0fca6ea1SDimitry Andric if (!__fill_.__is_set()) 6950b57cec5SDimitry Andric __fill_ = widen(' '); 696*0fca6ea1SDimitry Andric return __fill_.__get(); 6970b57cec5SDimitry Andric} 6980b57cec5SDimitry Andric 6990b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 700cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill(char_type __ch) { 701*0fca6ea1SDimitry Andric if (!__fill_.__is_set()) 70281ad6265SDimitry Andric __fill_ = widen(' '); 703*0fca6ea1SDimitry Andric char_type __r = __fill_.__get(); 7040b57cec5SDimitry Andric __fill_ = __ch; 7050b57cec5SDimitry Andric return __r; 7060b57cec5SDimitry Andric} 7070b57cec5SDimitry Andric 7080b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 709cb14a3feSDimitry Andricbasic_ios<_CharT, _Traits>& basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) { 710cb14a3feSDimitry Andric if (this != &__rhs) { 7110b57cec5SDimitry Andric __call_callbacks(erase_event); 7120b57cec5SDimitry Andric ios_base::copyfmt(__rhs); 7130b57cec5SDimitry Andric __tie_ = __rhs.__tie_; 7140b57cec5SDimitry Andric __fill_ = __rhs.__fill_; 7150b57cec5SDimitry Andric __call_callbacks(copyfmt_event); 7160b57cec5SDimitry Andric exceptions(__rhs.exceptions()); 7170b57cec5SDimitry Andric } 7180b57cec5SDimitry Andric return *this; 7190b57cec5SDimitry Andric} 7200b57cec5SDimitry Andric 7210b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 722cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::move(basic_ios& __rhs) { 7230b57cec5SDimitry Andric ios_base::move(__rhs); 7240b57cec5SDimitry Andric __tie_ = __rhs.__tie_; 725e8d8bef9SDimitry Andric __rhs.__tie_ = nullptr; 7260b57cec5SDimitry Andric __fill_ = __rhs.__fill_; 7270b57cec5SDimitry Andric} 7280b57cec5SDimitry Andric 7290b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 730cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT { 7310b57cec5SDimitry Andric ios_base::swap(__rhs); 7325f757f3fSDimitry Andric std::swap(__tie_, __rhs.__tie_); 7335f757f3fSDimitry Andric std::swap(__fill_, __rhs.__fill_); 7340b57cec5SDimitry Andric} 7350b57cec5SDimitry Andric 7360b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 737cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb) { 7380b57cec5SDimitry Andric ios_base::set_rdbuf(__sb); 7390b57cec5SDimitry Andric} 7400b57cec5SDimitry Andric 74106c3fb27SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<char>; 74206c3fb27SDimitry Andric 74306c3fb27SDimitry Andric# ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 74406c3fb27SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<wchar_t>; 74506c3fb27SDimitry Andric# endif 74606c3fb27SDimitry Andric 747cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& boolalpha(ios_base& __str) { 7480b57cec5SDimitry Andric __str.setf(ios_base::boolalpha); 7490b57cec5SDimitry Andric return __str; 7500b57cec5SDimitry Andric} 7510b57cec5SDimitry Andric 752cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& noboolalpha(ios_base& __str) { 7530b57cec5SDimitry Andric __str.unsetf(ios_base::boolalpha); 7540b57cec5SDimitry Andric return __str; 7550b57cec5SDimitry Andric} 7560b57cec5SDimitry Andric 757cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& showbase(ios_base& __str) { 7580b57cec5SDimitry Andric __str.setf(ios_base::showbase); 7590b57cec5SDimitry Andric return __str; 7600b57cec5SDimitry Andric} 7610b57cec5SDimitry Andric 762cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowbase(ios_base& __str) { 7630b57cec5SDimitry Andric __str.unsetf(ios_base::showbase); 7640b57cec5SDimitry Andric return __str; 7650b57cec5SDimitry Andric} 7660b57cec5SDimitry Andric 767cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& showpoint(ios_base& __str) { 7680b57cec5SDimitry Andric __str.setf(ios_base::showpoint); 7690b57cec5SDimitry Andric return __str; 7700b57cec5SDimitry Andric} 7710b57cec5SDimitry Andric 772cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowpoint(ios_base& __str) { 7730b57cec5SDimitry Andric __str.unsetf(ios_base::showpoint); 7740b57cec5SDimitry Andric return __str; 7750b57cec5SDimitry Andric} 7760b57cec5SDimitry Andric 777cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& showpos(ios_base& __str) { 7780b57cec5SDimitry Andric __str.setf(ios_base::showpos); 7790b57cec5SDimitry Andric return __str; 7800b57cec5SDimitry Andric} 7810b57cec5SDimitry Andric 782cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowpos(ios_base& __str) { 7830b57cec5SDimitry Andric __str.unsetf(ios_base::showpos); 7840b57cec5SDimitry Andric return __str; 7850b57cec5SDimitry Andric} 7860b57cec5SDimitry Andric 787cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& skipws(ios_base& __str) { 7880b57cec5SDimitry Andric __str.setf(ios_base::skipws); 7890b57cec5SDimitry Andric return __str; 7900b57cec5SDimitry Andric} 7910b57cec5SDimitry Andric 792cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& noskipws(ios_base& __str) { 7930b57cec5SDimitry Andric __str.unsetf(ios_base::skipws); 7940b57cec5SDimitry Andric return __str; 7950b57cec5SDimitry Andric} 7960b57cec5SDimitry Andric 797cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& uppercase(ios_base& __str) { 7980b57cec5SDimitry Andric __str.setf(ios_base::uppercase); 7990b57cec5SDimitry Andric return __str; 8000b57cec5SDimitry Andric} 8010b57cec5SDimitry Andric 802cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& nouppercase(ios_base& __str) { 8030b57cec5SDimitry Andric __str.unsetf(ios_base::uppercase); 8040b57cec5SDimitry Andric return __str; 8050b57cec5SDimitry Andric} 8060b57cec5SDimitry Andric 807cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& unitbuf(ios_base& __str) { 8080b57cec5SDimitry Andric __str.setf(ios_base::unitbuf); 8090b57cec5SDimitry Andric return __str; 8100b57cec5SDimitry Andric} 8110b57cec5SDimitry Andric 812cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& nounitbuf(ios_base& __str) { 8130b57cec5SDimitry Andric __str.unsetf(ios_base::unitbuf); 8140b57cec5SDimitry Andric return __str; 8150b57cec5SDimitry Andric} 8160b57cec5SDimitry Andric 817cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& internal(ios_base& __str) { 8180b57cec5SDimitry Andric __str.setf(ios_base::internal, ios_base::adjustfield); 8190b57cec5SDimitry Andric return __str; 8200b57cec5SDimitry Andric} 8210b57cec5SDimitry Andric 822cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& left(ios_base& __str) { 8230b57cec5SDimitry Andric __str.setf(ios_base::left, ios_base::adjustfield); 8240b57cec5SDimitry Andric return __str; 8250b57cec5SDimitry Andric} 8260b57cec5SDimitry Andric 827cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& right(ios_base& __str) { 8280b57cec5SDimitry Andric __str.setf(ios_base::right, ios_base::adjustfield); 8290b57cec5SDimitry Andric return __str; 8300b57cec5SDimitry Andric} 8310b57cec5SDimitry Andric 832cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& dec(ios_base& __str) { 8330b57cec5SDimitry Andric __str.setf(ios_base::dec, ios_base::basefield); 8340b57cec5SDimitry Andric return __str; 8350b57cec5SDimitry Andric} 8360b57cec5SDimitry Andric 837cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& hex(ios_base& __str) { 8380b57cec5SDimitry Andric __str.setf(ios_base::hex, ios_base::basefield); 8390b57cec5SDimitry Andric return __str; 8400b57cec5SDimitry Andric} 8410b57cec5SDimitry Andric 842cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& oct(ios_base& __str) { 8430b57cec5SDimitry Andric __str.setf(ios_base::oct, ios_base::basefield); 8440b57cec5SDimitry Andric return __str; 8450b57cec5SDimitry Andric} 8460b57cec5SDimitry Andric 847cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& fixed(ios_base& __str) { 8480b57cec5SDimitry Andric __str.setf(ios_base::fixed, ios_base::floatfield); 8490b57cec5SDimitry Andric return __str; 8500b57cec5SDimitry Andric} 8510b57cec5SDimitry Andric 852cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& scientific(ios_base& __str) { 8530b57cec5SDimitry Andric __str.setf(ios_base::scientific, ios_base::floatfield); 8540b57cec5SDimitry Andric return __str; 8550b57cec5SDimitry Andric} 8560b57cec5SDimitry Andric 857cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& hexfloat(ios_base& __str) { 8580b57cec5SDimitry Andric __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); 8590b57cec5SDimitry Andric return __str; 8600b57cec5SDimitry Andric} 8610b57cec5SDimitry Andric 862cb14a3feSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline ios_base& defaultfloat(ios_base& __str) { 8630b57cec5SDimitry Andric __str.unsetf(ios_base::floatfield); 8640b57cec5SDimitry Andric return __str; 8650b57cec5SDimitry Andric} 8660b57cec5SDimitry Andric 8670b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD 8680b57cec5SDimitry Andric 869b3edf446SDimitry Andric_LIBCPP_POP_MACROS 870b3edf446SDimitry Andric 871*0fca6ea1SDimitry Andric#endif // !defined(_LIBCPP_HAS_NO_LOCALIZATION) 872*0fca6ea1SDimitry Andric 873bdd1243dSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 87406c3fb27SDimitry Andric# include <atomic> 875bdd1243dSDimitry Andric# include <concepts> 876bdd1243dSDimitry Andric# include <cstddef> 877bdd1243dSDimitry Andric# include <cstdlib> 878bdd1243dSDimitry Andric# include <cstring> 879bdd1243dSDimitry Andric# include <initializer_list> 880bdd1243dSDimitry Andric# include <limits> 8815f757f3fSDimitry Andric# include <mutex> 882bdd1243dSDimitry Andric# include <new> 883bdd1243dSDimitry Andric# include <stdexcept> 88406c3fb27SDimitry Andric# include <system_error> 885bdd1243dSDimitry Andric# include <type_traits> 886bdd1243dSDimitry Andric# include <typeinfo> 887bdd1243dSDimitry Andric#endif 888bdd1243dSDimitry Andric 8890b57cec5SDimitry Andric#endif // _LIBCPP_IOS 890