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