xref: /netbsd-src/external/apache2/llvm/dist/libcxx/include/ios (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
1*4d6fc14bSjoerg// -*- C++ -*-
2*4d6fc14bSjoerg//===---------------------------- ios -------------------------------------===//
3*4d6fc14bSjoerg//
4*4d6fc14bSjoerg// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*4d6fc14bSjoerg// See https://llvm.org/LICENSE.txt for license information.
6*4d6fc14bSjoerg// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*4d6fc14bSjoerg//
8*4d6fc14bSjoerg//===----------------------------------------------------------------------===//
9*4d6fc14bSjoerg
10*4d6fc14bSjoerg#ifndef _LIBCPP_IOS
11*4d6fc14bSjoerg#define _LIBCPP_IOS
12*4d6fc14bSjoerg
13*4d6fc14bSjoerg/*
14*4d6fc14bSjoerg    ios synopsis
15*4d6fc14bSjoerg
16*4d6fc14bSjoerg#include <iosfwd>
17*4d6fc14bSjoerg
18*4d6fc14bSjoergnamespace std
19*4d6fc14bSjoerg{
20*4d6fc14bSjoerg
21*4d6fc14bSjoergtypedef OFF_T streamoff;
22*4d6fc14bSjoergtypedef SZ_T streamsize;
23*4d6fc14bSjoergtemplate <class stateT> class fpos;
24*4d6fc14bSjoerg
25*4d6fc14bSjoergclass ios_base
26*4d6fc14bSjoerg{
27*4d6fc14bSjoergpublic:
28*4d6fc14bSjoerg    class failure;
29*4d6fc14bSjoerg
30*4d6fc14bSjoerg    typedef T1 fmtflags;
31*4d6fc14bSjoerg    static constexpr fmtflags boolalpha;
32*4d6fc14bSjoerg    static constexpr fmtflags dec;
33*4d6fc14bSjoerg    static constexpr fmtflags fixed;
34*4d6fc14bSjoerg    static constexpr fmtflags hex;
35*4d6fc14bSjoerg    static constexpr fmtflags internal;
36*4d6fc14bSjoerg    static constexpr fmtflags left;
37*4d6fc14bSjoerg    static constexpr fmtflags oct;
38*4d6fc14bSjoerg    static constexpr fmtflags right;
39*4d6fc14bSjoerg    static constexpr fmtflags scientific;
40*4d6fc14bSjoerg    static constexpr fmtflags showbase;
41*4d6fc14bSjoerg    static constexpr fmtflags showpoint;
42*4d6fc14bSjoerg    static constexpr fmtflags showpos;
43*4d6fc14bSjoerg    static constexpr fmtflags skipws;
44*4d6fc14bSjoerg    static constexpr fmtflags unitbuf;
45*4d6fc14bSjoerg    static constexpr fmtflags uppercase;
46*4d6fc14bSjoerg    static constexpr fmtflags adjustfield;
47*4d6fc14bSjoerg    static constexpr fmtflags basefield;
48*4d6fc14bSjoerg    static constexpr fmtflags floatfield;
49*4d6fc14bSjoerg
50*4d6fc14bSjoerg    typedef T2 iostate;
51*4d6fc14bSjoerg    static constexpr iostate badbit;
52*4d6fc14bSjoerg    static constexpr iostate eofbit;
53*4d6fc14bSjoerg    static constexpr iostate failbit;
54*4d6fc14bSjoerg    static constexpr iostate goodbit;
55*4d6fc14bSjoerg
56*4d6fc14bSjoerg    typedef T3 openmode;
57*4d6fc14bSjoerg    static constexpr openmode app;
58*4d6fc14bSjoerg    static constexpr openmode ate;
59*4d6fc14bSjoerg    static constexpr openmode binary;
60*4d6fc14bSjoerg    static constexpr openmode in;
61*4d6fc14bSjoerg    static constexpr openmode out;
62*4d6fc14bSjoerg    static constexpr openmode trunc;
63*4d6fc14bSjoerg
64*4d6fc14bSjoerg    typedef T4 seekdir;
65*4d6fc14bSjoerg    static constexpr seekdir beg;
66*4d6fc14bSjoerg    static constexpr seekdir cur;
67*4d6fc14bSjoerg    static constexpr seekdir end;
68*4d6fc14bSjoerg
69*4d6fc14bSjoerg    class Init;
70*4d6fc14bSjoerg
71*4d6fc14bSjoerg    // 27.5.2.2 fmtflags state:
72*4d6fc14bSjoerg    fmtflags flags() const;
73*4d6fc14bSjoerg    fmtflags flags(fmtflags fmtfl);
74*4d6fc14bSjoerg    fmtflags setf(fmtflags fmtfl);
75*4d6fc14bSjoerg    fmtflags setf(fmtflags fmtfl, fmtflags mask);
76*4d6fc14bSjoerg    void unsetf(fmtflags mask);
77*4d6fc14bSjoerg
78*4d6fc14bSjoerg    streamsize precision() const;
79*4d6fc14bSjoerg    streamsize precision(streamsize prec);
80*4d6fc14bSjoerg    streamsize width() const;
81*4d6fc14bSjoerg    streamsize width(streamsize wide);
82*4d6fc14bSjoerg
83*4d6fc14bSjoerg    // 27.5.2.3 locales:
84*4d6fc14bSjoerg    locale imbue(const locale& loc);
85*4d6fc14bSjoerg    locale getloc() const;
86*4d6fc14bSjoerg
87*4d6fc14bSjoerg    // 27.5.2.5 storage:
88*4d6fc14bSjoerg    static int xalloc();
89*4d6fc14bSjoerg    long& iword(int index);
90*4d6fc14bSjoerg    void*& pword(int index);
91*4d6fc14bSjoerg
92*4d6fc14bSjoerg    // destructor
93*4d6fc14bSjoerg    virtual ~ios_base();
94*4d6fc14bSjoerg
95*4d6fc14bSjoerg    // 27.5.2.6 callbacks;
96*4d6fc14bSjoerg    enum event { erase_event, imbue_event, copyfmt_event };
97*4d6fc14bSjoerg    typedef void (*event_callback)(event, ios_base&, int index);
98*4d6fc14bSjoerg    void register_callback(event_callback fn, int index);
99*4d6fc14bSjoerg
100*4d6fc14bSjoerg    ios_base(const ios_base&) = delete;
101*4d6fc14bSjoerg    ios_base& operator=(const ios_base&) = delete;
102*4d6fc14bSjoerg
103*4d6fc14bSjoerg    static bool sync_with_stdio(bool sync = true);
104*4d6fc14bSjoerg
105*4d6fc14bSjoergprotected:
106*4d6fc14bSjoerg    ios_base();
107*4d6fc14bSjoerg};
108*4d6fc14bSjoerg
109*4d6fc14bSjoergtemplate <class charT, class traits = char_traits<charT> >
110*4d6fc14bSjoergclass basic_ios
111*4d6fc14bSjoerg    : public ios_base
112*4d6fc14bSjoerg{
113*4d6fc14bSjoergpublic:
114*4d6fc14bSjoerg    // types:
115*4d6fc14bSjoerg    typedef charT char_type;
116*4d6fc14bSjoerg    typedef typename traits::int_type int_type;  // removed in C++17
117*4d6fc14bSjoerg    typedef typename traits::pos_type pos_type;  // removed in C++17
118*4d6fc14bSjoerg    typedef typename traits::off_type off_type;  // removed in C++17
119*4d6fc14bSjoerg    typedef traits traits_type;
120*4d6fc14bSjoerg
121*4d6fc14bSjoerg    operator unspecified-bool-type() const;
122*4d6fc14bSjoerg    bool operator!() const;
123*4d6fc14bSjoerg    iostate rdstate() const;
124*4d6fc14bSjoerg    void clear(iostate state = goodbit);
125*4d6fc14bSjoerg    void setstate(iostate state);
126*4d6fc14bSjoerg    bool good() const;
127*4d6fc14bSjoerg    bool eof() const;
128*4d6fc14bSjoerg    bool fail() const;
129*4d6fc14bSjoerg    bool bad() const;
130*4d6fc14bSjoerg
131*4d6fc14bSjoerg    iostate exceptions() const;
132*4d6fc14bSjoerg    void exceptions(iostate except);
133*4d6fc14bSjoerg
134*4d6fc14bSjoerg    // 27.5.4.1 Constructor/destructor:
135*4d6fc14bSjoerg    explicit basic_ios(basic_streambuf<charT,traits>* sb);
136*4d6fc14bSjoerg    virtual ~basic_ios();
137*4d6fc14bSjoerg
138*4d6fc14bSjoerg    // 27.5.4.2 Members:
139*4d6fc14bSjoerg    basic_ostream<charT,traits>* tie() const;
140*4d6fc14bSjoerg    basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr);
141*4d6fc14bSjoerg
142*4d6fc14bSjoerg    basic_streambuf<charT,traits>* rdbuf() const;
143*4d6fc14bSjoerg    basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb);
144*4d6fc14bSjoerg
145*4d6fc14bSjoerg    basic_ios& copyfmt(const basic_ios& rhs);
146*4d6fc14bSjoerg
147*4d6fc14bSjoerg    char_type fill() const;
148*4d6fc14bSjoerg    char_type fill(char_type ch);
149*4d6fc14bSjoerg
150*4d6fc14bSjoerg    locale imbue(const locale& loc);
151*4d6fc14bSjoerg
152*4d6fc14bSjoerg    char narrow(char_type c, char dfault) const;
153*4d6fc14bSjoerg    char_type widen(char c) const;
154*4d6fc14bSjoerg
155*4d6fc14bSjoerg    basic_ios(const basic_ios& ) = delete;
156*4d6fc14bSjoerg    basic_ios& operator=(const basic_ios&) = delete;
157*4d6fc14bSjoerg
158*4d6fc14bSjoergprotected:
159*4d6fc14bSjoerg    basic_ios();
160*4d6fc14bSjoerg    void init(basic_streambuf<charT,traits>* sb);
161*4d6fc14bSjoerg    void move(basic_ios& rhs);
162*4d6fc14bSjoerg    void swap(basic_ios& rhs) noexcept;
163*4d6fc14bSjoerg    void set_rdbuf(basic_streambuf<charT, traits>* sb);
164*4d6fc14bSjoerg};
165*4d6fc14bSjoerg
166*4d6fc14bSjoerg// 27.5.5, manipulators:
167*4d6fc14bSjoergios_base& boolalpha (ios_base& str);
168*4d6fc14bSjoergios_base& noboolalpha(ios_base& str);
169*4d6fc14bSjoergios_base& showbase (ios_base& str);
170*4d6fc14bSjoergios_base& noshowbase (ios_base& str);
171*4d6fc14bSjoergios_base& showpoint (ios_base& str);
172*4d6fc14bSjoergios_base& noshowpoint(ios_base& str);
173*4d6fc14bSjoergios_base& showpos (ios_base& str);
174*4d6fc14bSjoergios_base& noshowpos (ios_base& str);
175*4d6fc14bSjoergios_base& skipws (ios_base& str);
176*4d6fc14bSjoergios_base& noskipws (ios_base& str);
177*4d6fc14bSjoergios_base& uppercase (ios_base& str);
178*4d6fc14bSjoergios_base& nouppercase(ios_base& str);
179*4d6fc14bSjoergios_base& unitbuf (ios_base& str);
180*4d6fc14bSjoergios_base& nounitbuf (ios_base& str);
181*4d6fc14bSjoerg
182*4d6fc14bSjoerg// 27.5.5.2 adjustfield:
183*4d6fc14bSjoergios_base& internal (ios_base& str);
184*4d6fc14bSjoergios_base& left (ios_base& str);
185*4d6fc14bSjoergios_base& right (ios_base& str);
186*4d6fc14bSjoerg
187*4d6fc14bSjoerg// 27.5.5.3 basefield:
188*4d6fc14bSjoergios_base& dec (ios_base& str);
189*4d6fc14bSjoergios_base& hex (ios_base& str);
190*4d6fc14bSjoergios_base& oct (ios_base& str);
191*4d6fc14bSjoerg
192*4d6fc14bSjoerg// 27.5.5.4 floatfield:
193*4d6fc14bSjoergios_base& fixed (ios_base& str);
194*4d6fc14bSjoergios_base& scientific (ios_base& str);
195*4d6fc14bSjoergios_base& hexfloat (ios_base& str);
196*4d6fc14bSjoergios_base& defaultfloat(ios_base& str);
197*4d6fc14bSjoerg
198*4d6fc14bSjoerg// 27.5.5.5 error reporting:
199*4d6fc14bSjoergenum class io_errc
200*4d6fc14bSjoerg{
201*4d6fc14bSjoerg    stream = 1
202*4d6fc14bSjoerg};
203*4d6fc14bSjoerg
204*4d6fc14bSjoergconcept_map ErrorCodeEnum<io_errc> { };
205*4d6fc14bSjoergerror_code make_error_code(io_errc e) noexcept;
206*4d6fc14bSjoergerror_condition make_error_condition(io_errc e) noexcept;
207*4d6fc14bSjoergstorage-class-specifier const error_category& iostream_category() noexcept;
208*4d6fc14bSjoerg
209*4d6fc14bSjoerg}  // std
210*4d6fc14bSjoerg
211*4d6fc14bSjoerg*/
212*4d6fc14bSjoerg
213*4d6fc14bSjoerg#include <__config>
214*4d6fc14bSjoerg#include <iosfwd>
215*4d6fc14bSjoerg#include <__locale>
216*4d6fc14bSjoerg#include <system_error>
217*4d6fc14bSjoerg
218*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
219*4d6fc14bSjoerg#include <atomic>     // for __xindex_
220*4d6fc14bSjoerg#endif
221*4d6fc14bSjoerg
222*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
223*4d6fc14bSjoerg#pragma GCC system_header
224*4d6fc14bSjoerg#endif
225*4d6fc14bSjoerg
226*4d6fc14bSjoerg_LIBCPP_BEGIN_NAMESPACE_STD
227*4d6fc14bSjoerg
228*4d6fc14bSjoergtypedef ptrdiff_t streamsize;
229*4d6fc14bSjoerg
230*4d6fc14bSjoergclass _LIBCPP_TYPE_VIS ios_base
231*4d6fc14bSjoerg{
232*4d6fc14bSjoergpublic:
233*4d6fc14bSjoerg    class _LIBCPP_EXCEPTION_ABI failure;
234*4d6fc14bSjoerg
235*4d6fc14bSjoerg    typedef unsigned int fmtflags;
236*4d6fc14bSjoerg    static const fmtflags boolalpha   = 0x0001;
237*4d6fc14bSjoerg    static const fmtflags dec         = 0x0002;
238*4d6fc14bSjoerg    static const fmtflags fixed       = 0x0004;
239*4d6fc14bSjoerg    static const fmtflags hex         = 0x0008;
240*4d6fc14bSjoerg    static const fmtflags internal    = 0x0010;
241*4d6fc14bSjoerg    static const fmtflags left        = 0x0020;
242*4d6fc14bSjoerg    static const fmtflags oct         = 0x0040;
243*4d6fc14bSjoerg    static const fmtflags right       = 0x0080;
244*4d6fc14bSjoerg    static const fmtflags scientific  = 0x0100;
245*4d6fc14bSjoerg    static const fmtflags showbase    = 0x0200;
246*4d6fc14bSjoerg    static const fmtflags showpoint   = 0x0400;
247*4d6fc14bSjoerg    static const fmtflags showpos     = 0x0800;
248*4d6fc14bSjoerg    static const fmtflags skipws      = 0x1000;
249*4d6fc14bSjoerg    static const fmtflags unitbuf     = 0x2000;
250*4d6fc14bSjoerg    static const fmtflags uppercase   = 0x4000;
251*4d6fc14bSjoerg    static const fmtflags adjustfield = left | right | internal;
252*4d6fc14bSjoerg    static const fmtflags basefield   = dec | oct | hex;
253*4d6fc14bSjoerg    static const fmtflags floatfield  = scientific | fixed;
254*4d6fc14bSjoerg
255*4d6fc14bSjoerg    typedef unsigned int iostate;
256*4d6fc14bSjoerg    static const iostate badbit  = 0x1;
257*4d6fc14bSjoerg    static const iostate eofbit  = 0x2;
258*4d6fc14bSjoerg    static const iostate failbit = 0x4;
259*4d6fc14bSjoerg    static const iostate goodbit = 0x0;
260*4d6fc14bSjoerg
261*4d6fc14bSjoerg    typedef unsigned int openmode;
262*4d6fc14bSjoerg    static const openmode app    = 0x01;
263*4d6fc14bSjoerg    static const openmode ate    = 0x02;
264*4d6fc14bSjoerg    static const openmode binary = 0x04;
265*4d6fc14bSjoerg    static const openmode in     = 0x08;
266*4d6fc14bSjoerg    static const openmode out    = 0x10;
267*4d6fc14bSjoerg    static const openmode trunc  = 0x20;
268*4d6fc14bSjoerg
269*4d6fc14bSjoerg    enum seekdir {beg, cur, end};
270*4d6fc14bSjoerg
271*4d6fc14bSjoerg#if _LIBCPP_STD_VER <= 14
272*4d6fc14bSjoerg    typedef iostate      io_state;
273*4d6fc14bSjoerg    typedef openmode     open_mode;
274*4d6fc14bSjoerg    typedef seekdir      seek_dir;
275*4d6fc14bSjoerg
276*4d6fc14bSjoerg    typedef _VSTD::streamoff streamoff;
277*4d6fc14bSjoerg    typedef _VSTD::streampos streampos;
278*4d6fc14bSjoerg#endif
279*4d6fc14bSjoerg
280*4d6fc14bSjoerg    class _LIBCPP_TYPE_VIS Init;
281*4d6fc14bSjoerg
282*4d6fc14bSjoerg    // 27.5.2.2 fmtflags state:
283*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY fmtflags flags() const;
284*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY fmtflags flags(fmtflags __fmtfl);
285*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl);
286*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY fmtflags setf(fmtflags __fmtfl, fmtflags __mask);
287*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY void unsetf(fmtflags __mask);
288*4d6fc14bSjoerg
289*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY streamsize precision() const;
290*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY streamsize precision(streamsize __prec);
291*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY streamsize width() const;
292*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY streamsize width(streamsize __wide);
293*4d6fc14bSjoerg
294*4d6fc14bSjoerg    // 27.5.2.3 locales:
295*4d6fc14bSjoerg    locale imbue(const locale& __loc);
296*4d6fc14bSjoerg    locale getloc() const;
297*4d6fc14bSjoerg
298*4d6fc14bSjoerg    // 27.5.2.5 storage:
299*4d6fc14bSjoerg    static int xalloc();
300*4d6fc14bSjoerg    long& iword(int __index);
301*4d6fc14bSjoerg    void*& pword(int __index);
302*4d6fc14bSjoerg
303*4d6fc14bSjoerg    // destructor
304*4d6fc14bSjoerg    virtual ~ios_base();
305*4d6fc14bSjoerg
306*4d6fc14bSjoerg    // 27.5.2.6 callbacks;
307*4d6fc14bSjoerg    enum event { erase_event, imbue_event, copyfmt_event };
308*4d6fc14bSjoerg    typedef void (*event_callback)(event, ios_base&, int __index);
309*4d6fc14bSjoerg    void register_callback(event_callback __fn, int __index);
310*4d6fc14bSjoerg
311*4d6fc14bSjoergprivate:
312*4d6fc14bSjoerg    ios_base(const ios_base&); // = delete;
313*4d6fc14bSjoerg    ios_base& operator=(const ios_base&); // = delete;
314*4d6fc14bSjoerg
315*4d6fc14bSjoergpublic:
316*4d6fc14bSjoerg    static bool sync_with_stdio(bool __sync = true);
317*4d6fc14bSjoerg
318*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY iostate rdstate() const;
319*4d6fc14bSjoerg    void clear(iostate __state = goodbit);
320*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state);
321*4d6fc14bSjoerg
322*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool good() const;
323*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool eof() const;
324*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool fail() const;
325*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool bad() const;
326*4d6fc14bSjoerg
327*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY iostate exceptions() const;
328*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate);
329*4d6fc14bSjoerg
330*4d6fc14bSjoerg    void __set_badbit_and_consider_rethrow();
331*4d6fc14bSjoerg    void __set_failbit_and_consider_rethrow();
332*4d6fc14bSjoerg
333*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
334*4d6fc14bSjoerg    void __setstate_nothrow(iostate __state)
335*4d6fc14bSjoerg    {
336*4d6fc14bSjoerg        if (__rdbuf_)
337*4d6fc14bSjoerg            __rdstate_ |= __state;
338*4d6fc14bSjoerg        else
339*4d6fc14bSjoerg            __rdstate_ |= __state | ios_base::badbit;
340*4d6fc14bSjoerg    }
341*4d6fc14bSjoerg
342*4d6fc14bSjoergprotected:
343*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
344*4d6fc14bSjoerg    ios_base() {// purposefully does no initialization
345*4d6fc14bSjoerg               }
346*4d6fc14bSjoerg
347*4d6fc14bSjoerg    void init(void* __sb);
348*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY void* rdbuf() const {return __rdbuf_;}
349*4d6fc14bSjoerg
350*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
351*4d6fc14bSjoerg    void rdbuf(void* __sb)
352*4d6fc14bSjoerg    {
353*4d6fc14bSjoerg        __rdbuf_ = __sb;
354*4d6fc14bSjoerg        clear();
355*4d6fc14bSjoerg    }
356*4d6fc14bSjoerg
357*4d6fc14bSjoerg    void __call_callbacks(event);
358*4d6fc14bSjoerg    void copyfmt(const ios_base&);
359*4d6fc14bSjoerg    void move(ios_base&);
360*4d6fc14bSjoerg    void swap(ios_base&) _NOEXCEPT;
361*4d6fc14bSjoerg
362*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
363*4d6fc14bSjoerg    void set_rdbuf(void* __sb)
364*4d6fc14bSjoerg    {
365*4d6fc14bSjoerg        __rdbuf_ = __sb;
366*4d6fc14bSjoerg    }
367*4d6fc14bSjoerg
368*4d6fc14bSjoergprivate:
369*4d6fc14bSjoerg    // All data members must be scalars
370*4d6fc14bSjoerg    fmtflags        __fmtflags_;
371*4d6fc14bSjoerg    streamsize      __precision_;
372*4d6fc14bSjoerg    streamsize      __width_;
373*4d6fc14bSjoerg    iostate         __rdstate_;
374*4d6fc14bSjoerg    iostate         __exceptions_;
375*4d6fc14bSjoerg    void*           __rdbuf_;
376*4d6fc14bSjoerg    void*           __loc_;
377*4d6fc14bSjoerg    event_callback* __fn_;
378*4d6fc14bSjoerg    int*            __index_;
379*4d6fc14bSjoerg    size_t          __event_size_;
380*4d6fc14bSjoerg    size_t          __event_cap_;
381*4d6fc14bSjoerg// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only
382*4d6fc14bSjoerg// enabled with clang.
383*4d6fc14bSjoerg#if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS)
384*4d6fc14bSjoerg    static atomic<int> __xindex_;
385*4d6fc14bSjoerg#else
386*4d6fc14bSjoerg    static int      __xindex_;
387*4d6fc14bSjoerg#endif
388*4d6fc14bSjoerg    long*           __iarray_;
389*4d6fc14bSjoerg    size_t          __iarray_size_;
390*4d6fc14bSjoerg    size_t          __iarray_cap_;
391*4d6fc14bSjoerg    void**          __parray_;
392*4d6fc14bSjoerg    size_t          __parray_size_;
393*4d6fc14bSjoerg    size_t          __parray_cap_;
394*4d6fc14bSjoerg};
395*4d6fc14bSjoerg
396*4d6fc14bSjoerg//enum class io_errc
397*4d6fc14bSjoerg_LIBCPP_DECLARE_STRONG_ENUM(io_errc)
398*4d6fc14bSjoerg{
399*4d6fc14bSjoerg    stream = 1
400*4d6fc14bSjoerg};
401*4d6fc14bSjoerg_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc)
402*4d6fc14bSjoerg
403*4d6fc14bSjoergtemplate <>
404*4d6fc14bSjoergstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type { };
405*4d6fc14bSjoerg
406*4d6fc14bSjoerg#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS
407*4d6fc14bSjoergtemplate <>
408*4d6fc14bSjoergstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type { };
409*4d6fc14bSjoerg#endif
410*4d6fc14bSjoerg
411*4d6fc14bSjoerg_LIBCPP_FUNC_VIS
412*4d6fc14bSjoergconst error_category& iostream_category() _NOEXCEPT;
413*4d6fc14bSjoerg
414*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
415*4d6fc14bSjoergerror_code
416*4d6fc14bSjoergmake_error_code(io_errc __e) _NOEXCEPT
417*4d6fc14bSjoerg{
418*4d6fc14bSjoerg    return error_code(static_cast<int>(__e), iostream_category());
419*4d6fc14bSjoerg}
420*4d6fc14bSjoerg
421*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
422*4d6fc14bSjoergerror_condition
423*4d6fc14bSjoergmake_error_condition(io_errc __e) _NOEXCEPT
424*4d6fc14bSjoerg{
425*4d6fc14bSjoerg    return error_condition(static_cast<int>(__e), iostream_category());
426*4d6fc14bSjoerg}
427*4d6fc14bSjoerg
428*4d6fc14bSjoergclass _LIBCPP_EXCEPTION_ABI ios_base::failure
429*4d6fc14bSjoerg    : public system_error
430*4d6fc14bSjoerg{
431*4d6fc14bSjoergpublic:
432*4d6fc14bSjoerg    explicit failure(const string& __msg, const error_code& __ec = io_errc::stream);
433*4d6fc14bSjoerg    explicit failure(const char* __msg, const error_code& __ec = io_errc::stream);
434*4d6fc14bSjoerg    failure(const failure&) _NOEXCEPT = default;
435*4d6fc14bSjoerg    virtual ~failure() _NOEXCEPT;
436*4d6fc14bSjoerg};
437*4d6fc14bSjoerg
438*4d6fc14bSjoerg_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
439*4d6fc14bSjoergvoid __throw_failure(char const* __msg) {
440*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
441*4d6fc14bSjoerg    throw ios_base::failure(__msg);
442*4d6fc14bSjoerg#else
443*4d6fc14bSjoerg    ((void)__msg);
444*4d6fc14bSjoerg    _VSTD::abort();
445*4d6fc14bSjoerg#endif
446*4d6fc14bSjoerg}
447*4d6fc14bSjoerg
448*4d6fc14bSjoergclass _LIBCPP_TYPE_VIS ios_base::Init
449*4d6fc14bSjoerg{
450*4d6fc14bSjoergpublic:
451*4d6fc14bSjoerg    Init();
452*4d6fc14bSjoerg    ~Init();
453*4d6fc14bSjoerg};
454*4d6fc14bSjoerg
455*4d6fc14bSjoerg// fmtflags
456*4d6fc14bSjoerg
457*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
458*4d6fc14bSjoergios_base::fmtflags
459*4d6fc14bSjoergios_base::flags() const
460*4d6fc14bSjoerg{
461*4d6fc14bSjoerg    return __fmtflags_;
462*4d6fc14bSjoerg}
463*4d6fc14bSjoerg
464*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
465*4d6fc14bSjoergios_base::fmtflags
466*4d6fc14bSjoergios_base::flags(fmtflags __fmtfl)
467*4d6fc14bSjoerg{
468*4d6fc14bSjoerg    fmtflags __r = __fmtflags_;
469*4d6fc14bSjoerg    __fmtflags_ = __fmtfl;
470*4d6fc14bSjoerg    return __r;
471*4d6fc14bSjoerg}
472*4d6fc14bSjoerg
473*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
474*4d6fc14bSjoergios_base::fmtflags
475*4d6fc14bSjoergios_base::setf(fmtflags __fmtfl)
476*4d6fc14bSjoerg{
477*4d6fc14bSjoerg    fmtflags __r = __fmtflags_;
478*4d6fc14bSjoerg    __fmtflags_ |= __fmtfl;
479*4d6fc14bSjoerg    return __r;
480*4d6fc14bSjoerg}
481*4d6fc14bSjoerg
482*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
483*4d6fc14bSjoergvoid
484*4d6fc14bSjoergios_base::unsetf(fmtflags __mask)
485*4d6fc14bSjoerg{
486*4d6fc14bSjoerg    __fmtflags_ &= ~__mask;
487*4d6fc14bSjoerg}
488*4d6fc14bSjoerg
489*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
490*4d6fc14bSjoergios_base::fmtflags
491*4d6fc14bSjoergios_base::setf(fmtflags __fmtfl, fmtflags __mask)
492*4d6fc14bSjoerg{
493*4d6fc14bSjoerg    fmtflags __r = __fmtflags_;
494*4d6fc14bSjoerg    unsetf(__mask);
495*4d6fc14bSjoerg    __fmtflags_ |= __fmtfl & __mask;
496*4d6fc14bSjoerg    return __r;
497*4d6fc14bSjoerg}
498*4d6fc14bSjoerg
499*4d6fc14bSjoerg// precision
500*4d6fc14bSjoerg
501*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
502*4d6fc14bSjoergstreamsize
503*4d6fc14bSjoergios_base::precision() const
504*4d6fc14bSjoerg{
505*4d6fc14bSjoerg    return __precision_;
506*4d6fc14bSjoerg}
507*4d6fc14bSjoerg
508*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
509*4d6fc14bSjoergstreamsize
510*4d6fc14bSjoergios_base::precision(streamsize __prec)
511*4d6fc14bSjoerg{
512*4d6fc14bSjoerg    streamsize __r = __precision_;
513*4d6fc14bSjoerg    __precision_ = __prec;
514*4d6fc14bSjoerg    return __r;
515*4d6fc14bSjoerg}
516*4d6fc14bSjoerg
517*4d6fc14bSjoerg// width
518*4d6fc14bSjoerg
519*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
520*4d6fc14bSjoergstreamsize
521*4d6fc14bSjoergios_base::width() const
522*4d6fc14bSjoerg{
523*4d6fc14bSjoerg    return __width_;
524*4d6fc14bSjoerg}
525*4d6fc14bSjoerg
526*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
527*4d6fc14bSjoergstreamsize
528*4d6fc14bSjoergios_base::width(streamsize __wide)
529*4d6fc14bSjoerg{
530*4d6fc14bSjoerg    streamsize __r = __width_;
531*4d6fc14bSjoerg    __width_ = __wide;
532*4d6fc14bSjoerg    return __r;
533*4d6fc14bSjoerg}
534*4d6fc14bSjoerg
535*4d6fc14bSjoerg// iostate
536*4d6fc14bSjoerg
537*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
538*4d6fc14bSjoergios_base::iostate
539*4d6fc14bSjoergios_base::rdstate() const
540*4d6fc14bSjoerg{
541*4d6fc14bSjoerg    return __rdstate_;
542*4d6fc14bSjoerg}
543*4d6fc14bSjoerg
544*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
545*4d6fc14bSjoergvoid
546*4d6fc14bSjoergios_base::setstate(iostate __state)
547*4d6fc14bSjoerg{
548*4d6fc14bSjoerg    clear(__rdstate_ | __state);
549*4d6fc14bSjoerg}
550*4d6fc14bSjoerg
551*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
552*4d6fc14bSjoergbool
553*4d6fc14bSjoergios_base::good() const
554*4d6fc14bSjoerg{
555*4d6fc14bSjoerg    return __rdstate_ == 0;
556*4d6fc14bSjoerg}
557*4d6fc14bSjoerg
558*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
559*4d6fc14bSjoergbool
560*4d6fc14bSjoergios_base::eof() const
561*4d6fc14bSjoerg{
562*4d6fc14bSjoerg    return (__rdstate_ & eofbit) != 0;
563*4d6fc14bSjoerg}
564*4d6fc14bSjoerg
565*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
566*4d6fc14bSjoergbool
567*4d6fc14bSjoergios_base::fail() const
568*4d6fc14bSjoerg{
569*4d6fc14bSjoerg    return (__rdstate_ & (failbit | badbit)) != 0;
570*4d6fc14bSjoerg}
571*4d6fc14bSjoerg
572*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
573*4d6fc14bSjoergbool
574*4d6fc14bSjoergios_base::bad() const
575*4d6fc14bSjoerg{
576*4d6fc14bSjoerg    return (__rdstate_ & badbit) != 0;
577*4d6fc14bSjoerg}
578*4d6fc14bSjoerg
579*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
580*4d6fc14bSjoergios_base::iostate
581*4d6fc14bSjoergios_base::exceptions() const
582*4d6fc14bSjoerg{
583*4d6fc14bSjoerg    return __exceptions_;
584*4d6fc14bSjoerg}
585*4d6fc14bSjoerg
586*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
587*4d6fc14bSjoergvoid
588*4d6fc14bSjoergios_base::exceptions(iostate __iostate)
589*4d6fc14bSjoerg{
590*4d6fc14bSjoerg    __exceptions_ = __iostate;
591*4d6fc14bSjoerg    clear(__rdstate_);
592*4d6fc14bSjoerg}
593*4d6fc14bSjoerg
594*4d6fc14bSjoerg#if defined(_LIBCPP_CXX03_LANG)
595*4d6fc14bSjoergstruct _LIBCPP_TYPE_VIS __cxx03_bool {
596*4d6fc14bSjoerg  typedef void (__cxx03_bool::*__bool_type)();
597*4d6fc14bSjoerg  void __true_value() {}
598*4d6fc14bSjoerg};
599*4d6fc14bSjoerg#endif
600*4d6fc14bSjoerg
601*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
602*4d6fc14bSjoergclass _LIBCPP_TEMPLATE_VIS basic_ios
603*4d6fc14bSjoerg    : public ios_base
604*4d6fc14bSjoerg{
605*4d6fc14bSjoergpublic:
606*4d6fc14bSjoerg    // types:
607*4d6fc14bSjoerg    typedef _CharT char_type;
608*4d6fc14bSjoerg    typedef _Traits traits_type;
609*4d6fc14bSjoerg
610*4d6fc14bSjoerg    typedef typename traits_type::int_type int_type;
611*4d6fc14bSjoerg    typedef typename traits_type::pos_type pos_type;
612*4d6fc14bSjoerg    typedef typename traits_type::off_type off_type;
613*4d6fc14bSjoerg
614*4d6fc14bSjoerg    static_assert((is_same<_CharT, typename traits_type::char_type>::value),
615*4d6fc14bSjoerg                  "traits_type::char_type must be the same type as CharT");
616*4d6fc14bSjoerg
617*4d6fc14bSjoerg  // __true_value will generate undefined references when linking unless
618*4d6fc14bSjoerg  // we give it internal linkage.
619*4d6fc14bSjoerg
620*4d6fc14bSjoerg#if defined(_LIBCPP_CXX03_LANG)
621*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
622*4d6fc14bSjoerg    operator __cxx03_bool::__bool_type() const {
623*4d6fc14bSjoerg        return !fail() ? &__cxx03_bool::__true_value : nullptr;
624*4d6fc14bSjoerg    }
625*4d6fc14bSjoerg#else
626*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
627*4d6fc14bSjoerg    _LIBCPP_EXPLICIT operator bool() const {return !fail();}
628*4d6fc14bSjoerg#endif
629*4d6fc14bSjoerg
630*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool operator!() const    {return  fail();}
631*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY iostate rdstate() const   {return ios_base::rdstate();}
632*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY void clear(iostate __state = goodbit) {ios_base::clear(__state);}
633*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state) {ios_base::setstate(__state);}
634*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool good() const {return ios_base::good();}
635*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool eof() const  {return ios_base::eof();}
636*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool fail() const {return ios_base::fail();}
637*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY bool bad() const  {return ios_base::bad();}
638*4d6fc14bSjoerg
639*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY iostate exceptions() const {return ios_base::exceptions();}
640*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate) {ios_base::exceptions(__iostate);}
641*4d6fc14bSjoerg
642*4d6fc14bSjoerg    // 27.5.4.1 Constructor/destructor:
643*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
644*4d6fc14bSjoerg    explicit basic_ios(basic_streambuf<char_type,traits_type>* __sb);
645*4d6fc14bSjoerg    virtual ~basic_ios();
646*4d6fc14bSjoerg
647*4d6fc14bSjoerg    // 27.5.4.2 Members:
648*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
649*4d6fc14bSjoerg    basic_ostream<char_type, traits_type>* tie() const;
650*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
651*4d6fc14bSjoerg    basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr);
652*4d6fc14bSjoerg
653*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
654*4d6fc14bSjoerg    basic_streambuf<char_type, traits_type>* rdbuf() const;
655*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
656*4d6fc14bSjoerg    basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb);
657*4d6fc14bSjoerg
658*4d6fc14bSjoerg    basic_ios& copyfmt(const basic_ios& __rhs);
659*4d6fc14bSjoerg
660*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
661*4d6fc14bSjoerg    char_type fill() const;
662*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
663*4d6fc14bSjoerg    char_type fill(char_type __ch);
664*4d6fc14bSjoerg
665*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
666*4d6fc14bSjoerg    locale imbue(const locale& __loc);
667*4d6fc14bSjoerg
668*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
669*4d6fc14bSjoerg    char narrow(char_type __c, char __dfault) const;
670*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
671*4d6fc14bSjoerg    char_type widen(char __c) const;
672*4d6fc14bSjoerg
673*4d6fc14bSjoergprotected:
674*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
675*4d6fc14bSjoerg    basic_ios() {// purposefully does no initialization
676*4d6fc14bSjoerg                }
677*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
678*4d6fc14bSjoerg    void init(basic_streambuf<char_type, traits_type>* __sb);
679*4d6fc14bSjoerg
680*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
681*4d6fc14bSjoerg    void move(basic_ios& __rhs);
682*4d6fc14bSjoerg#ifndef _LIBCPP_CXX03_LANG
683*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
684*4d6fc14bSjoerg    void move(basic_ios&& __rhs) {move(__rhs);}
685*4d6fc14bSjoerg#endif
686*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
687*4d6fc14bSjoerg    void swap(basic_ios& __rhs) _NOEXCEPT;
688*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
689*4d6fc14bSjoerg    void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb);
690*4d6fc14bSjoergprivate:
691*4d6fc14bSjoerg    basic_ostream<char_type, traits_type>* __tie_;
692*4d6fc14bSjoerg    mutable int_type __fill_;
693*4d6fc14bSjoerg};
694*4d6fc14bSjoerg
695*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
696*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
697*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type,traits_type>* __sb)
698*4d6fc14bSjoerg{
699*4d6fc14bSjoerg    init(__sb);
700*4d6fc14bSjoerg}
701*4d6fc14bSjoerg
702*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
703*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::~basic_ios()
704*4d6fc14bSjoerg{
705*4d6fc14bSjoerg}
706*4d6fc14bSjoerg
707*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
708*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
709*4d6fc14bSjoergvoid
710*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb)
711*4d6fc14bSjoerg{
712*4d6fc14bSjoerg    ios_base::init(__sb);
713*4d6fc14bSjoerg    __tie_ = nullptr;
714*4d6fc14bSjoerg    __fill_ = traits_type::eof();
715*4d6fc14bSjoerg}
716*4d6fc14bSjoerg
717*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
718*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
719*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>*
720*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::tie() const
721*4d6fc14bSjoerg{
722*4d6fc14bSjoerg    return __tie_;
723*4d6fc14bSjoerg}
724*4d6fc14bSjoerg
725*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
726*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
727*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>*
728*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr)
729*4d6fc14bSjoerg{
730*4d6fc14bSjoerg    basic_ostream<char_type, traits_type>* __r = __tie_;
731*4d6fc14bSjoerg    __tie_ = __tiestr;
732*4d6fc14bSjoerg    return __r;
733*4d6fc14bSjoerg}
734*4d6fc14bSjoerg
735*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
736*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
737*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>*
738*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::rdbuf() const
739*4d6fc14bSjoerg{
740*4d6fc14bSjoerg    return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf());
741*4d6fc14bSjoerg}
742*4d6fc14bSjoerg
743*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
744*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
745*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>*
746*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb)
747*4d6fc14bSjoerg{
748*4d6fc14bSjoerg    basic_streambuf<char_type, traits_type>* __r = rdbuf();
749*4d6fc14bSjoerg    ios_base::rdbuf(__sb);
750*4d6fc14bSjoerg    return __r;
751*4d6fc14bSjoerg}
752*4d6fc14bSjoerg
753*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
754*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
755*4d6fc14bSjoerglocale
756*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::imbue(const locale& __loc)
757*4d6fc14bSjoerg{
758*4d6fc14bSjoerg    locale __r = getloc();
759*4d6fc14bSjoerg    ios_base::imbue(__loc);
760*4d6fc14bSjoerg    if (rdbuf())
761*4d6fc14bSjoerg        rdbuf()->pubimbue(__loc);
762*4d6fc14bSjoerg    return __r;
763*4d6fc14bSjoerg}
764*4d6fc14bSjoerg
765*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
766*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
767*4d6fc14bSjoergchar
768*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const
769*4d6fc14bSjoerg{
770*4d6fc14bSjoerg    return use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault);
771*4d6fc14bSjoerg}
772*4d6fc14bSjoerg
773*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
774*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
775*4d6fc14bSjoerg_CharT
776*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::widen(char __c) const
777*4d6fc14bSjoerg{
778*4d6fc14bSjoerg    return use_facet<ctype<char_type> >(getloc()).widen(__c);
779*4d6fc14bSjoerg}
780*4d6fc14bSjoerg
781*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
782*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
783*4d6fc14bSjoerg_CharT
784*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::fill() const
785*4d6fc14bSjoerg{
786*4d6fc14bSjoerg    if (traits_type::eq_int_type(traits_type::eof(), __fill_))
787*4d6fc14bSjoerg        __fill_ = widen(' ');
788*4d6fc14bSjoerg    return __fill_;
789*4d6fc14bSjoerg}
790*4d6fc14bSjoerg
791*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
792*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
793*4d6fc14bSjoerg_CharT
794*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::fill(char_type __ch)
795*4d6fc14bSjoerg{
796*4d6fc14bSjoerg    char_type __r = __fill_;
797*4d6fc14bSjoerg    __fill_ = __ch;
798*4d6fc14bSjoerg    return __r;
799*4d6fc14bSjoerg}
800*4d6fc14bSjoerg
801*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
802*4d6fc14bSjoergbasic_ios<_CharT, _Traits>&
803*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
804*4d6fc14bSjoerg{
805*4d6fc14bSjoerg    if (this != &__rhs)
806*4d6fc14bSjoerg    {
807*4d6fc14bSjoerg        __call_callbacks(erase_event);
808*4d6fc14bSjoerg        ios_base::copyfmt(__rhs);
809*4d6fc14bSjoerg        __tie_ = __rhs.__tie_;
810*4d6fc14bSjoerg        __fill_ = __rhs.__fill_;
811*4d6fc14bSjoerg        __call_callbacks(copyfmt_event);
812*4d6fc14bSjoerg        exceptions(__rhs.exceptions());
813*4d6fc14bSjoerg    }
814*4d6fc14bSjoerg    return *this;
815*4d6fc14bSjoerg}
816*4d6fc14bSjoerg
817*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
818*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
819*4d6fc14bSjoergvoid
820*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::move(basic_ios& __rhs)
821*4d6fc14bSjoerg{
822*4d6fc14bSjoerg    ios_base::move(__rhs);
823*4d6fc14bSjoerg    __tie_ = __rhs.__tie_;
824*4d6fc14bSjoerg    __rhs.__tie_ = nullptr;
825*4d6fc14bSjoerg    __fill_ = __rhs.__fill_;
826*4d6fc14bSjoerg}
827*4d6fc14bSjoerg
828*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
829*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
830*4d6fc14bSjoergvoid
831*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT
832*4d6fc14bSjoerg{
833*4d6fc14bSjoerg    ios_base::swap(__rhs);
834*4d6fc14bSjoerg    _VSTD::swap(__tie_, __rhs.__tie_);
835*4d6fc14bSjoerg    _VSTD::swap(__fill_, __rhs.__fill_);
836*4d6fc14bSjoerg}
837*4d6fc14bSjoerg
838*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
839*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
840*4d6fc14bSjoergvoid
841*4d6fc14bSjoergbasic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb)
842*4d6fc14bSjoerg{
843*4d6fc14bSjoerg    ios_base::set_rdbuf(__sb);
844*4d6fc14bSjoerg}
845*4d6fc14bSjoerg
846*4d6fc14bSjoerginline
847*4d6fc14bSjoergios_base&
848*4d6fc14bSjoergboolalpha(ios_base& __str)
849*4d6fc14bSjoerg{
850*4d6fc14bSjoerg    __str.setf(ios_base::boolalpha);
851*4d6fc14bSjoerg    return __str;
852*4d6fc14bSjoerg}
853*4d6fc14bSjoerg
854*4d6fc14bSjoerginline
855*4d6fc14bSjoergios_base&
856*4d6fc14bSjoergnoboolalpha(ios_base& __str)
857*4d6fc14bSjoerg{
858*4d6fc14bSjoerg    __str.unsetf(ios_base::boolalpha);
859*4d6fc14bSjoerg    return __str;
860*4d6fc14bSjoerg}
861*4d6fc14bSjoerg
862*4d6fc14bSjoerginline
863*4d6fc14bSjoergios_base&
864*4d6fc14bSjoergshowbase(ios_base& __str)
865*4d6fc14bSjoerg{
866*4d6fc14bSjoerg    __str.setf(ios_base::showbase);
867*4d6fc14bSjoerg    return __str;
868*4d6fc14bSjoerg}
869*4d6fc14bSjoerg
870*4d6fc14bSjoerginline
871*4d6fc14bSjoergios_base&
872*4d6fc14bSjoergnoshowbase(ios_base& __str)
873*4d6fc14bSjoerg{
874*4d6fc14bSjoerg    __str.unsetf(ios_base::showbase);
875*4d6fc14bSjoerg    return __str;
876*4d6fc14bSjoerg}
877*4d6fc14bSjoerg
878*4d6fc14bSjoerginline
879*4d6fc14bSjoergios_base&
880*4d6fc14bSjoergshowpoint(ios_base& __str)
881*4d6fc14bSjoerg{
882*4d6fc14bSjoerg    __str.setf(ios_base::showpoint);
883*4d6fc14bSjoerg    return __str;
884*4d6fc14bSjoerg}
885*4d6fc14bSjoerg
886*4d6fc14bSjoerginline
887*4d6fc14bSjoergios_base&
888*4d6fc14bSjoergnoshowpoint(ios_base& __str)
889*4d6fc14bSjoerg{
890*4d6fc14bSjoerg    __str.unsetf(ios_base::showpoint);
891*4d6fc14bSjoerg    return __str;
892*4d6fc14bSjoerg}
893*4d6fc14bSjoerg
894*4d6fc14bSjoerginline
895*4d6fc14bSjoergios_base&
896*4d6fc14bSjoergshowpos(ios_base& __str)
897*4d6fc14bSjoerg{
898*4d6fc14bSjoerg    __str.setf(ios_base::showpos);
899*4d6fc14bSjoerg    return __str;
900*4d6fc14bSjoerg}
901*4d6fc14bSjoerg
902*4d6fc14bSjoerginline
903*4d6fc14bSjoergios_base&
904*4d6fc14bSjoergnoshowpos(ios_base& __str)
905*4d6fc14bSjoerg{
906*4d6fc14bSjoerg    __str.unsetf(ios_base::showpos);
907*4d6fc14bSjoerg    return __str;
908*4d6fc14bSjoerg}
909*4d6fc14bSjoerg
910*4d6fc14bSjoerginline
911*4d6fc14bSjoergios_base&
912*4d6fc14bSjoergskipws(ios_base& __str)
913*4d6fc14bSjoerg{
914*4d6fc14bSjoerg    __str.setf(ios_base::skipws);
915*4d6fc14bSjoerg    return __str;
916*4d6fc14bSjoerg}
917*4d6fc14bSjoerg
918*4d6fc14bSjoerginline
919*4d6fc14bSjoergios_base&
920*4d6fc14bSjoergnoskipws(ios_base& __str)
921*4d6fc14bSjoerg{
922*4d6fc14bSjoerg    __str.unsetf(ios_base::skipws);
923*4d6fc14bSjoerg    return __str;
924*4d6fc14bSjoerg}
925*4d6fc14bSjoerg
926*4d6fc14bSjoerginline
927*4d6fc14bSjoergios_base&
928*4d6fc14bSjoerguppercase(ios_base& __str)
929*4d6fc14bSjoerg{
930*4d6fc14bSjoerg    __str.setf(ios_base::uppercase);
931*4d6fc14bSjoerg    return __str;
932*4d6fc14bSjoerg}
933*4d6fc14bSjoerg
934*4d6fc14bSjoerginline
935*4d6fc14bSjoergios_base&
936*4d6fc14bSjoergnouppercase(ios_base& __str)
937*4d6fc14bSjoerg{
938*4d6fc14bSjoerg    __str.unsetf(ios_base::uppercase);
939*4d6fc14bSjoerg    return __str;
940*4d6fc14bSjoerg}
941*4d6fc14bSjoerg
942*4d6fc14bSjoerginline
943*4d6fc14bSjoergios_base&
944*4d6fc14bSjoergunitbuf(ios_base& __str)
945*4d6fc14bSjoerg{
946*4d6fc14bSjoerg    __str.setf(ios_base::unitbuf);
947*4d6fc14bSjoerg    return __str;
948*4d6fc14bSjoerg}
949*4d6fc14bSjoerg
950*4d6fc14bSjoerginline
951*4d6fc14bSjoergios_base&
952*4d6fc14bSjoergnounitbuf(ios_base& __str)
953*4d6fc14bSjoerg{
954*4d6fc14bSjoerg    __str.unsetf(ios_base::unitbuf);
955*4d6fc14bSjoerg    return __str;
956*4d6fc14bSjoerg}
957*4d6fc14bSjoerg
958*4d6fc14bSjoerginline
959*4d6fc14bSjoergios_base&
960*4d6fc14bSjoerginternal(ios_base& __str)
961*4d6fc14bSjoerg{
962*4d6fc14bSjoerg    __str.setf(ios_base::internal, ios_base::adjustfield);
963*4d6fc14bSjoerg    return __str;
964*4d6fc14bSjoerg}
965*4d6fc14bSjoerg
966*4d6fc14bSjoerginline
967*4d6fc14bSjoergios_base&
968*4d6fc14bSjoergleft(ios_base& __str)
969*4d6fc14bSjoerg{
970*4d6fc14bSjoerg    __str.setf(ios_base::left, ios_base::adjustfield);
971*4d6fc14bSjoerg    return __str;
972*4d6fc14bSjoerg}
973*4d6fc14bSjoerg
974*4d6fc14bSjoerginline
975*4d6fc14bSjoergios_base&
976*4d6fc14bSjoergright(ios_base& __str)
977*4d6fc14bSjoerg{
978*4d6fc14bSjoerg    __str.setf(ios_base::right, ios_base::adjustfield);
979*4d6fc14bSjoerg    return __str;
980*4d6fc14bSjoerg}
981*4d6fc14bSjoerg
982*4d6fc14bSjoerginline
983*4d6fc14bSjoergios_base&
984*4d6fc14bSjoergdec(ios_base& __str)
985*4d6fc14bSjoerg{
986*4d6fc14bSjoerg    __str.setf(ios_base::dec, ios_base::basefield);
987*4d6fc14bSjoerg    return __str;
988*4d6fc14bSjoerg}
989*4d6fc14bSjoerg
990*4d6fc14bSjoerginline
991*4d6fc14bSjoergios_base&
992*4d6fc14bSjoerghex(ios_base& __str)
993*4d6fc14bSjoerg{
994*4d6fc14bSjoerg    __str.setf(ios_base::hex, ios_base::basefield);
995*4d6fc14bSjoerg    return __str;
996*4d6fc14bSjoerg}
997*4d6fc14bSjoerg
998*4d6fc14bSjoerginline
999*4d6fc14bSjoergios_base&
1000*4d6fc14bSjoergoct(ios_base& __str)
1001*4d6fc14bSjoerg{
1002*4d6fc14bSjoerg    __str.setf(ios_base::oct, ios_base::basefield);
1003*4d6fc14bSjoerg    return __str;
1004*4d6fc14bSjoerg}
1005*4d6fc14bSjoerg
1006*4d6fc14bSjoerginline
1007*4d6fc14bSjoergios_base&
1008*4d6fc14bSjoergfixed(ios_base& __str)
1009*4d6fc14bSjoerg{
1010*4d6fc14bSjoerg    __str.setf(ios_base::fixed, ios_base::floatfield);
1011*4d6fc14bSjoerg    return __str;
1012*4d6fc14bSjoerg}
1013*4d6fc14bSjoerg
1014*4d6fc14bSjoerginline
1015*4d6fc14bSjoergios_base&
1016*4d6fc14bSjoergscientific(ios_base& __str)
1017*4d6fc14bSjoerg{
1018*4d6fc14bSjoerg    __str.setf(ios_base::scientific, ios_base::floatfield);
1019*4d6fc14bSjoerg    return __str;
1020*4d6fc14bSjoerg}
1021*4d6fc14bSjoerg
1022*4d6fc14bSjoerginline
1023*4d6fc14bSjoergios_base&
1024*4d6fc14bSjoerghexfloat(ios_base& __str)
1025*4d6fc14bSjoerg{
1026*4d6fc14bSjoerg    __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
1027*4d6fc14bSjoerg    return __str;
1028*4d6fc14bSjoerg}
1029*4d6fc14bSjoerg
1030*4d6fc14bSjoerginline
1031*4d6fc14bSjoergios_base&
1032*4d6fc14bSjoergdefaultfloat(ios_base& __str)
1033*4d6fc14bSjoerg{
1034*4d6fc14bSjoerg    __str.unsetf(ios_base::floatfield);
1035*4d6fc14bSjoerg    return __str;
1036*4d6fc14bSjoerg}
1037*4d6fc14bSjoerg
1038*4d6fc14bSjoerg_LIBCPP_END_NAMESPACE_STD
1039*4d6fc14bSjoerg
1040*4d6fc14bSjoerg#endif // _LIBCPP_IOS
1041