xref: /openbsd/gnu/llvm/libcxx/include/ios (revision 037e7968)
146035553Spatrick// -*- C++ -*-
246035553Spatrick//===---------------------------- ios -------------------------------------===//
346035553Spatrick//
446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
546035553Spatrick// See https://llvm.org/LICENSE.txt for license information.
646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
746035553Spatrick//
846035553Spatrick//===----------------------------------------------------------------------===//
946035553Spatrick
1046035553Spatrick#ifndef _LIBCPP_IOS
1146035553Spatrick#define _LIBCPP_IOS
1246035553Spatrick
1346035553Spatrick/*
1446035553Spatrick    ios synopsis
1546035553Spatrick
1646035553Spatrick#include <iosfwd>
1746035553Spatrick
1846035553Spatricknamespace std
1946035553Spatrick{
2046035553Spatrick
2146035553Spatricktypedef OFF_T streamoff;
2246035553Spatricktypedef SZ_T streamsize;
2346035553Spatricktemplate <class stateT> class fpos;
2446035553Spatrick
2546035553Spatrickclass ios_base
2646035553Spatrick{
2746035553Spatrickpublic:
2846035553Spatrick    class failure;
2946035553Spatrick
3046035553Spatrick    typedef T1 fmtflags;
3146035553Spatrick    static constexpr fmtflags boolalpha;
3246035553Spatrick    static constexpr fmtflags dec;
3346035553Spatrick    static constexpr fmtflags fixed;
3446035553Spatrick    static constexpr fmtflags hex;
3546035553Spatrick    static constexpr fmtflags internal;
3646035553Spatrick    static constexpr fmtflags left;
3746035553Spatrick    static constexpr fmtflags oct;
3846035553Spatrick    static constexpr fmtflags right;
3946035553Spatrick    static constexpr fmtflags scientific;
4046035553Spatrick    static constexpr fmtflags showbase;
4146035553Spatrick    static constexpr fmtflags showpoint;
4246035553Spatrick    static constexpr fmtflags showpos;
4346035553Spatrick    static constexpr fmtflags skipws;
4446035553Spatrick    static constexpr fmtflags unitbuf;
4546035553Spatrick    static constexpr fmtflags uppercase;
4646035553Spatrick    static constexpr fmtflags adjustfield;
4746035553Spatrick    static constexpr fmtflags basefield;
4846035553Spatrick    static constexpr fmtflags floatfield;
4946035553Spatrick
5046035553Spatrick    typedef T2 iostate;
5146035553Spatrick    static constexpr iostate badbit;
5246035553Spatrick    static constexpr iostate eofbit;
5346035553Spatrick    static constexpr iostate failbit;
5446035553Spatrick    static constexpr iostate goodbit;
5546035553Spatrick
5646035553Spatrick    typedef T3 openmode;
5746035553Spatrick    static constexpr openmode app;
5846035553Spatrick    static constexpr openmode ate;
5946035553Spatrick    static constexpr openmode binary;
6046035553Spatrick    static constexpr openmode in;
6146035553Spatrick    static constexpr openmode out;
6246035553Spatrick    static constexpr openmode trunc;
6346035553Spatrick
6446035553Spatrick    typedef T4 seekdir;
6546035553Spatrick    static constexpr seekdir beg;
6646035553Spatrick    static constexpr seekdir cur;
6746035553Spatrick    static constexpr seekdir end;
6846035553Spatrick
6946035553Spatrick    class Init;
7046035553Spatrick
7146035553Spatrick    // 27.5.2.2 fmtflags state:
7246035553Spatrick    fmtflags flags() const;
7346035553Spatrick    fmtflags flags(fmtflags fmtfl);
7446035553Spatrick    fmtflags setf(fmtflags fmtfl);
7546035553Spatrick    fmtflags setf(fmtflags fmtfl, fmtflags mask);
7646035553Spatrick    void unsetf(fmtflags mask);
7746035553Spatrick
7846035553Spatrick    streamsize precision() const;
7946035553Spatrick    streamsize precision(streamsize prec);
8046035553Spatrick    streamsize width() const;
8146035553Spatrick    streamsize width(streamsize wide);
8246035553Spatrick
8346035553Spatrick    // 27.5.2.3 locales:
8446035553Spatrick    locale imbue(const locale& loc);
8546035553Spatrick    locale getloc() const;
8646035553Spatrick
8746035553Spatrick    // 27.5.2.5 storage:
8846035553Spatrick    static int xalloc();
8946035553Spatrick    long& iword(int index);
9046035553Spatrick    void*& pword(int index);
9146035553Spatrick
9246035553Spatrick    // destructor
9346035553Spatrick    virtual ~ios_base();
9446035553Spatrick
9546035553Spatrick    // 27.5.2.6 callbacks;
9646035553Spatrick    enum event { erase_event, imbue_event, copyfmt_event };
9746035553Spatrick    typedef void (*event_callback)(event, ios_base&, int index);
9846035553Spatrick    void register_callback(event_callback fn, int index);
9946035553Spatrick
10046035553Spatrick    ios_base(const ios_base&) = delete;
10146035553Spatrick    ios_base& operator=(const ios_base&) = delete;
10246035553Spatrick
10346035553Spatrick    static bool sync_with_stdio(bool sync = true);
10446035553Spatrick
10546035553Spatrickprotected:
10646035553Spatrick    ios_base();
10746035553Spatrick};
10846035553Spatrick
10946035553Spatricktemplate <class charT, class traits = char_traits<charT> >
11046035553Spatrickclass basic_ios
11146035553Spatrick    : public ios_base
11246035553Spatrick{
11346035553Spatrickpublic:
11446035553Spatrick    // types:
11546035553Spatrick    typedef charT char_type;
11646035553Spatrick    typedef typename traits::int_type int_type;  // removed in C++17
11746035553Spatrick    typedef typename traits::pos_type pos_type;  // removed in C++17
11846035553Spatrick    typedef typename traits::off_type off_type;  // removed in C++17
11946035553Spatrick    typedef traits traits_type;
12046035553Spatrick
12146035553Spatrick    operator unspecified-bool-type() const;
12246035553Spatrick    bool operator!() const;
12346035553Spatrick    iostate rdstate() const;
12446035553Spatrick    void clear(iostate state = goodbit);
12546035553Spatrick    void setstate(iostate state);
12646035553Spatrick    bool good() const;
12746035553Spatrick    bool eof() const;
12846035553Spatrick    bool fail() const;
12946035553Spatrick    bool bad() const;
13046035553Spatrick
13146035553Spatrick    iostate exceptions() const;
13246035553Spatrick    void exceptions(iostate except);
13346035553Spatrick
13446035553Spatrick    // 27.5.4.1 Constructor/destructor:
13546035553Spatrick    explicit basic_ios(basic_streambuf<charT,traits>* sb);
13646035553Spatrick    virtual ~basic_ios();
13746035553Spatrick
13846035553Spatrick    // 27.5.4.2 Members:
13946035553Spatrick    basic_ostream<charT,traits>* tie() const;
14046035553Spatrick    basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr);
14146035553Spatrick
14246035553Spatrick    basic_streambuf<charT,traits>* rdbuf() const;
14346035553Spatrick    basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb);
14446035553Spatrick
14546035553Spatrick    basic_ios& copyfmt(const basic_ios& rhs);
14646035553Spatrick
14746035553Spatrick    char_type fill() const;
14846035553Spatrick    char_type fill(char_type ch);
14946035553Spatrick
15046035553Spatrick    locale imbue(const locale& loc);
15146035553Spatrick
15246035553Spatrick    char narrow(char_type c, char dfault) const;
15346035553Spatrick    char_type widen(char c) const;
15446035553Spatrick
15546035553Spatrick    basic_ios(const basic_ios& ) = delete;
15646035553Spatrick    basic_ios& operator=(const basic_ios&) = delete;
15746035553Spatrick
15846035553Spatrickprotected:
15946035553Spatrick    basic_ios();
16046035553Spatrick    void init(basic_streambuf<charT,traits>* sb);
16146035553Spatrick    void move(basic_ios& rhs);
16246035553Spatrick    void swap(basic_ios& rhs) noexcept;
16346035553Spatrick    void set_rdbuf(basic_streambuf<charT, traits>* sb);
16446035553Spatrick};
16546035553Spatrick
16646035553Spatrick// 27.5.5, manipulators:
16746035553Spatrickios_base& boolalpha (ios_base& str);
16846035553Spatrickios_base& noboolalpha(ios_base& str);
16946035553Spatrickios_base& showbase (ios_base& str);
17046035553Spatrickios_base& noshowbase (ios_base& str);
17146035553Spatrickios_base& showpoint (ios_base& str);
17246035553Spatrickios_base& noshowpoint(ios_base& str);
17346035553Spatrickios_base& showpos (ios_base& str);
17446035553Spatrickios_base& noshowpos (ios_base& str);
17546035553Spatrickios_base& skipws (ios_base& str);
17646035553Spatrickios_base& noskipws (ios_base& str);
17746035553Spatrickios_base& uppercase (ios_base& str);
17846035553Spatrickios_base& nouppercase(ios_base& str);
17946035553Spatrickios_base& unitbuf (ios_base& str);
18046035553Spatrickios_base& nounitbuf (ios_base& str);
18146035553Spatrick
18246035553Spatrick// 27.5.5.2 adjustfield:
18346035553Spatrickios_base& internal (ios_base& str);
18446035553Spatrickios_base& left (ios_base& str);
18546035553Spatrickios_base& right (ios_base& str);
18646035553Spatrick
18746035553Spatrick// 27.5.5.3 basefield:
18846035553Spatrickios_base& dec (ios_base& str);
18946035553Spatrickios_base& hex (ios_base& str);
19046035553Spatrickios_base& oct (ios_base& str);
19146035553Spatrick
19246035553Spatrick// 27.5.5.4 floatfield:
19346035553Spatrickios_base& fixed (ios_base& str);
19446035553Spatrickios_base& scientific (ios_base& str);
19546035553Spatrickios_base& hexfloat (ios_base& str);
19646035553Spatrickios_base& defaultfloat(ios_base& str);
19746035553Spatrick
19846035553Spatrick// 27.5.5.5 error reporting:
19946035553Spatrickenum class io_errc
20046035553Spatrick{
20146035553Spatrick    stream = 1
20246035553Spatrick};
20346035553Spatrick
20446035553Spatrickconcept_map ErrorCodeEnum<io_errc> { };
20546035553Spatrickerror_code make_error_code(io_errc e) noexcept;
20646035553Spatrickerror_condition make_error_condition(io_errc e) noexcept;
20746035553Spatrickstorage-class-specifier const error_category& iostream_category() noexcept;
20846035553Spatrick
20946035553Spatrick}  // std
21046035553Spatrick
21146035553Spatrick*/
21246035553Spatrick
21346035553Spatrick#include <__config>
21446035553Spatrick#include <iosfwd>
21546035553Spatrick#include <__locale>
21646035553Spatrick#include <system_error>
21746035553Spatrick
21846035553Spatrick#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
21946035553Spatrick#include <atomic>     // for __xindex_
22046035553Spatrick#endif
22146035553Spatrick
22246035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
22346035553Spatrick#pragma GCC system_header
22446035553Spatrick#endif
22546035553Spatrick
22646035553Spatrick_LIBCPP_BEGIN_NAMESPACE_STD
22746035553Spatrick
22846035553Spatricktypedef ptrdiff_t streamsize;
22946035553Spatrick
23046035553Spatrickclass _LIBCPP_TYPE_VIS ios_base
23146035553Spatrick{
23246035553Spatrickpublic:
23346035553Spatrick    class _LIBCPP_EXCEPTION_ABI failure;
23446035553Spatrick
23546035553Spatrick    typedef unsigned int fmtflags;
23646035553Spatrick    static const fmtflags boolalpha   = 0x0001;
23746035553Spatrick    static const fmtflags dec         = 0x0002;
23846035553Spatrick    static const fmtflags fixed       = 0x0004;
23946035553Spatrick    static const fmtflags hex         = 0x0008;
24046035553Spatrick    static const fmtflags internal    = 0x0010;
24146035553Spatrick    static const fmtflags left        = 0x0020;
24246035553Spatrick    static const fmtflags oct         = 0x0040;
24346035553Spatrick    static const fmtflags right       = 0x0080;
24446035553Spatrick    static const fmtflags scientific  = 0x0100;
24546035553Spatrick    static const fmtflags showbase    = 0x0200;
24646035553Spatrick    static const fmtflags showpoint   = 0x0400;
24746035553Spatrick    static const fmtflags showpos     = 0x0800;
24846035553Spatrick    static const fmtflags skipws      = 0x1000;
24946035553Spatrick    static const fmtflags unitbuf     = 0x2000;
25046035553Spatrick    static const fmtflags uppercase   = 0x4000;
25146035553Spatrick    static const fmtflags adjustfield = left | right | internal;
25246035553Spatrick    static const fmtflags basefield   = dec | oct | hex;
25346035553Spatrick    static const fmtflags floatfield  = scientific | fixed;
25446035553Spatrick
25546035553Spatrick    typedef unsigned int iostate;
25646035553Spatrick    static const iostate badbit  = 0x1;
25746035553Spatrick    static const iostate eofbit  = 0x2;
25846035553Spatrick    static const iostate failbit = 0x4;
25946035553Spatrick    static const iostate goodbit = 0x0;
26046035553Spatrick
26146035553Spatrick    typedef unsigned int openmode;
26246035553Spatrick    static const openmode app    = 0x01;
26346035553Spatrick    static const openmode ate    = 0x02;
26446035553Spatrick    static const openmode binary = 0x04;
26546035553Spatrick    static const openmode in     = 0x08;
26646035553Spatrick    static const openmode out    = 0x10;
26746035553Spatrick    static const openmode trunc  = 0x20;
26846035553Spatrick
26946035553Spatrick    enum seekdir {beg, cur, end};
27046035553Spatrick
27146035553Spatrick#if _LIBCPP_STD_VER <= 14
27246035553Spatrick    typedef iostate      io_state;
27346035553Spatrick    typedef openmode     open_mode;
27446035553Spatrick    typedef seekdir      seek_dir;
27546035553Spatrick
27646035553Spatrick    typedef _VSTD::streamoff streamoff;
27746035553Spatrick    typedef _VSTD::streampos streampos;
27846035553Spatrick#endif
27946035553Spatrick
28046035553Spatrick    class _LIBCPP_TYPE_VIS Init;
28146035553Spatrick
28246035553Spatrick    // 27.5.2.2 fmtflags state:
28346035553Spatrick    _LIBCPP_INLINE_VISIBILITY fmtflags flags() const;
28446035553Spatrick    _LIBCPP_INLINE_VISIBILITY fmtflags flags(fmtflags __fmtfl);
28546035553Spatrick    _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl);
28646035553Spatrick    _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl, fmtflags __mask);
28746035553Spatrick    _LIBCPP_INLINE_VISIBILITY void unsetf(fmtflags __mask);
28846035553Spatrick
28946035553Spatrick    _LIBCPP_INLINE_VISIBILITY streamsize precision() const;
29046035553Spatrick    _LIBCPP_INLINE_VISIBILITY streamsize precision(streamsize __prec);
29146035553Spatrick    _LIBCPP_INLINE_VISIBILITY streamsize width() const;
29246035553Spatrick    _LIBCPP_INLINE_VISIBILITY streamsize width(streamsize __wide);
29346035553Spatrick
29446035553Spatrick    // 27.5.2.3 locales:
29546035553Spatrick    locale imbue(const locale& __loc);
29646035553Spatrick    locale getloc() const;
29746035553Spatrick
29846035553Spatrick    // 27.5.2.5 storage:
29946035553Spatrick    static int xalloc();
30046035553Spatrick    long& iword(int __index);
30146035553Spatrick    void*& pword(int __index);
30246035553Spatrick
30346035553Spatrick    // destructor
30446035553Spatrick    virtual ~ios_base();
30546035553Spatrick
30646035553Spatrick    // 27.5.2.6 callbacks;
30746035553Spatrick    enum event { erase_event, imbue_event, copyfmt_event };
30846035553Spatrick    typedef void (*event_callback)(event, ios_base&, int __index);
30946035553Spatrick    void register_callback(event_callback __fn, int __index);
31046035553Spatrick
31146035553Spatrickprivate:
31246035553Spatrick    ios_base(const ios_base&); // = delete;
31346035553Spatrick    ios_base& operator=(const ios_base&); // = delete;
31446035553Spatrick
31546035553Spatrickpublic:
31646035553Spatrick    static bool sync_with_stdio(bool __sync = true);
31746035553Spatrick
31846035553Spatrick    _LIBCPP_INLINE_VISIBILITY iostate rdstate() const;
31946035553Spatrick    void clear(iostate __state = goodbit);
32046035553Spatrick    _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state);
32146035553Spatrick
32246035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool good() const;
32346035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool eof() const;
32446035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool fail() const;
32546035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool bad() const;
32646035553Spatrick
32746035553Spatrick    _LIBCPP_INLINE_VISIBILITY iostate exceptions() const;
32846035553Spatrick    _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate);
32946035553Spatrick
33046035553Spatrick    void __set_badbit_and_consider_rethrow();
33146035553Spatrick    void __set_failbit_and_consider_rethrow();
33246035553Spatrick
33346035553Spatrick    _LIBCPP_INLINE_VISIBILITY
33446035553Spatrick    void __setstate_nothrow(iostate __state)
33546035553Spatrick    {
33646035553Spatrick        if (__rdbuf_)
33746035553Spatrick            __rdstate_ |= __state;
33846035553Spatrick        else
33946035553Spatrick            __rdstate_ |= __state | ios_base::badbit;
34046035553Spatrick    }
34146035553Spatrick
34246035553Spatrickprotected:
34346035553Spatrick    _LIBCPP_INLINE_VISIBILITY
34446035553Spatrick    ios_base() {// purposefully does no initialization
34546035553Spatrick               }
34646035553Spatrick
34746035553Spatrick    void init(void* __sb);
34846035553Spatrick    _LIBCPP_INLINE_VISIBILITY void* rdbuf() const {return __rdbuf_;}
34946035553Spatrick
35046035553Spatrick    _LIBCPP_INLINE_VISIBILITY
35146035553Spatrick    void rdbuf(void* __sb)
35246035553Spatrick    {
35346035553Spatrick        __rdbuf_ = __sb;
35446035553Spatrick        clear();
35546035553Spatrick    }
35646035553Spatrick
35746035553Spatrick    void __call_callbacks(event);
35846035553Spatrick    void copyfmt(const ios_base&);
35946035553Spatrick    void move(ios_base&);
36046035553Spatrick    void swap(ios_base&) _NOEXCEPT;
36146035553Spatrick
36246035553Spatrick    _LIBCPP_INLINE_VISIBILITY
36346035553Spatrick    void set_rdbuf(void* __sb)
36446035553Spatrick    {
36546035553Spatrick        __rdbuf_ = __sb;
36646035553Spatrick    }
36746035553Spatrick
36846035553Spatrickprivate:
36946035553Spatrick    // All data members must be scalars
37046035553Spatrick    fmtflags        __fmtflags_;
37146035553Spatrick    streamsize      __precision_;
37246035553Spatrick    streamsize      __width_;
37346035553Spatrick    iostate         __rdstate_;
37446035553Spatrick    iostate         __exceptions_;
37546035553Spatrick    void*           __rdbuf_;
37646035553Spatrick    void*           __loc_;
37746035553Spatrick    event_callback* __fn_;
37846035553Spatrick    int*            __index_;
37946035553Spatrick    size_t          __event_size_;
38046035553Spatrick    size_t          __event_cap_;
38146035553Spatrick// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only
38246035553Spatrick// enabled with clang.
38346035553Spatrick#if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS)
38446035553Spatrick    static atomic<int> __xindex_;
38546035553Spatrick#else
38646035553Spatrick    static int      __xindex_;
38746035553Spatrick#endif
38846035553Spatrick    long*           __iarray_;
38946035553Spatrick    size_t          __iarray_size_;
39046035553Spatrick    size_t          __iarray_cap_;
39146035553Spatrick    void**          __parray_;
39246035553Spatrick    size_t          __parray_size_;
39346035553Spatrick    size_t          __parray_cap_;
39446035553Spatrick};
39546035553Spatrick
39646035553Spatrick//enum class io_errc
39746035553Spatrick_LIBCPP_DECLARE_STRONG_ENUM(io_errc)
39846035553Spatrick{
39946035553Spatrick    stream = 1
40046035553Spatrick};
40146035553Spatrick_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc)
40246035553Spatrick
40346035553Spatricktemplate <>
40446035553Spatrickstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type { };
40546035553Spatrick
40646035553Spatrick#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS
40746035553Spatricktemplate <>
40846035553Spatrickstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type { };
40946035553Spatrick#endif
41046035553Spatrick
41146035553Spatrick_LIBCPP_FUNC_VIS
41246035553Spatrickconst error_category& iostream_category() _NOEXCEPT;
41346035553Spatrick
41446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
41546035553Spatrickerror_code
41646035553Spatrickmake_error_code(io_errc __e) _NOEXCEPT
41746035553Spatrick{
41846035553Spatrick    return error_code(static_cast<int>(__e), iostream_category());
41946035553Spatrick}
42046035553Spatrick
42146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
42246035553Spatrickerror_condition
42346035553Spatrickmake_error_condition(io_errc __e) _NOEXCEPT
42446035553Spatrick{
42546035553Spatrick    return error_condition(static_cast<int>(__e), iostream_category());
42646035553Spatrick}
42746035553Spatrick
42846035553Spatrickclass _LIBCPP_EXCEPTION_ABI ios_base::failure
42946035553Spatrick    : public system_error
43046035553Spatrick{
43146035553Spatrickpublic:
43246035553Spatrick    explicit failure(const string& __msg, const error_code& __ec = io_errc::stream);
43346035553Spatrick    explicit failure(const char* __msg, const error_code& __ec = io_errc::stream);
434*037e7968Spatrick    failure(const failure&) _NOEXCEPT = default;
435*037e7968Spatrick    virtual ~failure() _NOEXCEPT;
43646035553Spatrick};
43746035553Spatrick
43846035553Spatrick_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
43946035553Spatrickvoid __throw_failure(char const* __msg) {
44046035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS
44146035553Spatrick    throw ios_base::failure(__msg);
44246035553Spatrick#else
44346035553Spatrick    ((void)__msg);
44446035553Spatrick    _VSTD::abort();
44546035553Spatrick#endif
44646035553Spatrick}
44746035553Spatrick
44846035553Spatrickclass _LIBCPP_TYPE_VIS ios_base::Init
44946035553Spatrick{
45046035553Spatrickpublic:
45146035553Spatrick    Init();
45246035553Spatrick    ~Init();
45346035553Spatrick};
45446035553Spatrick
45546035553Spatrick// fmtflags
45646035553Spatrick
45746035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
45846035553Spatrickios_base::fmtflags
45946035553Spatrickios_base::flags() const
46046035553Spatrick{
46146035553Spatrick    return __fmtflags_;
46246035553Spatrick}
46346035553Spatrick
46446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
46546035553Spatrickios_base::fmtflags
46646035553Spatrickios_base::flags(fmtflags __fmtfl)
46746035553Spatrick{
46846035553Spatrick    fmtflags __r = __fmtflags_;
46946035553Spatrick    __fmtflags_ = __fmtfl;
47046035553Spatrick    return __r;
47146035553Spatrick}
47246035553Spatrick
47346035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
47446035553Spatrickios_base::fmtflags
47546035553Spatrickios_base::setf(fmtflags __fmtfl)
47646035553Spatrick{
47746035553Spatrick    fmtflags __r = __fmtflags_;
47846035553Spatrick    __fmtflags_ |= __fmtfl;
47946035553Spatrick    return __r;
48046035553Spatrick}
48146035553Spatrick
48246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
48346035553Spatrickvoid
48446035553Spatrickios_base::unsetf(fmtflags __mask)
48546035553Spatrick{
48646035553Spatrick    __fmtflags_ &= ~__mask;
48746035553Spatrick}
48846035553Spatrick
48946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
49046035553Spatrickios_base::fmtflags
49146035553Spatrickios_base::setf(fmtflags __fmtfl, fmtflags __mask)
49246035553Spatrick{
49346035553Spatrick    fmtflags __r = __fmtflags_;
49446035553Spatrick    unsetf(__mask);
49546035553Spatrick    __fmtflags_ |= __fmtfl & __mask;
49646035553Spatrick    return __r;
49746035553Spatrick}
49846035553Spatrick
49946035553Spatrick// precision
50046035553Spatrick
50146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
50246035553Spatrickstreamsize
50346035553Spatrickios_base::precision() const
50446035553Spatrick{
50546035553Spatrick    return __precision_;
50646035553Spatrick}
50746035553Spatrick
50846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
50946035553Spatrickstreamsize
51046035553Spatrickios_base::precision(streamsize __prec)
51146035553Spatrick{
51246035553Spatrick    streamsize __r = __precision_;
51346035553Spatrick    __precision_ = __prec;
51446035553Spatrick    return __r;
51546035553Spatrick}
51646035553Spatrick
51746035553Spatrick// width
51846035553Spatrick
51946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
52046035553Spatrickstreamsize
52146035553Spatrickios_base::width() const
52246035553Spatrick{
52346035553Spatrick    return __width_;
52446035553Spatrick}
52546035553Spatrick
52646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
52746035553Spatrickstreamsize
52846035553Spatrickios_base::width(streamsize __wide)
52946035553Spatrick{
53046035553Spatrick    streamsize __r = __width_;
53146035553Spatrick    __width_ = __wide;
53246035553Spatrick    return __r;
53346035553Spatrick}
53446035553Spatrick
53546035553Spatrick// iostate
53646035553Spatrick
53746035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
53846035553Spatrickios_base::iostate
53946035553Spatrickios_base::rdstate() const
54046035553Spatrick{
54146035553Spatrick    return __rdstate_;
54246035553Spatrick}
54346035553Spatrick
54446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
54546035553Spatrickvoid
54646035553Spatrickios_base::setstate(iostate __state)
54746035553Spatrick{
54846035553Spatrick    clear(__rdstate_ | __state);
54946035553Spatrick}
55046035553Spatrick
55146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
55246035553Spatrickbool
55346035553Spatrickios_base::good() const
55446035553Spatrick{
55546035553Spatrick    return __rdstate_ == 0;
55646035553Spatrick}
55746035553Spatrick
55846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
55946035553Spatrickbool
56046035553Spatrickios_base::eof() const
56146035553Spatrick{
56246035553Spatrick    return (__rdstate_ & eofbit) != 0;
56346035553Spatrick}
56446035553Spatrick
56546035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
56646035553Spatrickbool
56746035553Spatrickios_base::fail() const
56846035553Spatrick{
56946035553Spatrick    return (__rdstate_ & (failbit | badbit)) != 0;
57046035553Spatrick}
57146035553Spatrick
57246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
57346035553Spatrickbool
57446035553Spatrickios_base::bad() const
57546035553Spatrick{
57646035553Spatrick    return (__rdstate_ & badbit) != 0;
57746035553Spatrick}
57846035553Spatrick
57946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
58046035553Spatrickios_base::iostate
58146035553Spatrickios_base::exceptions() const
58246035553Spatrick{
58346035553Spatrick    return __exceptions_;
58446035553Spatrick}
58546035553Spatrick
58646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
58746035553Spatrickvoid
58846035553Spatrickios_base::exceptions(iostate __iostate)
58946035553Spatrick{
59046035553Spatrick    __exceptions_ = __iostate;
59146035553Spatrick    clear(__rdstate_);
59246035553Spatrick}
59346035553Spatrick
59446035553Spatrick#if defined(_LIBCPP_CXX03_LANG)
59546035553Spatrickstruct _LIBCPP_TYPE_VIS __cxx03_bool {
59646035553Spatrick  typedef void (__cxx03_bool::*__bool_type)();
59746035553Spatrick  void __true_value() {}
59846035553Spatrick};
59946035553Spatrick#endif
60046035553Spatrick
60146035553Spatricktemplate <class _CharT, class _Traits>
60246035553Spatrickclass _LIBCPP_TEMPLATE_VIS basic_ios
60346035553Spatrick    : public ios_base
60446035553Spatrick{
60546035553Spatrickpublic:
60646035553Spatrick    // types:
60746035553Spatrick    typedef _CharT char_type;
60846035553Spatrick    typedef _Traits traits_type;
60946035553Spatrick
61046035553Spatrick    typedef typename traits_type::int_type int_type;
61146035553Spatrick    typedef typename traits_type::pos_type pos_type;
61246035553Spatrick    typedef typename traits_type::off_type off_type;
61346035553Spatrick
61446035553Spatrick    static_assert((is_same<_CharT, typename traits_type::char_type>::value),
61546035553Spatrick                  "traits_type::char_type must be the same type as CharT");
61646035553Spatrick
61746035553Spatrick  // __true_value will generate undefined references when linking unless
61846035553Spatrick  // we give it internal linkage.
61946035553Spatrick
62046035553Spatrick#if defined(_LIBCPP_CXX03_LANG)
62146035553Spatrick    _LIBCPP_INLINE_VISIBILITY
62246035553Spatrick    operator __cxx03_bool::__bool_type() const {
62346035553Spatrick        return !fail() ? &__cxx03_bool::__true_value : nullptr;
62446035553Spatrick    }
62546035553Spatrick#else
62646035553Spatrick    _LIBCPP_INLINE_VISIBILITY
62746035553Spatrick    _LIBCPP_EXPLICIT operator bool() const {return !fail();}
62846035553Spatrick#endif
62946035553Spatrick
63046035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool operator!() const    {return  fail();}
63146035553Spatrick    _LIBCPP_INLINE_VISIBILITY iostate rdstate() const   {return ios_base::rdstate();}
63246035553Spatrick    _LIBCPP_INLINE_VISIBILITY void clear(iostate __state = goodbit) {ios_base::clear(__state);}
63346035553Spatrick    _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state) {ios_base::setstate(__state);}
63446035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool good() const {return ios_base::good();}
63546035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool eof() const  {return ios_base::eof();}
63646035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool fail() const {return ios_base::fail();}
63746035553Spatrick    _LIBCPP_INLINE_VISIBILITY bool bad() const  {return ios_base::bad();}
63846035553Spatrick
63946035553Spatrick    _LIBCPP_INLINE_VISIBILITY iostate exceptions() const {return ios_base::exceptions();}
64046035553Spatrick    _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate) {ios_base::exceptions(__iostate);}
64146035553Spatrick
64246035553Spatrick    // 27.5.4.1 Constructor/destructor:
64346035553Spatrick    _LIBCPP_INLINE_VISIBILITY
64446035553Spatrick    explicit basic_ios(basic_streambuf<char_type,traits_type>* __sb);
64546035553Spatrick    virtual ~basic_ios();
64646035553Spatrick
64746035553Spatrick    // 27.5.4.2 Members:
64846035553Spatrick    _LIBCPP_INLINE_VISIBILITY
64946035553Spatrick    basic_ostream<char_type, traits_type>* tie() const;
65046035553Spatrick    _LIBCPP_INLINE_VISIBILITY
65146035553Spatrick    basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr);
65246035553Spatrick
65346035553Spatrick    _LIBCPP_INLINE_VISIBILITY
65446035553Spatrick    basic_streambuf<char_type, traits_type>* rdbuf() const;
65546035553Spatrick    _LIBCPP_INLINE_VISIBILITY
65646035553Spatrick    basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb);
65746035553Spatrick
65846035553Spatrick    basic_ios& copyfmt(const basic_ios& __rhs);
65946035553Spatrick
66046035553Spatrick    _LIBCPP_INLINE_VISIBILITY
66146035553Spatrick    char_type fill() const;
66246035553Spatrick    _LIBCPP_INLINE_VISIBILITY
66346035553Spatrick    char_type fill(char_type __ch);
66446035553Spatrick
66546035553Spatrick    _LIBCPP_INLINE_VISIBILITY
66646035553Spatrick    locale imbue(const locale& __loc);
66746035553Spatrick
66846035553Spatrick    _LIBCPP_INLINE_VISIBILITY
66946035553Spatrick    char narrow(char_type __c, char __dfault) const;
67046035553Spatrick    _LIBCPP_INLINE_VISIBILITY
67146035553Spatrick    char_type widen(char __c) const;
67246035553Spatrick
67346035553Spatrickprotected:
67446035553Spatrick    _LIBCPP_INLINE_VISIBILITY
67546035553Spatrick    basic_ios() {// purposefully does no initialization
67646035553Spatrick                }
67746035553Spatrick    _LIBCPP_INLINE_VISIBILITY
67846035553Spatrick    void init(basic_streambuf<char_type, traits_type>* __sb);
67946035553Spatrick
68046035553Spatrick    _LIBCPP_INLINE_VISIBILITY
68146035553Spatrick    void move(basic_ios& __rhs);
68246035553Spatrick#ifndef _LIBCPP_CXX03_LANG
68346035553Spatrick    _LIBCPP_INLINE_VISIBILITY
68446035553Spatrick    void move(basic_ios&& __rhs) {move(__rhs);}
68546035553Spatrick#endif
68646035553Spatrick    _LIBCPP_INLINE_VISIBILITY
68746035553Spatrick    void swap(basic_ios& __rhs) _NOEXCEPT;
68846035553Spatrick    _LIBCPP_INLINE_VISIBILITY
68946035553Spatrick    void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb);
69046035553Spatrickprivate:
69146035553Spatrick    basic_ostream<char_type, traits_type>* __tie_;
69246035553Spatrick    mutable int_type __fill_;
69346035553Spatrick};
69446035553Spatrick
69546035553Spatricktemplate <class _CharT, class _Traits>
69646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
69746035553Spatrickbasic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type,traits_type>* __sb)
69846035553Spatrick{
69946035553Spatrick    init(__sb);
70046035553Spatrick}
70146035553Spatrick
70246035553Spatricktemplate <class _CharT, class _Traits>
70346035553Spatrickbasic_ios<_CharT, _Traits>::~basic_ios()
70446035553Spatrick{
70546035553Spatrick}
70646035553Spatrick
70746035553Spatricktemplate <class _CharT, class _Traits>
70846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
70946035553Spatrickvoid
71046035553Spatrickbasic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb)
71146035553Spatrick{
71246035553Spatrick    ios_base::init(__sb);
71346035553Spatrick    __tie_ = 0;
71446035553Spatrick    __fill_ = traits_type::eof();
71546035553Spatrick}
71646035553Spatrick
71746035553Spatricktemplate <class _CharT, class _Traits>
71846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
71946035553Spatrickbasic_ostream<_CharT, _Traits>*
72046035553Spatrickbasic_ios<_CharT, _Traits>::tie() const
72146035553Spatrick{
72246035553Spatrick    return __tie_;
72346035553Spatrick}
72446035553Spatrick
72546035553Spatricktemplate <class _CharT, class _Traits>
72646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
72746035553Spatrickbasic_ostream<_CharT, _Traits>*
72846035553Spatrickbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr)
72946035553Spatrick{
73046035553Spatrick    basic_ostream<char_type, traits_type>* __r = __tie_;
73146035553Spatrick    __tie_ = __tiestr;
73246035553Spatrick    return __r;
73346035553Spatrick}
73446035553Spatrick
73546035553Spatricktemplate <class _CharT, class _Traits>
73646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
73746035553Spatrickbasic_streambuf<_CharT, _Traits>*
73846035553Spatrickbasic_ios<_CharT, _Traits>::rdbuf() const
73946035553Spatrick{
74046035553Spatrick    return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf());
74146035553Spatrick}
74246035553Spatrick
74346035553Spatricktemplate <class _CharT, class _Traits>
74446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
74546035553Spatrickbasic_streambuf<_CharT, _Traits>*
74646035553Spatrickbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb)
74746035553Spatrick{
74846035553Spatrick    basic_streambuf<char_type, traits_type>* __r = rdbuf();
74946035553Spatrick    ios_base::rdbuf(__sb);
75046035553Spatrick    return __r;
75146035553Spatrick}
75246035553Spatrick
75346035553Spatricktemplate <class _CharT, class _Traits>
75446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
75546035553Spatricklocale
75646035553Spatrickbasic_ios<_CharT, _Traits>::imbue(const locale& __loc)
75746035553Spatrick{
75846035553Spatrick    locale __r = getloc();
75946035553Spatrick    ios_base::imbue(__loc);
76046035553Spatrick    if (rdbuf())
76146035553Spatrick        rdbuf()->pubimbue(__loc);
76246035553Spatrick    return __r;
76346035553Spatrick}
76446035553Spatrick
76546035553Spatricktemplate <class _CharT, class _Traits>
76646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
76746035553Spatrickchar
76846035553Spatrickbasic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const
76946035553Spatrick{
77046035553Spatrick    return use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault);
77146035553Spatrick}
77246035553Spatrick
77346035553Spatricktemplate <class _CharT, class _Traits>
77446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
77546035553Spatrick_CharT
77646035553Spatrickbasic_ios<_CharT, _Traits>::widen(char __c) const
77746035553Spatrick{
77846035553Spatrick    return use_facet<ctype<char_type> >(getloc()).widen(__c);
77946035553Spatrick}
78046035553Spatrick
78146035553Spatricktemplate <class _CharT, class _Traits>
78246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
78346035553Spatrick_CharT
78446035553Spatrickbasic_ios<_CharT, _Traits>::fill() const
78546035553Spatrick{
78646035553Spatrick    if (traits_type::eq_int_type(traits_type::eof(), __fill_))
78746035553Spatrick        __fill_ = widen(' ');
78846035553Spatrick    return __fill_;
78946035553Spatrick}
79046035553Spatrick
79146035553Spatricktemplate <class _CharT, class _Traits>
79246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
79346035553Spatrick_CharT
79446035553Spatrickbasic_ios<_CharT, _Traits>::fill(char_type __ch)
79546035553Spatrick{
79646035553Spatrick    char_type __r = __fill_;
79746035553Spatrick    __fill_ = __ch;
79846035553Spatrick    return __r;
79946035553Spatrick}
80046035553Spatrick
80146035553Spatricktemplate <class _CharT, class _Traits>
80246035553Spatrickbasic_ios<_CharT, _Traits>&
80346035553Spatrickbasic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
80446035553Spatrick{
80546035553Spatrick    if (this != &__rhs)
80646035553Spatrick    {
80746035553Spatrick        __call_callbacks(erase_event);
80846035553Spatrick        ios_base::copyfmt(__rhs);
80946035553Spatrick        __tie_ = __rhs.__tie_;
81046035553Spatrick        __fill_ = __rhs.__fill_;
81146035553Spatrick        __call_callbacks(copyfmt_event);
81246035553Spatrick        exceptions(__rhs.exceptions());
81346035553Spatrick    }
81446035553Spatrick    return *this;
81546035553Spatrick}
81646035553Spatrick
81746035553Spatricktemplate <class _CharT, class _Traits>
81846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
81946035553Spatrickvoid
82046035553Spatrickbasic_ios<_CharT, _Traits>::move(basic_ios& __rhs)
82146035553Spatrick{
82246035553Spatrick    ios_base::move(__rhs);
82346035553Spatrick    __tie_ = __rhs.__tie_;
82446035553Spatrick    __rhs.__tie_ = 0;
82546035553Spatrick    __fill_ = __rhs.__fill_;
82646035553Spatrick}
82746035553Spatrick
82846035553Spatricktemplate <class _CharT, class _Traits>
82946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
83046035553Spatrickvoid
83146035553Spatrickbasic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT
83246035553Spatrick{
83346035553Spatrick    ios_base::swap(__rhs);
83446035553Spatrick    _VSTD::swap(__tie_, __rhs.__tie_);
83546035553Spatrick    _VSTD::swap(__fill_, __rhs.__fill_);
83646035553Spatrick}
83746035553Spatrick
83846035553Spatricktemplate <class _CharT, class _Traits>
83946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY
84046035553Spatrickvoid
84146035553Spatrickbasic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb)
84246035553Spatrick{
84346035553Spatrick    ios_base::set_rdbuf(__sb);
84446035553Spatrick}
84546035553Spatrick
846*037e7968Spatrickinline
84746035553Spatrickios_base&
84846035553Spatrickboolalpha(ios_base& __str)
84946035553Spatrick{
85046035553Spatrick    __str.setf(ios_base::boolalpha);
85146035553Spatrick    return __str;
85246035553Spatrick}
85346035553Spatrick
854*037e7968Spatrickinline
85546035553Spatrickios_base&
85646035553Spatricknoboolalpha(ios_base& __str)
85746035553Spatrick{
85846035553Spatrick    __str.unsetf(ios_base::boolalpha);
85946035553Spatrick    return __str;
86046035553Spatrick}
86146035553Spatrick
862*037e7968Spatrickinline
86346035553Spatrickios_base&
86446035553Spatrickshowbase(ios_base& __str)
86546035553Spatrick{
86646035553Spatrick    __str.setf(ios_base::showbase);
86746035553Spatrick    return __str;
86846035553Spatrick}
86946035553Spatrick
870*037e7968Spatrickinline
87146035553Spatrickios_base&
87246035553Spatricknoshowbase(ios_base& __str)
87346035553Spatrick{
87446035553Spatrick    __str.unsetf(ios_base::showbase);
87546035553Spatrick    return __str;
87646035553Spatrick}
87746035553Spatrick
878*037e7968Spatrickinline
87946035553Spatrickios_base&
88046035553Spatrickshowpoint(ios_base& __str)
88146035553Spatrick{
88246035553Spatrick    __str.setf(ios_base::showpoint);
88346035553Spatrick    return __str;
88446035553Spatrick}
88546035553Spatrick
886*037e7968Spatrickinline
88746035553Spatrickios_base&
88846035553Spatricknoshowpoint(ios_base& __str)
88946035553Spatrick{
89046035553Spatrick    __str.unsetf(ios_base::showpoint);
89146035553Spatrick    return __str;
89246035553Spatrick}
89346035553Spatrick
894*037e7968Spatrickinline
89546035553Spatrickios_base&
89646035553Spatrickshowpos(ios_base& __str)
89746035553Spatrick{
89846035553Spatrick    __str.setf(ios_base::showpos);
89946035553Spatrick    return __str;
90046035553Spatrick}
90146035553Spatrick
902*037e7968Spatrickinline
90346035553Spatrickios_base&
90446035553Spatricknoshowpos(ios_base& __str)
90546035553Spatrick{
90646035553Spatrick    __str.unsetf(ios_base::showpos);
90746035553Spatrick    return __str;
90846035553Spatrick}
90946035553Spatrick
910*037e7968Spatrickinline
91146035553Spatrickios_base&
91246035553Spatrickskipws(ios_base& __str)
91346035553Spatrick{
91446035553Spatrick    __str.setf(ios_base::skipws);
91546035553Spatrick    return __str;
91646035553Spatrick}
91746035553Spatrick
918*037e7968Spatrickinline
91946035553Spatrickios_base&
92046035553Spatricknoskipws(ios_base& __str)
92146035553Spatrick{
92246035553Spatrick    __str.unsetf(ios_base::skipws);
92346035553Spatrick    return __str;
92446035553Spatrick}
92546035553Spatrick
926*037e7968Spatrickinline
92746035553Spatrickios_base&
92846035553Spatrickuppercase(ios_base& __str)
92946035553Spatrick{
93046035553Spatrick    __str.setf(ios_base::uppercase);
93146035553Spatrick    return __str;
93246035553Spatrick}
93346035553Spatrick
934*037e7968Spatrickinline
93546035553Spatrickios_base&
93646035553Spatricknouppercase(ios_base& __str)
93746035553Spatrick{
93846035553Spatrick    __str.unsetf(ios_base::uppercase);
93946035553Spatrick    return __str;
94046035553Spatrick}
94146035553Spatrick
942*037e7968Spatrickinline
94346035553Spatrickios_base&
94446035553Spatrickunitbuf(ios_base& __str)
94546035553Spatrick{
94646035553Spatrick    __str.setf(ios_base::unitbuf);
94746035553Spatrick    return __str;
94846035553Spatrick}
94946035553Spatrick
950*037e7968Spatrickinline
95146035553Spatrickios_base&
95246035553Spatricknounitbuf(ios_base& __str)
95346035553Spatrick{
95446035553Spatrick    __str.unsetf(ios_base::unitbuf);
95546035553Spatrick    return __str;
95646035553Spatrick}
95746035553Spatrick
958*037e7968Spatrickinline
95946035553Spatrickios_base&
96046035553Spatrickinternal(ios_base& __str)
96146035553Spatrick{
96246035553Spatrick    __str.setf(ios_base::internal, ios_base::adjustfield);
96346035553Spatrick    return __str;
96446035553Spatrick}
96546035553Spatrick
966*037e7968Spatrickinline
96746035553Spatrickios_base&
96846035553Spatrickleft(ios_base& __str)
96946035553Spatrick{
97046035553Spatrick    __str.setf(ios_base::left, ios_base::adjustfield);
97146035553Spatrick    return __str;
97246035553Spatrick}
97346035553Spatrick
974*037e7968Spatrickinline
97546035553Spatrickios_base&
97646035553Spatrickright(ios_base& __str)
97746035553Spatrick{
97846035553Spatrick    __str.setf(ios_base::right, ios_base::adjustfield);
97946035553Spatrick    return __str;
98046035553Spatrick}
98146035553Spatrick
982*037e7968Spatrickinline
98346035553Spatrickios_base&
98446035553Spatrickdec(ios_base& __str)
98546035553Spatrick{
98646035553Spatrick    __str.setf(ios_base::dec, ios_base::basefield);
98746035553Spatrick    return __str;
98846035553Spatrick}
98946035553Spatrick
990*037e7968Spatrickinline
99146035553Spatrickios_base&
99246035553Spatrickhex(ios_base& __str)
99346035553Spatrick{
99446035553Spatrick    __str.setf(ios_base::hex, ios_base::basefield);
99546035553Spatrick    return __str;
99646035553Spatrick}
99746035553Spatrick
998*037e7968Spatrickinline
99946035553Spatrickios_base&
100046035553Spatrickoct(ios_base& __str)
100146035553Spatrick{
100246035553Spatrick    __str.setf(ios_base::oct, ios_base::basefield);
100346035553Spatrick    return __str;
100446035553Spatrick}
100546035553Spatrick
1006*037e7968Spatrickinline
100746035553Spatrickios_base&
100846035553Spatrickfixed(ios_base& __str)
100946035553Spatrick{
101046035553Spatrick    __str.setf(ios_base::fixed, ios_base::floatfield);
101146035553Spatrick    return __str;
101246035553Spatrick}
101346035553Spatrick
1014*037e7968Spatrickinline
101546035553Spatrickios_base&
101646035553Spatrickscientific(ios_base& __str)
101746035553Spatrick{
101846035553Spatrick    __str.setf(ios_base::scientific, ios_base::floatfield);
101946035553Spatrick    return __str;
102046035553Spatrick}
102146035553Spatrick
1022*037e7968Spatrickinline
102346035553Spatrickios_base&
102446035553Spatrickhexfloat(ios_base& __str)
102546035553Spatrick{
102646035553Spatrick    __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
102746035553Spatrick    return __str;
102846035553Spatrick}
102946035553Spatrick
1030*037e7968Spatrickinline
103146035553Spatrickios_base&
103246035553Spatrickdefaultfloat(ios_base& __str)
103346035553Spatrick{
103446035553Spatrick    __str.unsetf(ios_base::floatfield);
103546035553Spatrick    return __str;
103646035553Spatrick}
103746035553Spatrick
103846035553Spatricktemplate <class _CharT, class _Traits>
103946035553Spatrickclass __save_flags
104046035553Spatrick{
104146035553Spatrick    typedef basic_ios<_CharT, _Traits> __stream_type;
104246035553Spatrick    typedef typename __stream_type::fmtflags fmtflags;
104346035553Spatrick
104446035553Spatrick    __stream_type& __stream_;
104546035553Spatrick    fmtflags       __fmtflags_;
104646035553Spatrick    _CharT         __fill_;
104746035553Spatrick
104846035553Spatrick    __save_flags(const __save_flags&);
104946035553Spatrick    __save_flags& operator=(const __save_flags&);
105046035553Spatrickpublic:
105146035553Spatrick    _LIBCPP_INLINE_VISIBILITY
105246035553Spatrick    explicit __save_flags(__stream_type& __stream)
105346035553Spatrick        : __stream_(__stream),
105446035553Spatrick          __fmtflags_(__stream.flags()),
105546035553Spatrick          __fill_(__stream.fill())
105646035553Spatrick        {}
105746035553Spatrick    _LIBCPP_INLINE_VISIBILITY
105846035553Spatrick    ~__save_flags()
105946035553Spatrick    {
106046035553Spatrick        __stream_.flags(__fmtflags_);
106146035553Spatrick        __stream_.fill(__fill_);
106246035553Spatrick    }
106346035553Spatrick};
106446035553Spatrick
106546035553Spatrick_LIBCPP_END_NAMESPACE_STD
106646035553Spatrick
106746035553Spatrick#endif  // _LIBCPP_IOS
1068