10b57cec5SDimitry Andric// -*- C++ -*- 20b57cec5SDimitry Andric//===---------------------------- ios -------------------------------------===// 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; 610b57cec5SDimitry Andric static constexpr openmode out; 620b57cec5SDimitry Andric static constexpr openmode trunc; 630b57cec5SDimitry Andric 640b57cec5SDimitry Andric typedef T4 seekdir; 650b57cec5SDimitry Andric static constexpr seekdir beg; 660b57cec5SDimitry Andric static constexpr seekdir cur; 670b57cec5SDimitry Andric static constexpr seekdir end; 680b57cec5SDimitry Andric 690b57cec5SDimitry Andric class Init; 700b57cec5SDimitry Andric 710b57cec5SDimitry Andric // 27.5.2.2 fmtflags state: 720b57cec5SDimitry Andric fmtflags flags() const; 730b57cec5SDimitry Andric fmtflags flags(fmtflags fmtfl); 740b57cec5SDimitry Andric fmtflags setf(fmtflags fmtfl); 750b57cec5SDimitry Andric fmtflags setf(fmtflags fmtfl, fmtflags mask); 760b57cec5SDimitry Andric void unsetf(fmtflags mask); 770b57cec5SDimitry Andric 780b57cec5SDimitry Andric streamsize precision() const; 790b57cec5SDimitry Andric streamsize precision(streamsize prec); 800b57cec5SDimitry Andric streamsize width() const; 810b57cec5SDimitry Andric streamsize width(streamsize wide); 820b57cec5SDimitry Andric 830b57cec5SDimitry Andric // 27.5.2.3 locales: 840b57cec5SDimitry Andric locale imbue(const locale& loc); 850b57cec5SDimitry Andric locale getloc() const; 860b57cec5SDimitry Andric 870b57cec5SDimitry Andric // 27.5.2.5 storage: 880b57cec5SDimitry Andric static int xalloc(); 890b57cec5SDimitry Andric long& iword(int index); 900b57cec5SDimitry Andric void*& pword(int index); 910b57cec5SDimitry Andric 920b57cec5SDimitry Andric // destructor 930b57cec5SDimitry Andric virtual ~ios_base(); 940b57cec5SDimitry Andric 950b57cec5SDimitry Andric // 27.5.2.6 callbacks; 960b57cec5SDimitry Andric enum event { erase_event, imbue_event, copyfmt_event }; 970b57cec5SDimitry Andric typedef void (*event_callback)(event, ios_base&, int index); 980b57cec5SDimitry Andric void register_callback(event_callback fn, int index); 990b57cec5SDimitry Andric 1000b57cec5SDimitry Andric ios_base(const ios_base&) = delete; 1010b57cec5SDimitry Andric ios_base& operator=(const ios_base&) = delete; 1020b57cec5SDimitry Andric 1030b57cec5SDimitry Andric static bool sync_with_stdio(bool sync = true); 1040b57cec5SDimitry Andric 1050b57cec5SDimitry Andricprotected: 1060b57cec5SDimitry Andric ios_base(); 1070b57cec5SDimitry Andric}; 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andrictemplate <class charT, class traits = char_traits<charT> > 1100b57cec5SDimitry Andricclass basic_ios 1110b57cec5SDimitry Andric : public ios_base 1120b57cec5SDimitry Andric{ 1130b57cec5SDimitry Andricpublic: 1140b57cec5SDimitry Andric // types: 1150b57cec5SDimitry Andric typedef charT char_type; 1160b57cec5SDimitry Andric typedef typename traits::int_type int_type; // removed in C++17 1170b57cec5SDimitry Andric typedef typename traits::pos_type pos_type; // removed in C++17 1180b57cec5SDimitry Andric typedef typename traits::off_type off_type; // removed in C++17 1190b57cec5SDimitry Andric typedef traits traits_type; 1200b57cec5SDimitry Andric 1210b57cec5SDimitry Andric operator unspecified-bool-type() const; 1220b57cec5SDimitry Andric bool operator!() const; 1230b57cec5SDimitry Andric iostate rdstate() const; 1240b57cec5SDimitry Andric void clear(iostate state = goodbit); 1250b57cec5SDimitry Andric void setstate(iostate state); 1260b57cec5SDimitry Andric bool good() const; 1270b57cec5SDimitry Andric bool eof() const; 1280b57cec5SDimitry Andric bool fail() const; 1290b57cec5SDimitry Andric bool bad() const; 1300b57cec5SDimitry Andric 1310b57cec5SDimitry Andric iostate exceptions() const; 1320b57cec5SDimitry Andric void exceptions(iostate except); 1330b57cec5SDimitry Andric 1340b57cec5SDimitry Andric // 27.5.4.1 Constructor/destructor: 1350b57cec5SDimitry Andric explicit basic_ios(basic_streambuf<charT,traits>* sb); 1360b57cec5SDimitry Andric virtual ~basic_ios(); 1370b57cec5SDimitry Andric 1380b57cec5SDimitry Andric // 27.5.4.2 Members: 1390b57cec5SDimitry Andric basic_ostream<charT,traits>* tie() const; 1400b57cec5SDimitry Andric basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr); 1410b57cec5SDimitry Andric 1420b57cec5SDimitry Andric basic_streambuf<charT,traits>* rdbuf() const; 1430b57cec5SDimitry Andric basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb); 1440b57cec5SDimitry Andric 1450b57cec5SDimitry Andric basic_ios& copyfmt(const basic_ios& rhs); 1460b57cec5SDimitry Andric 1470b57cec5SDimitry Andric char_type fill() const; 1480b57cec5SDimitry Andric char_type fill(char_type ch); 1490b57cec5SDimitry Andric 1500b57cec5SDimitry Andric locale imbue(const locale& loc); 1510b57cec5SDimitry Andric 1520b57cec5SDimitry Andric char narrow(char_type c, char dfault) const; 1530b57cec5SDimitry Andric char_type widen(char c) const; 1540b57cec5SDimitry Andric 1550b57cec5SDimitry Andric basic_ios(const basic_ios& ) = delete; 1560b57cec5SDimitry Andric basic_ios& operator=(const basic_ios&) = delete; 1570b57cec5SDimitry Andric 1580b57cec5SDimitry Andricprotected: 1590b57cec5SDimitry Andric basic_ios(); 1600b57cec5SDimitry Andric void init(basic_streambuf<charT,traits>* sb); 1610b57cec5SDimitry Andric void move(basic_ios& rhs); 1620b57cec5SDimitry Andric void swap(basic_ios& rhs) noexcept; 1630b57cec5SDimitry Andric void set_rdbuf(basic_streambuf<charT, traits>* sb); 1640b57cec5SDimitry Andric}; 1650b57cec5SDimitry Andric 1660b57cec5SDimitry Andric// 27.5.5, manipulators: 1670b57cec5SDimitry Andricios_base& boolalpha (ios_base& str); 1680b57cec5SDimitry Andricios_base& noboolalpha(ios_base& str); 1690b57cec5SDimitry Andricios_base& showbase (ios_base& str); 1700b57cec5SDimitry Andricios_base& noshowbase (ios_base& str); 1710b57cec5SDimitry Andricios_base& showpoint (ios_base& str); 1720b57cec5SDimitry Andricios_base& noshowpoint(ios_base& str); 1730b57cec5SDimitry Andricios_base& showpos (ios_base& str); 1740b57cec5SDimitry Andricios_base& noshowpos (ios_base& str); 1750b57cec5SDimitry Andricios_base& skipws (ios_base& str); 1760b57cec5SDimitry Andricios_base& noskipws (ios_base& str); 1770b57cec5SDimitry Andricios_base& uppercase (ios_base& str); 1780b57cec5SDimitry Andricios_base& nouppercase(ios_base& str); 1790b57cec5SDimitry Andricios_base& unitbuf (ios_base& str); 1800b57cec5SDimitry Andricios_base& nounitbuf (ios_base& str); 1810b57cec5SDimitry Andric 1820b57cec5SDimitry Andric// 27.5.5.2 adjustfield: 1830b57cec5SDimitry Andricios_base& internal (ios_base& str); 1840b57cec5SDimitry Andricios_base& left (ios_base& str); 1850b57cec5SDimitry Andricios_base& right (ios_base& str); 1860b57cec5SDimitry Andric 1870b57cec5SDimitry Andric// 27.5.5.3 basefield: 1880b57cec5SDimitry Andricios_base& dec (ios_base& str); 1890b57cec5SDimitry Andricios_base& hex (ios_base& str); 1900b57cec5SDimitry Andricios_base& oct (ios_base& str); 1910b57cec5SDimitry Andric 1920b57cec5SDimitry Andric// 27.5.5.4 floatfield: 1930b57cec5SDimitry Andricios_base& fixed (ios_base& str); 1940b57cec5SDimitry Andricios_base& scientific (ios_base& str); 1950b57cec5SDimitry Andricios_base& hexfloat (ios_base& str); 1960b57cec5SDimitry Andricios_base& defaultfloat(ios_base& str); 1970b57cec5SDimitry Andric 1980b57cec5SDimitry Andric// 27.5.5.5 error reporting: 1990b57cec5SDimitry Andricenum class io_errc 2000b57cec5SDimitry Andric{ 2010b57cec5SDimitry Andric stream = 1 2020b57cec5SDimitry Andric}; 2030b57cec5SDimitry Andric 2040b57cec5SDimitry Andricconcept_map ErrorCodeEnum<io_errc> { }; 2050b57cec5SDimitry Andricerror_code make_error_code(io_errc e) noexcept; 2060b57cec5SDimitry Andricerror_condition make_error_condition(io_errc e) noexcept; 2070b57cec5SDimitry Andricstorage-class-specifier const error_category& iostream_category() noexcept; 2080b57cec5SDimitry Andric 2090b57cec5SDimitry Andric} // std 2100b57cec5SDimitry Andric 2110b57cec5SDimitry Andric*/ 2120b57cec5SDimitry Andric 2130b57cec5SDimitry Andric#include <__config> 2140b57cec5SDimitry Andric#include <iosfwd> 2150b57cec5SDimitry Andric#include <__locale> 2160b57cec5SDimitry Andric#include <system_error> 2170b57cec5SDimitry Andric 2180b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER) 2190b57cec5SDimitry Andric#include <atomic> // for __xindex_ 2200b57cec5SDimitry Andric#endif 2210b57cec5SDimitry Andric 2220b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 2230b57cec5SDimitry Andric#pragma GCC system_header 2240b57cec5SDimitry Andric#endif 2250b57cec5SDimitry Andric 2260b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 2270b57cec5SDimitry Andric 2280b57cec5SDimitry Andrictypedef ptrdiff_t streamsize; 2290b57cec5SDimitry Andric 2300b57cec5SDimitry Andricclass _LIBCPP_TYPE_VIS ios_base 2310b57cec5SDimitry Andric{ 2320b57cec5SDimitry Andricpublic: 2330b57cec5SDimitry Andric class _LIBCPP_EXCEPTION_ABI failure; 2340b57cec5SDimitry Andric 2350b57cec5SDimitry Andric typedef unsigned int fmtflags; 2360b57cec5SDimitry Andric static const fmtflags boolalpha = 0x0001; 2370b57cec5SDimitry Andric static const fmtflags dec = 0x0002; 2380b57cec5SDimitry Andric static const fmtflags fixed = 0x0004; 2390b57cec5SDimitry Andric static const fmtflags hex = 0x0008; 2400b57cec5SDimitry Andric static const fmtflags internal = 0x0010; 2410b57cec5SDimitry Andric static const fmtflags left = 0x0020; 2420b57cec5SDimitry Andric static const fmtflags oct = 0x0040; 2430b57cec5SDimitry Andric static const fmtflags right = 0x0080; 2440b57cec5SDimitry Andric static const fmtflags scientific = 0x0100; 2450b57cec5SDimitry Andric static const fmtflags showbase = 0x0200; 2460b57cec5SDimitry Andric static const fmtflags showpoint = 0x0400; 2470b57cec5SDimitry Andric static const fmtflags showpos = 0x0800; 2480b57cec5SDimitry Andric static const fmtflags skipws = 0x1000; 2490b57cec5SDimitry Andric static const fmtflags unitbuf = 0x2000; 2500b57cec5SDimitry Andric static const fmtflags uppercase = 0x4000; 2510b57cec5SDimitry Andric static const fmtflags adjustfield = left | right | internal; 2520b57cec5SDimitry Andric static const fmtflags basefield = dec | oct | hex; 2530b57cec5SDimitry Andric static const fmtflags floatfield = scientific | fixed; 2540b57cec5SDimitry Andric 2550b57cec5SDimitry Andric typedef unsigned int iostate; 2560b57cec5SDimitry Andric static const iostate badbit = 0x1; 2570b57cec5SDimitry Andric static const iostate eofbit = 0x2; 2580b57cec5SDimitry Andric static const iostate failbit = 0x4; 2590b57cec5SDimitry Andric static const iostate goodbit = 0x0; 2600b57cec5SDimitry Andric 2610b57cec5SDimitry Andric typedef unsigned int openmode; 2620b57cec5SDimitry Andric static const openmode app = 0x01; 2630b57cec5SDimitry Andric static const openmode ate = 0x02; 2640b57cec5SDimitry Andric static const openmode binary = 0x04; 2650b57cec5SDimitry Andric static const openmode in = 0x08; 2660b57cec5SDimitry Andric static const openmode out = 0x10; 2670b57cec5SDimitry Andric static const openmode trunc = 0x20; 2680b57cec5SDimitry Andric 2690b57cec5SDimitry Andric enum seekdir {beg, cur, end}; 2700b57cec5SDimitry Andric 2710b57cec5SDimitry Andric#if _LIBCPP_STD_VER <= 14 2720b57cec5SDimitry Andric typedef iostate io_state; 2730b57cec5SDimitry Andric typedef openmode open_mode; 2740b57cec5SDimitry Andric typedef seekdir seek_dir; 2750b57cec5SDimitry Andric 2760b57cec5SDimitry Andric typedef _VSTD::streamoff streamoff; 2770b57cec5SDimitry Andric typedef _VSTD::streampos streampos; 2780b57cec5SDimitry Andric#endif 2790b57cec5SDimitry Andric 2800b57cec5SDimitry Andric class _LIBCPP_TYPE_VIS Init; 2810b57cec5SDimitry Andric 2820b57cec5SDimitry Andric // 27.5.2.2 fmtflags state: 2830b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY fmtflags flags() const; 2840b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY fmtflags flags(fmtflags __fmtfl); 2850b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl); 2860b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl, fmtflags __mask); 2870b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY void unsetf(fmtflags __mask); 2880b57cec5SDimitry Andric 2890b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY streamsize precision() const; 2900b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY streamsize precision(streamsize __prec); 2910b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY streamsize width() const; 2920b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY streamsize width(streamsize __wide); 2930b57cec5SDimitry Andric 2940b57cec5SDimitry Andric // 27.5.2.3 locales: 2950b57cec5SDimitry Andric locale imbue(const locale& __loc); 2960b57cec5SDimitry Andric locale getloc() const; 2970b57cec5SDimitry Andric 2980b57cec5SDimitry Andric // 27.5.2.5 storage: 2990b57cec5SDimitry Andric static int xalloc(); 3000b57cec5SDimitry Andric long& iword(int __index); 3010b57cec5SDimitry Andric void*& pword(int __index); 3020b57cec5SDimitry Andric 3030b57cec5SDimitry Andric // destructor 3040b57cec5SDimitry Andric virtual ~ios_base(); 3050b57cec5SDimitry Andric 3060b57cec5SDimitry Andric // 27.5.2.6 callbacks; 3070b57cec5SDimitry Andric enum event { erase_event, imbue_event, copyfmt_event }; 3080b57cec5SDimitry Andric typedef void (*event_callback)(event, ios_base&, int __index); 3090b57cec5SDimitry Andric void register_callback(event_callback __fn, int __index); 3100b57cec5SDimitry Andric 3110b57cec5SDimitry Andricprivate: 3120b57cec5SDimitry Andric ios_base(const ios_base&); // = delete; 3130b57cec5SDimitry Andric ios_base& operator=(const ios_base&); // = delete; 3140b57cec5SDimitry Andric 3150b57cec5SDimitry Andricpublic: 3160b57cec5SDimitry Andric static bool sync_with_stdio(bool __sync = true); 3170b57cec5SDimitry Andric 3180b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY iostate rdstate() const; 3190b57cec5SDimitry Andric void clear(iostate __state = goodbit); 3200b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state); 3210b57cec5SDimitry Andric 3220b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool good() const; 3230b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool eof() const; 3240b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool fail() const; 3250b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool bad() const; 3260b57cec5SDimitry Andric 3270b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY iostate exceptions() const; 3280b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate); 3290b57cec5SDimitry Andric 3300b57cec5SDimitry Andric void __set_badbit_and_consider_rethrow(); 3310b57cec5SDimitry Andric void __set_failbit_and_consider_rethrow(); 3320b57cec5SDimitry Andric 3330b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 3340b57cec5SDimitry Andric void __setstate_nothrow(iostate __state) 3350b57cec5SDimitry Andric { 3360b57cec5SDimitry Andric if (__rdbuf_) 3370b57cec5SDimitry Andric __rdstate_ |= __state; 3380b57cec5SDimitry Andric else 3390b57cec5SDimitry Andric __rdstate_ |= __state | ios_base::badbit; 3400b57cec5SDimitry Andric } 3410b57cec5SDimitry Andric 3420b57cec5SDimitry Andricprotected: 3430b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 3440b57cec5SDimitry Andric ios_base() {// purposefully does no initialization 3450b57cec5SDimitry Andric } 3460b57cec5SDimitry Andric 3470b57cec5SDimitry Andric void init(void* __sb); 3480b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY void* rdbuf() const {return __rdbuf_;} 3490b57cec5SDimitry Andric 3500b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 3510b57cec5SDimitry Andric void rdbuf(void* __sb) 3520b57cec5SDimitry Andric { 3530b57cec5SDimitry Andric __rdbuf_ = __sb; 3540b57cec5SDimitry Andric clear(); 3550b57cec5SDimitry Andric } 3560b57cec5SDimitry Andric 3570b57cec5SDimitry Andric void __call_callbacks(event); 3580b57cec5SDimitry Andric void copyfmt(const ios_base&); 3590b57cec5SDimitry Andric void move(ios_base&); 3600b57cec5SDimitry Andric void swap(ios_base&) _NOEXCEPT; 3610b57cec5SDimitry Andric 3620b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 3630b57cec5SDimitry Andric void set_rdbuf(void* __sb) 3640b57cec5SDimitry Andric { 3650b57cec5SDimitry Andric __rdbuf_ = __sb; 3660b57cec5SDimitry Andric } 3670b57cec5SDimitry Andric 3680b57cec5SDimitry Andricprivate: 3690b57cec5SDimitry Andric // All data members must be scalars 3700b57cec5SDimitry Andric fmtflags __fmtflags_; 3710b57cec5SDimitry Andric streamsize __precision_; 3720b57cec5SDimitry Andric streamsize __width_; 3730b57cec5SDimitry Andric iostate __rdstate_; 3740b57cec5SDimitry Andric iostate __exceptions_; 3750b57cec5SDimitry Andric void* __rdbuf_; 3760b57cec5SDimitry Andric void* __loc_; 3770b57cec5SDimitry Andric event_callback* __fn_; 3780b57cec5SDimitry Andric int* __index_; 3790b57cec5SDimitry Andric size_t __event_size_; 3800b57cec5SDimitry Andric size_t __event_cap_; 3810b57cec5SDimitry Andric// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only 3820b57cec5SDimitry Andric// enabled with clang. 3830b57cec5SDimitry Andric#if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS) 3840b57cec5SDimitry Andric static atomic<int> __xindex_; 3850b57cec5SDimitry Andric#else 3860b57cec5SDimitry Andric static int __xindex_; 3870b57cec5SDimitry Andric#endif 3880b57cec5SDimitry Andric long* __iarray_; 3890b57cec5SDimitry Andric size_t __iarray_size_; 3900b57cec5SDimitry Andric size_t __iarray_cap_; 3910b57cec5SDimitry Andric void** __parray_; 3920b57cec5SDimitry Andric size_t __parray_size_; 3930b57cec5SDimitry Andric size_t __parray_cap_; 3940b57cec5SDimitry Andric}; 3950b57cec5SDimitry Andric 3960b57cec5SDimitry Andric//enum class io_errc 3970b57cec5SDimitry Andric_LIBCPP_DECLARE_STRONG_ENUM(io_errc) 3980b57cec5SDimitry Andric{ 3990b57cec5SDimitry Andric stream = 1 4000b57cec5SDimitry Andric}; 4010b57cec5SDimitry Andric_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc) 4020b57cec5SDimitry Andric 4030b57cec5SDimitry Andrictemplate <> 4040b57cec5SDimitry Andricstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type { }; 4050b57cec5SDimitry Andric 4060b57cec5SDimitry Andric#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 4070b57cec5SDimitry Andrictemplate <> 4080b57cec5SDimitry Andricstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type { }; 4090b57cec5SDimitry Andric#endif 4100b57cec5SDimitry Andric 4110b57cec5SDimitry Andric_LIBCPP_FUNC_VIS 4120b57cec5SDimitry Andricconst error_category& iostream_category() _NOEXCEPT; 4130b57cec5SDimitry Andric 4140b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 4150b57cec5SDimitry Andricerror_code 4160b57cec5SDimitry Andricmake_error_code(io_errc __e) _NOEXCEPT 4170b57cec5SDimitry Andric{ 4180b57cec5SDimitry Andric return error_code(static_cast<int>(__e), iostream_category()); 4190b57cec5SDimitry Andric} 4200b57cec5SDimitry Andric 4210b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 4220b57cec5SDimitry Andricerror_condition 4230b57cec5SDimitry Andricmake_error_condition(io_errc __e) _NOEXCEPT 4240b57cec5SDimitry Andric{ 4250b57cec5SDimitry Andric return error_condition(static_cast<int>(__e), iostream_category()); 4260b57cec5SDimitry Andric} 4270b57cec5SDimitry Andric 4280b57cec5SDimitry Andricclass _LIBCPP_EXCEPTION_ABI ios_base::failure 4290b57cec5SDimitry Andric : public system_error 4300b57cec5SDimitry Andric{ 4310b57cec5SDimitry Andricpublic: 4320b57cec5SDimitry Andric explicit failure(const string& __msg, const error_code& __ec = io_errc::stream); 4330b57cec5SDimitry Andric explicit failure(const char* __msg, const error_code& __ec = io_errc::stream); 4349ec406dcSDimitry Andric failure(const failure&) _NOEXCEPT = default; 4359ec406dcSDimitry Andric virtual ~failure() _NOEXCEPT; 4360b57cec5SDimitry Andric}; 4370b57cec5SDimitry Andric 4380b57cec5SDimitry Andric_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY 4390b57cec5SDimitry Andricvoid __throw_failure(char const* __msg) { 4400b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4410b57cec5SDimitry Andric throw ios_base::failure(__msg); 4420b57cec5SDimitry Andric#else 4430b57cec5SDimitry Andric ((void)__msg); 4440b57cec5SDimitry Andric _VSTD::abort(); 4450b57cec5SDimitry Andric#endif 4460b57cec5SDimitry Andric} 4470b57cec5SDimitry Andric 4480b57cec5SDimitry Andricclass _LIBCPP_TYPE_VIS ios_base::Init 4490b57cec5SDimitry Andric{ 4500b57cec5SDimitry Andricpublic: 4510b57cec5SDimitry Andric Init(); 4520b57cec5SDimitry Andric ~Init(); 4530b57cec5SDimitry Andric}; 4540b57cec5SDimitry Andric 4550b57cec5SDimitry Andric// fmtflags 4560b57cec5SDimitry Andric 4570b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 4580b57cec5SDimitry Andricios_base::fmtflags 4590b57cec5SDimitry Andricios_base::flags() const 4600b57cec5SDimitry Andric{ 4610b57cec5SDimitry Andric return __fmtflags_; 4620b57cec5SDimitry Andric} 4630b57cec5SDimitry Andric 4640b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 4650b57cec5SDimitry Andricios_base::fmtflags 4660b57cec5SDimitry Andricios_base::flags(fmtflags __fmtfl) 4670b57cec5SDimitry Andric{ 4680b57cec5SDimitry Andric fmtflags __r = __fmtflags_; 4690b57cec5SDimitry Andric __fmtflags_ = __fmtfl; 4700b57cec5SDimitry Andric return __r; 4710b57cec5SDimitry Andric} 4720b57cec5SDimitry Andric 4730b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 4740b57cec5SDimitry Andricios_base::fmtflags 4750b57cec5SDimitry Andricios_base::setf(fmtflags __fmtfl) 4760b57cec5SDimitry Andric{ 4770b57cec5SDimitry Andric fmtflags __r = __fmtflags_; 4780b57cec5SDimitry Andric __fmtflags_ |= __fmtfl; 4790b57cec5SDimitry Andric return __r; 4800b57cec5SDimitry Andric} 4810b57cec5SDimitry Andric 4820b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 4830b57cec5SDimitry Andricvoid 4840b57cec5SDimitry Andricios_base::unsetf(fmtflags __mask) 4850b57cec5SDimitry Andric{ 4860b57cec5SDimitry Andric __fmtflags_ &= ~__mask; 4870b57cec5SDimitry Andric} 4880b57cec5SDimitry Andric 4890b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 4900b57cec5SDimitry Andricios_base::fmtflags 4910b57cec5SDimitry Andricios_base::setf(fmtflags __fmtfl, fmtflags __mask) 4920b57cec5SDimitry Andric{ 4930b57cec5SDimitry Andric fmtflags __r = __fmtflags_; 4940b57cec5SDimitry Andric unsetf(__mask); 4950b57cec5SDimitry Andric __fmtflags_ |= __fmtfl & __mask; 4960b57cec5SDimitry Andric return __r; 4970b57cec5SDimitry Andric} 4980b57cec5SDimitry Andric 4990b57cec5SDimitry Andric// precision 5000b57cec5SDimitry Andric 5010b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5020b57cec5SDimitry Andricstreamsize 5030b57cec5SDimitry Andricios_base::precision() const 5040b57cec5SDimitry Andric{ 5050b57cec5SDimitry Andric return __precision_; 5060b57cec5SDimitry Andric} 5070b57cec5SDimitry Andric 5080b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5090b57cec5SDimitry Andricstreamsize 5100b57cec5SDimitry Andricios_base::precision(streamsize __prec) 5110b57cec5SDimitry Andric{ 5120b57cec5SDimitry Andric streamsize __r = __precision_; 5130b57cec5SDimitry Andric __precision_ = __prec; 5140b57cec5SDimitry Andric return __r; 5150b57cec5SDimitry Andric} 5160b57cec5SDimitry Andric 5170b57cec5SDimitry Andric// width 5180b57cec5SDimitry Andric 5190b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5200b57cec5SDimitry Andricstreamsize 5210b57cec5SDimitry Andricios_base::width() const 5220b57cec5SDimitry Andric{ 5230b57cec5SDimitry Andric return __width_; 5240b57cec5SDimitry Andric} 5250b57cec5SDimitry Andric 5260b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5270b57cec5SDimitry Andricstreamsize 5280b57cec5SDimitry Andricios_base::width(streamsize __wide) 5290b57cec5SDimitry Andric{ 5300b57cec5SDimitry Andric streamsize __r = __width_; 5310b57cec5SDimitry Andric __width_ = __wide; 5320b57cec5SDimitry Andric return __r; 5330b57cec5SDimitry Andric} 5340b57cec5SDimitry Andric 5350b57cec5SDimitry Andric// iostate 5360b57cec5SDimitry Andric 5370b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5380b57cec5SDimitry Andricios_base::iostate 5390b57cec5SDimitry Andricios_base::rdstate() const 5400b57cec5SDimitry Andric{ 5410b57cec5SDimitry Andric return __rdstate_; 5420b57cec5SDimitry Andric} 5430b57cec5SDimitry Andric 5440b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5450b57cec5SDimitry Andricvoid 5460b57cec5SDimitry Andricios_base::setstate(iostate __state) 5470b57cec5SDimitry Andric{ 5480b57cec5SDimitry Andric clear(__rdstate_ | __state); 5490b57cec5SDimitry Andric} 5500b57cec5SDimitry Andric 5510b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5520b57cec5SDimitry Andricbool 5530b57cec5SDimitry Andricios_base::good() const 5540b57cec5SDimitry Andric{ 5550b57cec5SDimitry Andric return __rdstate_ == 0; 5560b57cec5SDimitry Andric} 5570b57cec5SDimitry Andric 5580b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5590b57cec5SDimitry Andricbool 5600b57cec5SDimitry Andricios_base::eof() const 5610b57cec5SDimitry Andric{ 5620b57cec5SDimitry Andric return (__rdstate_ & eofbit) != 0; 5630b57cec5SDimitry Andric} 5640b57cec5SDimitry Andric 5650b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5660b57cec5SDimitry Andricbool 5670b57cec5SDimitry Andricios_base::fail() const 5680b57cec5SDimitry Andric{ 5690b57cec5SDimitry Andric return (__rdstate_ & (failbit | badbit)) != 0; 5700b57cec5SDimitry Andric} 5710b57cec5SDimitry Andric 5720b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5730b57cec5SDimitry Andricbool 5740b57cec5SDimitry Andricios_base::bad() const 5750b57cec5SDimitry Andric{ 5760b57cec5SDimitry Andric return (__rdstate_ & badbit) != 0; 5770b57cec5SDimitry Andric} 5780b57cec5SDimitry Andric 5790b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5800b57cec5SDimitry Andricios_base::iostate 5810b57cec5SDimitry Andricios_base::exceptions() const 5820b57cec5SDimitry Andric{ 5830b57cec5SDimitry Andric return __exceptions_; 5840b57cec5SDimitry Andric} 5850b57cec5SDimitry Andric 5860b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 5870b57cec5SDimitry Andricvoid 5880b57cec5SDimitry Andricios_base::exceptions(iostate __iostate) 5890b57cec5SDimitry Andric{ 5900b57cec5SDimitry Andric __exceptions_ = __iostate; 5910b57cec5SDimitry Andric clear(__rdstate_); 5920b57cec5SDimitry Andric} 5930b57cec5SDimitry Andric 5940b57cec5SDimitry Andric#if defined(_LIBCPP_CXX03_LANG) 5950b57cec5SDimitry Andricstruct _LIBCPP_TYPE_VIS __cxx03_bool { 5960b57cec5SDimitry Andric typedef void (__cxx03_bool::*__bool_type)(); 5970b57cec5SDimitry Andric void __true_value() {} 5980b57cec5SDimitry Andric}; 5990b57cec5SDimitry Andric#endif 6000b57cec5SDimitry Andric 6010b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6020b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ios 6030b57cec5SDimitry Andric : public ios_base 6040b57cec5SDimitry Andric{ 6050b57cec5SDimitry Andricpublic: 6060b57cec5SDimitry Andric // types: 6070b57cec5SDimitry Andric typedef _CharT char_type; 6080b57cec5SDimitry Andric typedef _Traits traits_type; 6090b57cec5SDimitry Andric 6100b57cec5SDimitry Andric typedef typename traits_type::int_type int_type; 6110b57cec5SDimitry Andric typedef typename traits_type::pos_type pos_type; 6120b57cec5SDimitry Andric typedef typename traits_type::off_type off_type; 6130b57cec5SDimitry Andric 6140b57cec5SDimitry Andric static_assert((is_same<_CharT, typename traits_type::char_type>::value), 6150b57cec5SDimitry Andric "traits_type::char_type must be the same type as CharT"); 6160b57cec5SDimitry Andric 6170b57cec5SDimitry Andric // __true_value will generate undefined references when linking unless 6180b57cec5SDimitry Andric // we give it internal linkage. 6190b57cec5SDimitry Andric 6200b57cec5SDimitry Andric#if defined(_LIBCPP_CXX03_LANG) 6210b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6220b57cec5SDimitry Andric operator __cxx03_bool::__bool_type() const { 6230b57cec5SDimitry Andric return !fail() ? &__cxx03_bool::__true_value : nullptr; 6240b57cec5SDimitry Andric } 6250b57cec5SDimitry Andric#else 6260b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6270b57cec5SDimitry Andric _LIBCPP_EXPLICIT operator bool() const {return !fail();} 6280b57cec5SDimitry Andric#endif 6290b57cec5SDimitry Andric 6300b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool operator!() const {return fail();} 6310b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY iostate rdstate() const {return ios_base::rdstate();} 6320b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY void clear(iostate __state = goodbit) {ios_base::clear(__state);} 6330b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state) {ios_base::setstate(__state);} 6340b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool good() const {return ios_base::good();} 6350b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool eof() const {return ios_base::eof();} 6360b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool fail() const {return ios_base::fail();} 6370b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY bool bad() const {return ios_base::bad();} 6380b57cec5SDimitry Andric 6390b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY iostate exceptions() const {return ios_base::exceptions();} 6400b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate) {ios_base::exceptions(__iostate);} 6410b57cec5SDimitry Andric 6420b57cec5SDimitry Andric // 27.5.4.1 Constructor/destructor: 6430b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6440b57cec5SDimitry Andric explicit basic_ios(basic_streambuf<char_type,traits_type>* __sb); 6450b57cec5SDimitry Andric virtual ~basic_ios(); 6460b57cec5SDimitry Andric 6470b57cec5SDimitry Andric // 27.5.4.2 Members: 6480b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6490b57cec5SDimitry Andric basic_ostream<char_type, traits_type>* tie() const; 6500b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6510b57cec5SDimitry Andric basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr); 6520b57cec5SDimitry Andric 6530b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6540b57cec5SDimitry Andric basic_streambuf<char_type, traits_type>* rdbuf() const; 6550b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6560b57cec5SDimitry Andric basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb); 6570b57cec5SDimitry Andric 6580b57cec5SDimitry Andric basic_ios& copyfmt(const basic_ios& __rhs); 6590b57cec5SDimitry Andric 6600b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6610b57cec5SDimitry Andric char_type fill() const; 6620b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6630b57cec5SDimitry Andric char_type fill(char_type __ch); 6640b57cec5SDimitry Andric 6650b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6660b57cec5SDimitry Andric locale imbue(const locale& __loc); 6670b57cec5SDimitry Andric 6680b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6690b57cec5SDimitry Andric char narrow(char_type __c, char __dfault) const; 6700b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6710b57cec5SDimitry Andric char_type widen(char __c) const; 6720b57cec5SDimitry Andric 6730b57cec5SDimitry Andricprotected: 6740b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6750b57cec5SDimitry Andric basic_ios() {// purposefully does no initialization 6760b57cec5SDimitry Andric } 6770b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6780b57cec5SDimitry Andric void init(basic_streambuf<char_type, traits_type>* __sb); 6790b57cec5SDimitry Andric 6800b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6810b57cec5SDimitry Andric void move(basic_ios& __rhs); 6820b57cec5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG 6830b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6840b57cec5SDimitry Andric void move(basic_ios&& __rhs) {move(__rhs);} 6850b57cec5SDimitry Andric#endif 6860b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6870b57cec5SDimitry Andric void swap(basic_ios& __rhs) _NOEXCEPT; 6880b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 6890b57cec5SDimitry Andric void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb); 6900b57cec5SDimitry Andricprivate: 6910b57cec5SDimitry Andric basic_ostream<char_type, traits_type>* __tie_; 6920b57cec5SDimitry Andric mutable int_type __fill_; 6930b57cec5SDimitry Andric}; 6940b57cec5SDimitry Andric 6950b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6960b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 6970b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type,traits_type>* __sb) 6980b57cec5SDimitry Andric{ 6990b57cec5SDimitry Andric init(__sb); 7000b57cec5SDimitry Andric} 7010b57cec5SDimitry Andric 7020b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7030b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::~basic_ios() 7040b57cec5SDimitry Andric{ 7050b57cec5SDimitry Andric} 7060b57cec5SDimitry Andric 7070b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7080b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7090b57cec5SDimitry Andricvoid 7100b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb) 7110b57cec5SDimitry Andric{ 7120b57cec5SDimitry Andric ios_base::init(__sb); 713*e8d8bef9SDimitry Andric __tie_ = nullptr; 7140b57cec5SDimitry Andric __fill_ = traits_type::eof(); 7150b57cec5SDimitry Andric} 7160b57cec5SDimitry Andric 7170b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7180b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7190b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>* 7200b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::tie() const 7210b57cec5SDimitry Andric{ 7220b57cec5SDimitry Andric return __tie_; 7230b57cec5SDimitry Andric} 7240b57cec5SDimitry Andric 7250b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7260b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7270b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>* 7280b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr) 7290b57cec5SDimitry Andric{ 7300b57cec5SDimitry Andric basic_ostream<char_type, traits_type>* __r = __tie_; 7310b57cec5SDimitry Andric __tie_ = __tiestr; 7320b57cec5SDimitry Andric return __r; 7330b57cec5SDimitry Andric} 7340b57cec5SDimitry Andric 7350b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7360b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7370b57cec5SDimitry Andricbasic_streambuf<_CharT, _Traits>* 7380b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::rdbuf() const 7390b57cec5SDimitry Andric{ 7400b57cec5SDimitry Andric return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf()); 7410b57cec5SDimitry Andric} 7420b57cec5SDimitry Andric 7430b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7440b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7450b57cec5SDimitry Andricbasic_streambuf<_CharT, _Traits>* 7460b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb) 7470b57cec5SDimitry Andric{ 7480b57cec5SDimitry Andric basic_streambuf<char_type, traits_type>* __r = rdbuf(); 7490b57cec5SDimitry Andric ios_base::rdbuf(__sb); 7500b57cec5SDimitry Andric return __r; 7510b57cec5SDimitry Andric} 7520b57cec5SDimitry Andric 7530b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7540b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7550b57cec5SDimitry Andriclocale 7560b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::imbue(const locale& __loc) 7570b57cec5SDimitry Andric{ 7580b57cec5SDimitry Andric locale __r = getloc(); 7590b57cec5SDimitry Andric ios_base::imbue(__loc); 7600b57cec5SDimitry Andric if (rdbuf()) 7610b57cec5SDimitry Andric rdbuf()->pubimbue(__loc); 7620b57cec5SDimitry Andric return __r; 7630b57cec5SDimitry Andric} 7640b57cec5SDimitry Andric 7650b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7660b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7670b57cec5SDimitry Andricchar 7680b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const 7690b57cec5SDimitry Andric{ 7700b57cec5SDimitry Andric return use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault); 7710b57cec5SDimitry Andric} 7720b57cec5SDimitry Andric 7730b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7740b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7750b57cec5SDimitry Andric_CharT 7760b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::widen(char __c) const 7770b57cec5SDimitry Andric{ 7780b57cec5SDimitry Andric return use_facet<ctype<char_type> >(getloc()).widen(__c); 7790b57cec5SDimitry Andric} 7800b57cec5SDimitry Andric 7810b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7820b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7830b57cec5SDimitry Andric_CharT 7840b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::fill() const 7850b57cec5SDimitry Andric{ 7860b57cec5SDimitry Andric if (traits_type::eq_int_type(traits_type::eof(), __fill_)) 7870b57cec5SDimitry Andric __fill_ = widen(' '); 7880b57cec5SDimitry Andric return __fill_; 7890b57cec5SDimitry Andric} 7900b57cec5SDimitry Andric 7910b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7920b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 7930b57cec5SDimitry Andric_CharT 7940b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::fill(char_type __ch) 7950b57cec5SDimitry Andric{ 7960b57cec5SDimitry Andric char_type __r = __fill_; 7970b57cec5SDimitry Andric __fill_ = __ch; 7980b57cec5SDimitry Andric return __r; 7990b57cec5SDimitry Andric} 8000b57cec5SDimitry Andric 8010b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 8020b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>& 8030b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) 8040b57cec5SDimitry Andric{ 8050b57cec5SDimitry Andric if (this != &__rhs) 8060b57cec5SDimitry Andric { 8070b57cec5SDimitry Andric __call_callbacks(erase_event); 8080b57cec5SDimitry Andric ios_base::copyfmt(__rhs); 8090b57cec5SDimitry Andric __tie_ = __rhs.__tie_; 8100b57cec5SDimitry Andric __fill_ = __rhs.__fill_; 8110b57cec5SDimitry Andric __call_callbacks(copyfmt_event); 8120b57cec5SDimitry Andric exceptions(__rhs.exceptions()); 8130b57cec5SDimitry Andric } 8140b57cec5SDimitry Andric return *this; 8150b57cec5SDimitry Andric} 8160b57cec5SDimitry Andric 8170b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 8180b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 8190b57cec5SDimitry Andricvoid 8200b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::move(basic_ios& __rhs) 8210b57cec5SDimitry Andric{ 8220b57cec5SDimitry Andric ios_base::move(__rhs); 8230b57cec5SDimitry Andric __tie_ = __rhs.__tie_; 824*e8d8bef9SDimitry Andric __rhs.__tie_ = nullptr; 8250b57cec5SDimitry Andric __fill_ = __rhs.__fill_; 8260b57cec5SDimitry Andric} 8270b57cec5SDimitry Andric 8280b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 8290b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 8300b57cec5SDimitry Andricvoid 8310b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT 8320b57cec5SDimitry Andric{ 8330b57cec5SDimitry Andric ios_base::swap(__rhs); 8340b57cec5SDimitry Andric _VSTD::swap(__tie_, __rhs.__tie_); 8350b57cec5SDimitry Andric _VSTD::swap(__fill_, __rhs.__fill_); 8360b57cec5SDimitry Andric} 8370b57cec5SDimitry Andric 8380b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 8390b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 8400b57cec5SDimitry Andricvoid 8410b57cec5SDimitry Andricbasic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb) 8420b57cec5SDimitry Andric{ 8430b57cec5SDimitry Andric ios_base::set_rdbuf(__sb); 8440b57cec5SDimitry Andric} 8450b57cec5SDimitry Andric 8465ffd83dbSDimitry Andricinline 8470b57cec5SDimitry Andricios_base& 8480b57cec5SDimitry Andricboolalpha(ios_base& __str) 8490b57cec5SDimitry Andric{ 8500b57cec5SDimitry Andric __str.setf(ios_base::boolalpha); 8510b57cec5SDimitry Andric return __str; 8520b57cec5SDimitry Andric} 8530b57cec5SDimitry Andric 8545ffd83dbSDimitry Andricinline 8550b57cec5SDimitry Andricios_base& 8560b57cec5SDimitry Andricnoboolalpha(ios_base& __str) 8570b57cec5SDimitry Andric{ 8580b57cec5SDimitry Andric __str.unsetf(ios_base::boolalpha); 8590b57cec5SDimitry Andric return __str; 8600b57cec5SDimitry Andric} 8610b57cec5SDimitry Andric 8625ffd83dbSDimitry Andricinline 8630b57cec5SDimitry Andricios_base& 8640b57cec5SDimitry Andricshowbase(ios_base& __str) 8650b57cec5SDimitry Andric{ 8660b57cec5SDimitry Andric __str.setf(ios_base::showbase); 8670b57cec5SDimitry Andric return __str; 8680b57cec5SDimitry Andric} 8690b57cec5SDimitry Andric 8705ffd83dbSDimitry Andricinline 8710b57cec5SDimitry Andricios_base& 8720b57cec5SDimitry Andricnoshowbase(ios_base& __str) 8730b57cec5SDimitry Andric{ 8740b57cec5SDimitry Andric __str.unsetf(ios_base::showbase); 8750b57cec5SDimitry Andric return __str; 8760b57cec5SDimitry Andric} 8770b57cec5SDimitry Andric 8785ffd83dbSDimitry Andricinline 8790b57cec5SDimitry Andricios_base& 8800b57cec5SDimitry Andricshowpoint(ios_base& __str) 8810b57cec5SDimitry Andric{ 8820b57cec5SDimitry Andric __str.setf(ios_base::showpoint); 8830b57cec5SDimitry Andric return __str; 8840b57cec5SDimitry Andric} 8850b57cec5SDimitry Andric 8865ffd83dbSDimitry Andricinline 8870b57cec5SDimitry Andricios_base& 8880b57cec5SDimitry Andricnoshowpoint(ios_base& __str) 8890b57cec5SDimitry Andric{ 8900b57cec5SDimitry Andric __str.unsetf(ios_base::showpoint); 8910b57cec5SDimitry Andric return __str; 8920b57cec5SDimitry Andric} 8930b57cec5SDimitry Andric 8945ffd83dbSDimitry Andricinline 8950b57cec5SDimitry Andricios_base& 8960b57cec5SDimitry Andricshowpos(ios_base& __str) 8970b57cec5SDimitry Andric{ 8980b57cec5SDimitry Andric __str.setf(ios_base::showpos); 8990b57cec5SDimitry Andric return __str; 9000b57cec5SDimitry Andric} 9010b57cec5SDimitry Andric 9025ffd83dbSDimitry Andricinline 9030b57cec5SDimitry Andricios_base& 9040b57cec5SDimitry Andricnoshowpos(ios_base& __str) 9050b57cec5SDimitry Andric{ 9060b57cec5SDimitry Andric __str.unsetf(ios_base::showpos); 9070b57cec5SDimitry Andric return __str; 9080b57cec5SDimitry Andric} 9090b57cec5SDimitry Andric 9105ffd83dbSDimitry Andricinline 9110b57cec5SDimitry Andricios_base& 9120b57cec5SDimitry Andricskipws(ios_base& __str) 9130b57cec5SDimitry Andric{ 9140b57cec5SDimitry Andric __str.setf(ios_base::skipws); 9150b57cec5SDimitry Andric return __str; 9160b57cec5SDimitry Andric} 9170b57cec5SDimitry Andric 9185ffd83dbSDimitry Andricinline 9190b57cec5SDimitry Andricios_base& 9200b57cec5SDimitry Andricnoskipws(ios_base& __str) 9210b57cec5SDimitry Andric{ 9220b57cec5SDimitry Andric __str.unsetf(ios_base::skipws); 9230b57cec5SDimitry Andric return __str; 9240b57cec5SDimitry Andric} 9250b57cec5SDimitry Andric 9265ffd83dbSDimitry Andricinline 9270b57cec5SDimitry Andricios_base& 9280b57cec5SDimitry Andricuppercase(ios_base& __str) 9290b57cec5SDimitry Andric{ 9300b57cec5SDimitry Andric __str.setf(ios_base::uppercase); 9310b57cec5SDimitry Andric return __str; 9320b57cec5SDimitry Andric} 9330b57cec5SDimitry Andric 9345ffd83dbSDimitry Andricinline 9350b57cec5SDimitry Andricios_base& 9360b57cec5SDimitry Andricnouppercase(ios_base& __str) 9370b57cec5SDimitry Andric{ 9380b57cec5SDimitry Andric __str.unsetf(ios_base::uppercase); 9390b57cec5SDimitry Andric return __str; 9400b57cec5SDimitry Andric} 9410b57cec5SDimitry Andric 9425ffd83dbSDimitry Andricinline 9430b57cec5SDimitry Andricios_base& 9440b57cec5SDimitry Andricunitbuf(ios_base& __str) 9450b57cec5SDimitry Andric{ 9460b57cec5SDimitry Andric __str.setf(ios_base::unitbuf); 9470b57cec5SDimitry Andric return __str; 9480b57cec5SDimitry Andric} 9490b57cec5SDimitry Andric 9505ffd83dbSDimitry Andricinline 9510b57cec5SDimitry Andricios_base& 9520b57cec5SDimitry Andricnounitbuf(ios_base& __str) 9530b57cec5SDimitry Andric{ 9540b57cec5SDimitry Andric __str.unsetf(ios_base::unitbuf); 9550b57cec5SDimitry Andric return __str; 9560b57cec5SDimitry Andric} 9570b57cec5SDimitry Andric 9585ffd83dbSDimitry Andricinline 9590b57cec5SDimitry Andricios_base& 9600b57cec5SDimitry Andricinternal(ios_base& __str) 9610b57cec5SDimitry Andric{ 9620b57cec5SDimitry Andric __str.setf(ios_base::internal, ios_base::adjustfield); 9630b57cec5SDimitry Andric return __str; 9640b57cec5SDimitry Andric} 9650b57cec5SDimitry Andric 9665ffd83dbSDimitry Andricinline 9670b57cec5SDimitry Andricios_base& 9680b57cec5SDimitry Andricleft(ios_base& __str) 9690b57cec5SDimitry Andric{ 9700b57cec5SDimitry Andric __str.setf(ios_base::left, ios_base::adjustfield); 9710b57cec5SDimitry Andric return __str; 9720b57cec5SDimitry Andric} 9730b57cec5SDimitry Andric 9745ffd83dbSDimitry Andricinline 9750b57cec5SDimitry Andricios_base& 9760b57cec5SDimitry Andricright(ios_base& __str) 9770b57cec5SDimitry Andric{ 9780b57cec5SDimitry Andric __str.setf(ios_base::right, ios_base::adjustfield); 9790b57cec5SDimitry Andric return __str; 9800b57cec5SDimitry Andric} 9810b57cec5SDimitry Andric 9825ffd83dbSDimitry Andricinline 9830b57cec5SDimitry Andricios_base& 9840b57cec5SDimitry Andricdec(ios_base& __str) 9850b57cec5SDimitry Andric{ 9860b57cec5SDimitry Andric __str.setf(ios_base::dec, ios_base::basefield); 9870b57cec5SDimitry Andric return __str; 9880b57cec5SDimitry Andric} 9890b57cec5SDimitry Andric 9905ffd83dbSDimitry Andricinline 9910b57cec5SDimitry Andricios_base& 9920b57cec5SDimitry Andrichex(ios_base& __str) 9930b57cec5SDimitry Andric{ 9940b57cec5SDimitry Andric __str.setf(ios_base::hex, ios_base::basefield); 9950b57cec5SDimitry Andric return __str; 9960b57cec5SDimitry Andric} 9970b57cec5SDimitry Andric 9985ffd83dbSDimitry Andricinline 9990b57cec5SDimitry Andricios_base& 10000b57cec5SDimitry Andricoct(ios_base& __str) 10010b57cec5SDimitry Andric{ 10020b57cec5SDimitry Andric __str.setf(ios_base::oct, ios_base::basefield); 10030b57cec5SDimitry Andric return __str; 10040b57cec5SDimitry Andric} 10050b57cec5SDimitry Andric 10065ffd83dbSDimitry Andricinline 10070b57cec5SDimitry Andricios_base& 10080b57cec5SDimitry Andricfixed(ios_base& __str) 10090b57cec5SDimitry Andric{ 10100b57cec5SDimitry Andric __str.setf(ios_base::fixed, ios_base::floatfield); 10110b57cec5SDimitry Andric return __str; 10120b57cec5SDimitry Andric} 10130b57cec5SDimitry Andric 10145ffd83dbSDimitry Andricinline 10150b57cec5SDimitry Andricios_base& 10160b57cec5SDimitry Andricscientific(ios_base& __str) 10170b57cec5SDimitry Andric{ 10180b57cec5SDimitry Andric __str.setf(ios_base::scientific, ios_base::floatfield); 10190b57cec5SDimitry Andric return __str; 10200b57cec5SDimitry Andric} 10210b57cec5SDimitry Andric 10225ffd83dbSDimitry Andricinline 10230b57cec5SDimitry Andricios_base& 10240b57cec5SDimitry Andrichexfloat(ios_base& __str) 10250b57cec5SDimitry Andric{ 10260b57cec5SDimitry Andric __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); 10270b57cec5SDimitry Andric return __str; 10280b57cec5SDimitry Andric} 10290b57cec5SDimitry Andric 10305ffd83dbSDimitry Andricinline 10310b57cec5SDimitry Andricios_base& 10320b57cec5SDimitry Andricdefaultfloat(ios_base& __str) 10330b57cec5SDimitry Andric{ 10340b57cec5SDimitry Andric __str.unsetf(ios_base::floatfield); 10350b57cec5SDimitry Andric return __str; 10360b57cec5SDimitry Andric} 10370b57cec5SDimitry Andric 10380b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD 10390b57cec5SDimitry Andric 10400b57cec5SDimitry Andric#endif // _LIBCPP_IOS 1041