xref: /netbsd-src/external/apache2/llvm/dist/libcxx/include/iomanip (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
1*4d6fc14bSjoerg// -*- C++ -*-
2*4d6fc14bSjoerg//===--------------------------- iomanip ----------------------------------===//
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_IOMANIP
11*4d6fc14bSjoerg#define _LIBCPP_IOMANIP
12*4d6fc14bSjoerg
13*4d6fc14bSjoerg/*
14*4d6fc14bSjoerg    iomanip synopsis
15*4d6fc14bSjoerg
16*4d6fc14bSjoergnamespace std {
17*4d6fc14bSjoerg
18*4d6fc14bSjoerg// types T1, T2, ... are unspecified implementation types
19*4d6fc14bSjoergT1 resetiosflags(ios_base::fmtflags mask);
20*4d6fc14bSjoergT2 setiosflags (ios_base::fmtflags mask);
21*4d6fc14bSjoergT3 setbase(int base);
22*4d6fc14bSjoergtemplate<charT> T4 setfill(charT c);
23*4d6fc14bSjoergT5 setprecision(int n);
24*4d6fc14bSjoergT6 setw(int n);
25*4d6fc14bSjoergtemplate <class moneyT> T7 get_money(moneyT& mon, bool intl = false);
26*4d6fc14bSjoergtemplate <class charT, class moneyT> T8 put_money(const moneyT& mon, bool intl = false);
27*4d6fc14bSjoergtemplate <class charT> T9 get_time(struct tm* tmb, const charT* fmt);
28*4d6fc14bSjoergtemplate <class charT> T10 put_time(const struct tm* tmb, const charT* fmt);
29*4d6fc14bSjoerg
30*4d6fc14bSjoergtemplate <class charT>
31*4d6fc14bSjoerg  T11 quoted(const charT* s, charT delim=charT('"'), charT escape=charT('\\')); // C++14
32*4d6fc14bSjoerg
33*4d6fc14bSjoergtemplate <class charT, class traits, class Allocator>
34*4d6fc14bSjoerg  T12 quoted(const basic_string<charT, traits, Allocator>& s,
35*4d6fc14bSjoerg             charT delim=charT('"'), charT escape=charT('\\')); // C++14
36*4d6fc14bSjoerg
37*4d6fc14bSjoergtemplate <class charT, class traits, class Allocator>
38*4d6fc14bSjoerg  T13 quoted(basic_string<charT, traits, Allocator>& s,
39*4d6fc14bSjoerg             charT delim=charT('"'), charT escape=charT('\\')); // C++14
40*4d6fc14bSjoerg
41*4d6fc14bSjoerg}  // std
42*4d6fc14bSjoerg
43*4d6fc14bSjoerg*/
44*4d6fc14bSjoerg
45*4d6fc14bSjoerg#include <__config>
46*4d6fc14bSjoerg#include <__string>
47*4d6fc14bSjoerg#include <istream>
48*4d6fc14bSjoerg#include <version>
49*4d6fc14bSjoerg
50*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
51*4d6fc14bSjoerg#pragma GCC system_header
52*4d6fc14bSjoerg#endif
53*4d6fc14bSjoerg
54*4d6fc14bSjoerg_LIBCPP_BEGIN_NAMESPACE_STD
55*4d6fc14bSjoerg
56*4d6fc14bSjoerg// resetiosflags
57*4d6fc14bSjoerg
58*4d6fc14bSjoergclass __iom_t1
59*4d6fc14bSjoerg{
60*4d6fc14bSjoerg    ios_base::fmtflags __mask_;
61*4d6fc14bSjoergpublic:
62*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
63*4d6fc14bSjoerg    explicit __iom_t1(ios_base::fmtflags __m) : __mask_(__m) {}
64*4d6fc14bSjoerg
65*4d6fc14bSjoerg    template <class _CharT, class _Traits>
66*4d6fc14bSjoerg    friend
67*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
68*4d6fc14bSjoerg    basic_istream<_CharT, _Traits>&
69*4d6fc14bSjoerg    operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t1& __x)
70*4d6fc14bSjoerg    {
71*4d6fc14bSjoerg        __is.unsetf(__x.__mask_);
72*4d6fc14bSjoerg        return __is;
73*4d6fc14bSjoerg    }
74*4d6fc14bSjoerg
75*4d6fc14bSjoerg    template <class _CharT, class _Traits>
76*4d6fc14bSjoerg    friend
77*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
78*4d6fc14bSjoerg    basic_ostream<_CharT, _Traits>&
79*4d6fc14bSjoerg    operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t1& __x)
80*4d6fc14bSjoerg    {
81*4d6fc14bSjoerg        __os.unsetf(__x.__mask_);
82*4d6fc14bSjoerg        return __os;
83*4d6fc14bSjoerg    }
84*4d6fc14bSjoerg};
85*4d6fc14bSjoerg
86*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
87*4d6fc14bSjoerg__iom_t1
88*4d6fc14bSjoergresetiosflags(ios_base::fmtflags __mask)
89*4d6fc14bSjoerg{
90*4d6fc14bSjoerg    return __iom_t1(__mask);
91*4d6fc14bSjoerg}
92*4d6fc14bSjoerg
93*4d6fc14bSjoerg// setiosflags
94*4d6fc14bSjoerg
95*4d6fc14bSjoergclass __iom_t2
96*4d6fc14bSjoerg{
97*4d6fc14bSjoerg    ios_base::fmtflags __mask_;
98*4d6fc14bSjoergpublic:
99*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
100*4d6fc14bSjoerg    explicit __iom_t2(ios_base::fmtflags __m) : __mask_(__m) {}
101*4d6fc14bSjoerg
102*4d6fc14bSjoerg    template <class _CharT, class _Traits>
103*4d6fc14bSjoerg    friend
104*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
105*4d6fc14bSjoerg    basic_istream<_CharT, _Traits>&
106*4d6fc14bSjoerg    operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t2& __x)
107*4d6fc14bSjoerg    {
108*4d6fc14bSjoerg        __is.setf(__x.__mask_);
109*4d6fc14bSjoerg        return __is;
110*4d6fc14bSjoerg    }
111*4d6fc14bSjoerg
112*4d6fc14bSjoerg    template <class _CharT, class _Traits>
113*4d6fc14bSjoerg    friend
114*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
115*4d6fc14bSjoerg    basic_ostream<_CharT, _Traits>&
116*4d6fc14bSjoerg    operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t2& __x)
117*4d6fc14bSjoerg    {
118*4d6fc14bSjoerg        __os.setf(__x.__mask_);
119*4d6fc14bSjoerg        return __os;
120*4d6fc14bSjoerg    }
121*4d6fc14bSjoerg};
122*4d6fc14bSjoerg
123*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
124*4d6fc14bSjoerg__iom_t2
125*4d6fc14bSjoergsetiosflags(ios_base::fmtflags __mask)
126*4d6fc14bSjoerg{
127*4d6fc14bSjoerg    return __iom_t2(__mask);
128*4d6fc14bSjoerg}
129*4d6fc14bSjoerg
130*4d6fc14bSjoerg// setbase
131*4d6fc14bSjoerg
132*4d6fc14bSjoergclass __iom_t3
133*4d6fc14bSjoerg{
134*4d6fc14bSjoerg    int __base_;
135*4d6fc14bSjoergpublic:
136*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
137*4d6fc14bSjoerg    explicit __iom_t3(int __b) : __base_(__b) {}
138*4d6fc14bSjoerg
139*4d6fc14bSjoerg    template <class _CharT, class _Traits>
140*4d6fc14bSjoerg    friend
141*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
142*4d6fc14bSjoerg    basic_istream<_CharT, _Traits>&
143*4d6fc14bSjoerg    operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t3& __x)
144*4d6fc14bSjoerg    {
145*4d6fc14bSjoerg        __is.setf(__x.__base_ == 8  ? ios_base::oct :
146*4d6fc14bSjoerg                  __x.__base_ == 10 ? ios_base::dec :
147*4d6fc14bSjoerg                  __x.__base_ == 16 ? ios_base::hex :
148*4d6fc14bSjoerg                  ios_base::fmtflags(0), ios_base::basefield);
149*4d6fc14bSjoerg        return __is;
150*4d6fc14bSjoerg    }
151*4d6fc14bSjoerg
152*4d6fc14bSjoerg    template <class _CharT, class _Traits>
153*4d6fc14bSjoerg    friend
154*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
155*4d6fc14bSjoerg    basic_ostream<_CharT, _Traits>&
156*4d6fc14bSjoerg    operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t3& __x)
157*4d6fc14bSjoerg    {
158*4d6fc14bSjoerg        __os.setf(__x.__base_ == 8  ? ios_base::oct :
159*4d6fc14bSjoerg                  __x.__base_ == 10 ? ios_base::dec :
160*4d6fc14bSjoerg                  __x.__base_ == 16 ? ios_base::hex :
161*4d6fc14bSjoerg                  ios_base::fmtflags(0), ios_base::basefield);
162*4d6fc14bSjoerg        return __os;
163*4d6fc14bSjoerg    }
164*4d6fc14bSjoerg};
165*4d6fc14bSjoerg
166*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
167*4d6fc14bSjoerg__iom_t3
168*4d6fc14bSjoergsetbase(int __base)
169*4d6fc14bSjoerg{
170*4d6fc14bSjoerg    return __iom_t3(__base);
171*4d6fc14bSjoerg}
172*4d6fc14bSjoerg
173*4d6fc14bSjoerg// setfill
174*4d6fc14bSjoerg
175*4d6fc14bSjoergtemplate<class _CharT>
176*4d6fc14bSjoergclass __iom_t4
177*4d6fc14bSjoerg{
178*4d6fc14bSjoerg    _CharT __fill_;
179*4d6fc14bSjoergpublic:
180*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
181*4d6fc14bSjoerg    explicit __iom_t4(_CharT __c) : __fill_(__c) {}
182*4d6fc14bSjoerg
183*4d6fc14bSjoerg    template <class _Traits>
184*4d6fc14bSjoerg    friend
185*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
186*4d6fc14bSjoerg    basic_ostream<_CharT, _Traits>&
187*4d6fc14bSjoerg    operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t4& __x)
188*4d6fc14bSjoerg    {
189*4d6fc14bSjoerg        __os.fill(__x.__fill_);
190*4d6fc14bSjoerg        return __os;
191*4d6fc14bSjoerg    }
192*4d6fc14bSjoerg};
193*4d6fc14bSjoerg
194*4d6fc14bSjoergtemplate<class _CharT>
195*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
196*4d6fc14bSjoerg__iom_t4<_CharT>
197*4d6fc14bSjoergsetfill(_CharT __c)
198*4d6fc14bSjoerg{
199*4d6fc14bSjoerg    return __iom_t4<_CharT>(__c);
200*4d6fc14bSjoerg}
201*4d6fc14bSjoerg
202*4d6fc14bSjoerg// setprecision
203*4d6fc14bSjoerg
204*4d6fc14bSjoergclass __iom_t5
205*4d6fc14bSjoerg{
206*4d6fc14bSjoerg    int __n_;
207*4d6fc14bSjoergpublic:
208*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
209*4d6fc14bSjoerg    explicit __iom_t5(int __n) : __n_(__n) {}
210*4d6fc14bSjoerg
211*4d6fc14bSjoerg    template <class _CharT, class _Traits>
212*4d6fc14bSjoerg    friend
213*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
214*4d6fc14bSjoerg    basic_istream<_CharT, _Traits>&
215*4d6fc14bSjoerg    operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t5& __x)
216*4d6fc14bSjoerg    {
217*4d6fc14bSjoerg        __is.precision(__x.__n_);
218*4d6fc14bSjoerg        return __is;
219*4d6fc14bSjoerg    }
220*4d6fc14bSjoerg
221*4d6fc14bSjoerg    template <class _CharT, class _Traits>
222*4d6fc14bSjoerg    friend
223*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
224*4d6fc14bSjoerg    basic_ostream<_CharT, _Traits>&
225*4d6fc14bSjoerg    operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t5& __x)
226*4d6fc14bSjoerg    {
227*4d6fc14bSjoerg        __os.precision(__x.__n_);
228*4d6fc14bSjoerg        return __os;
229*4d6fc14bSjoerg    }
230*4d6fc14bSjoerg};
231*4d6fc14bSjoerg
232*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
233*4d6fc14bSjoerg__iom_t5
234*4d6fc14bSjoergsetprecision(int __n)
235*4d6fc14bSjoerg{
236*4d6fc14bSjoerg    return __iom_t5(__n);
237*4d6fc14bSjoerg}
238*4d6fc14bSjoerg
239*4d6fc14bSjoerg// setw
240*4d6fc14bSjoerg
241*4d6fc14bSjoergclass __iom_t6
242*4d6fc14bSjoerg{
243*4d6fc14bSjoerg    int __n_;
244*4d6fc14bSjoergpublic:
245*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
246*4d6fc14bSjoerg    explicit __iom_t6(int __n) : __n_(__n) {}
247*4d6fc14bSjoerg
248*4d6fc14bSjoerg    template <class _CharT, class _Traits>
249*4d6fc14bSjoerg    friend
250*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
251*4d6fc14bSjoerg    basic_istream<_CharT, _Traits>&
252*4d6fc14bSjoerg    operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t6& __x)
253*4d6fc14bSjoerg    {
254*4d6fc14bSjoerg        __is.width(__x.__n_);
255*4d6fc14bSjoerg        return __is;
256*4d6fc14bSjoerg    }
257*4d6fc14bSjoerg
258*4d6fc14bSjoerg    template <class _CharT, class _Traits>
259*4d6fc14bSjoerg    friend
260*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
261*4d6fc14bSjoerg    basic_ostream<_CharT, _Traits>&
262*4d6fc14bSjoerg    operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t6& __x)
263*4d6fc14bSjoerg    {
264*4d6fc14bSjoerg        __os.width(__x.__n_);
265*4d6fc14bSjoerg        return __os;
266*4d6fc14bSjoerg    }
267*4d6fc14bSjoerg};
268*4d6fc14bSjoerg
269*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
270*4d6fc14bSjoerg__iom_t6
271*4d6fc14bSjoergsetw(int __n)
272*4d6fc14bSjoerg{
273*4d6fc14bSjoerg    return __iom_t6(__n);
274*4d6fc14bSjoerg}
275*4d6fc14bSjoerg
276*4d6fc14bSjoerg// get_money
277*4d6fc14bSjoerg
278*4d6fc14bSjoergtemplate <class _MoneyT> class __iom_t7;
279*4d6fc14bSjoerg
280*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _MoneyT>
281*4d6fc14bSjoergbasic_istream<_CharT, _Traits>&
282*4d6fc14bSjoergoperator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x);
283*4d6fc14bSjoerg
284*4d6fc14bSjoergtemplate <class _MoneyT>
285*4d6fc14bSjoergclass __iom_t7
286*4d6fc14bSjoerg{
287*4d6fc14bSjoerg    _MoneyT& __mon_;
288*4d6fc14bSjoerg    bool __intl_;
289*4d6fc14bSjoergpublic:
290*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
291*4d6fc14bSjoerg    __iom_t7(_MoneyT& __mon, bool __intl)
292*4d6fc14bSjoerg        : __mon_(__mon), __intl_(__intl) {}
293*4d6fc14bSjoerg
294*4d6fc14bSjoerg    template <class _CharT, class _Traits, class _Mp>
295*4d6fc14bSjoerg    friend
296*4d6fc14bSjoerg    basic_istream<_CharT, _Traits>&
297*4d6fc14bSjoerg    operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_Mp>& __x);
298*4d6fc14bSjoerg};
299*4d6fc14bSjoerg
300*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _MoneyT>
301*4d6fc14bSjoergbasic_istream<_CharT, _Traits>&
302*4d6fc14bSjoergoperator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x)
303*4d6fc14bSjoerg{
304*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
305*4d6fc14bSjoerg    try
306*4d6fc14bSjoerg    {
307*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
308*4d6fc14bSjoerg        typename basic_istream<_CharT, _Traits>::sentry __s(__is);
309*4d6fc14bSjoerg        if (__s)
310*4d6fc14bSjoerg        {
311*4d6fc14bSjoerg            typedef istreambuf_iterator<_CharT, _Traits> _Ip;
312*4d6fc14bSjoerg            typedef money_get<_CharT, _Ip> _Fp;
313*4d6fc14bSjoerg            ios_base::iostate __err = ios_base::goodbit;
314*4d6fc14bSjoerg            const _Fp& __mf = use_facet<_Fp>(__is.getloc());
315*4d6fc14bSjoerg            __mf.get(_Ip(__is), _Ip(), __x.__intl_, __is, __err, __x.__mon_);
316*4d6fc14bSjoerg            __is.setstate(__err);
317*4d6fc14bSjoerg        }
318*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
319*4d6fc14bSjoerg    }
320*4d6fc14bSjoerg    catch (...)
321*4d6fc14bSjoerg    {
322*4d6fc14bSjoerg        __is.__set_badbit_and_consider_rethrow();
323*4d6fc14bSjoerg    }
324*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
325*4d6fc14bSjoerg    return __is;
326*4d6fc14bSjoerg}
327*4d6fc14bSjoerg
328*4d6fc14bSjoergtemplate <class _MoneyT>
329*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
330*4d6fc14bSjoerg__iom_t7<_MoneyT>
331*4d6fc14bSjoergget_money(_MoneyT& __mon, bool __intl = false)
332*4d6fc14bSjoerg{
333*4d6fc14bSjoerg    return __iom_t7<_MoneyT>(__mon, __intl);
334*4d6fc14bSjoerg}
335*4d6fc14bSjoerg
336*4d6fc14bSjoerg// put_money
337*4d6fc14bSjoerg
338*4d6fc14bSjoergtemplate <class _MoneyT> class __iom_t8;
339*4d6fc14bSjoerg
340*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _MoneyT>
341*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>&
342*4d6fc14bSjoergoperator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x);
343*4d6fc14bSjoerg
344*4d6fc14bSjoergtemplate <class _MoneyT>
345*4d6fc14bSjoergclass __iom_t8
346*4d6fc14bSjoerg{
347*4d6fc14bSjoerg    const _MoneyT& __mon_;
348*4d6fc14bSjoerg    bool __intl_;
349*4d6fc14bSjoergpublic:
350*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
351*4d6fc14bSjoerg    __iom_t8(const _MoneyT& __mon, bool __intl)
352*4d6fc14bSjoerg        : __mon_(__mon), __intl_(__intl) {}
353*4d6fc14bSjoerg
354*4d6fc14bSjoerg    template <class _CharT, class _Traits, class _Mp>
355*4d6fc14bSjoerg    friend
356*4d6fc14bSjoerg    basic_ostream<_CharT, _Traits>&
357*4d6fc14bSjoerg    operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_Mp>& __x);
358*4d6fc14bSjoerg};
359*4d6fc14bSjoerg
360*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _MoneyT>
361*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>&
362*4d6fc14bSjoergoperator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x)
363*4d6fc14bSjoerg{
364*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
365*4d6fc14bSjoerg    try
366*4d6fc14bSjoerg    {
367*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
368*4d6fc14bSjoerg        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
369*4d6fc14bSjoerg        if (__s)
370*4d6fc14bSjoerg        {
371*4d6fc14bSjoerg            typedef ostreambuf_iterator<_CharT, _Traits> _Op;
372*4d6fc14bSjoerg            typedef money_put<_CharT, _Op> _Fp;
373*4d6fc14bSjoerg            const _Fp& __mf = use_facet<_Fp>(__os.getloc());
374*4d6fc14bSjoerg            if (__mf.put(_Op(__os), __x.__intl_, __os, __os.fill(), __x.__mon_).failed())
375*4d6fc14bSjoerg                __os.setstate(ios_base::badbit);
376*4d6fc14bSjoerg        }
377*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
378*4d6fc14bSjoerg    }
379*4d6fc14bSjoerg    catch (...)
380*4d6fc14bSjoerg    {
381*4d6fc14bSjoerg        __os.__set_badbit_and_consider_rethrow();
382*4d6fc14bSjoerg    }
383*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
384*4d6fc14bSjoerg    return __os;
385*4d6fc14bSjoerg}
386*4d6fc14bSjoerg
387*4d6fc14bSjoergtemplate <class _MoneyT>
388*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
389*4d6fc14bSjoerg__iom_t8<_MoneyT>
390*4d6fc14bSjoergput_money(const _MoneyT& __mon, bool __intl = false)
391*4d6fc14bSjoerg{
392*4d6fc14bSjoerg    return __iom_t8<_MoneyT>(__mon, __intl);
393*4d6fc14bSjoerg}
394*4d6fc14bSjoerg
395*4d6fc14bSjoerg// get_time
396*4d6fc14bSjoerg
397*4d6fc14bSjoergtemplate <class _CharT> class __iom_t9;
398*4d6fc14bSjoerg
399*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
400*4d6fc14bSjoergbasic_istream<_CharT, _Traits>&
401*4d6fc14bSjoergoperator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x);
402*4d6fc14bSjoerg
403*4d6fc14bSjoergtemplate <class _CharT>
404*4d6fc14bSjoergclass __iom_t9
405*4d6fc14bSjoerg{
406*4d6fc14bSjoerg    tm* __tm_;
407*4d6fc14bSjoerg    const _CharT* __fmt_;
408*4d6fc14bSjoergpublic:
409*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
410*4d6fc14bSjoerg    __iom_t9(tm* __tm, const _CharT* __fmt)
411*4d6fc14bSjoerg        : __tm_(__tm), __fmt_(__fmt) {}
412*4d6fc14bSjoerg
413*4d6fc14bSjoerg    template <class _Cp, class _Traits>
414*4d6fc14bSjoerg    friend
415*4d6fc14bSjoerg    basic_istream<_Cp, _Traits>&
416*4d6fc14bSjoerg    operator>>(basic_istream<_Cp, _Traits>& __is, const __iom_t9<_Cp>& __x);
417*4d6fc14bSjoerg};
418*4d6fc14bSjoerg
419*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
420*4d6fc14bSjoergbasic_istream<_CharT, _Traits>&
421*4d6fc14bSjoergoperator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x)
422*4d6fc14bSjoerg{
423*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
424*4d6fc14bSjoerg    try
425*4d6fc14bSjoerg    {
426*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
427*4d6fc14bSjoerg        typename basic_istream<_CharT, _Traits>::sentry __s(__is);
428*4d6fc14bSjoerg        if (__s)
429*4d6fc14bSjoerg        {
430*4d6fc14bSjoerg            typedef istreambuf_iterator<_CharT, _Traits> _Ip;
431*4d6fc14bSjoerg            typedef time_get<_CharT, _Ip> _Fp;
432*4d6fc14bSjoerg            ios_base::iostate __err = ios_base::goodbit;
433*4d6fc14bSjoerg            const _Fp& __tf = use_facet<_Fp>(__is.getloc());
434*4d6fc14bSjoerg            __tf.get(_Ip(__is), _Ip(), __is, __err, __x.__tm_,
435*4d6fc14bSjoerg                     __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_));
436*4d6fc14bSjoerg            __is.setstate(__err);
437*4d6fc14bSjoerg        }
438*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
439*4d6fc14bSjoerg    }
440*4d6fc14bSjoerg    catch (...)
441*4d6fc14bSjoerg    {
442*4d6fc14bSjoerg        __is.__set_badbit_and_consider_rethrow();
443*4d6fc14bSjoerg    }
444*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
445*4d6fc14bSjoerg    return __is;
446*4d6fc14bSjoerg}
447*4d6fc14bSjoerg
448*4d6fc14bSjoergtemplate <class _CharT>
449*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
450*4d6fc14bSjoerg__iom_t9<_CharT>
451*4d6fc14bSjoergget_time(tm* __tm, const _CharT* __fmt)
452*4d6fc14bSjoerg{
453*4d6fc14bSjoerg    return __iom_t9<_CharT>(__tm, __fmt);
454*4d6fc14bSjoerg}
455*4d6fc14bSjoerg
456*4d6fc14bSjoerg// put_time
457*4d6fc14bSjoerg
458*4d6fc14bSjoergtemplate <class _CharT> class __iom_t10;
459*4d6fc14bSjoerg
460*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
461*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>&
462*4d6fc14bSjoergoperator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x);
463*4d6fc14bSjoerg
464*4d6fc14bSjoergtemplate <class _CharT>
465*4d6fc14bSjoergclass __iom_t10
466*4d6fc14bSjoerg{
467*4d6fc14bSjoerg    const tm* __tm_;
468*4d6fc14bSjoerg    const _CharT* __fmt_;
469*4d6fc14bSjoergpublic:
470*4d6fc14bSjoerg    _LIBCPP_INLINE_VISIBILITY
471*4d6fc14bSjoerg    __iom_t10(const tm* __tm, const _CharT* __fmt)
472*4d6fc14bSjoerg        : __tm_(__tm), __fmt_(__fmt) {}
473*4d6fc14bSjoerg
474*4d6fc14bSjoerg    template <class _Cp, class _Traits>
475*4d6fc14bSjoerg    friend
476*4d6fc14bSjoerg    basic_ostream<_Cp, _Traits>&
477*4d6fc14bSjoerg    operator<<(basic_ostream<_Cp, _Traits>& __os, const __iom_t10<_Cp>& __x);
478*4d6fc14bSjoerg};
479*4d6fc14bSjoerg
480*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
481*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>&
482*4d6fc14bSjoergoperator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x)
483*4d6fc14bSjoerg{
484*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
485*4d6fc14bSjoerg    try
486*4d6fc14bSjoerg    {
487*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
488*4d6fc14bSjoerg        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
489*4d6fc14bSjoerg        if (__s)
490*4d6fc14bSjoerg        {
491*4d6fc14bSjoerg            typedef ostreambuf_iterator<_CharT, _Traits> _Op;
492*4d6fc14bSjoerg            typedef time_put<_CharT, _Op> _Fp;
493*4d6fc14bSjoerg            const _Fp& __tf = use_facet<_Fp>(__os.getloc());
494*4d6fc14bSjoerg            if (__tf.put(_Op(__os), __os, __os.fill(), __x.__tm_,
495*4d6fc14bSjoerg                         __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_)).failed())
496*4d6fc14bSjoerg                __os.setstate(ios_base::badbit);
497*4d6fc14bSjoerg        }
498*4d6fc14bSjoerg#ifndef _LIBCPP_NO_EXCEPTIONS
499*4d6fc14bSjoerg    }
500*4d6fc14bSjoerg    catch (...)
501*4d6fc14bSjoerg    {
502*4d6fc14bSjoerg        __os.__set_badbit_and_consider_rethrow();
503*4d6fc14bSjoerg    }
504*4d6fc14bSjoerg#endif // _LIBCPP_NO_EXCEPTIONS
505*4d6fc14bSjoerg    return __os;
506*4d6fc14bSjoerg}
507*4d6fc14bSjoerg
508*4d6fc14bSjoergtemplate <class _CharT>
509*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY
510*4d6fc14bSjoerg__iom_t10<_CharT>
511*4d6fc14bSjoergput_time(const tm* __tm, const _CharT* __fmt)
512*4d6fc14bSjoerg{
513*4d6fc14bSjoerg    return __iom_t10<_CharT>(__tm, __fmt);
514*4d6fc14bSjoerg}
515*4d6fc14bSjoerg
516*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _ForwardIterator>
517*4d6fc14bSjoergbasic_ostream<_CharT, _Traits> &
518*4d6fc14bSjoerg__quoted_output ( basic_ostream<_CharT, _Traits> &__os,
519*4d6fc14bSjoerg        _ForwardIterator __first, _ForwardIterator __last, _CharT __delim, _CharT __escape )
520*4d6fc14bSjoerg{
521*4d6fc14bSjoerg    basic_string<_CharT, _Traits> __str;
522*4d6fc14bSjoerg    __str.push_back(__delim);
523*4d6fc14bSjoerg    for ( ; __first != __last; ++ __first )
524*4d6fc14bSjoerg    {
525*4d6fc14bSjoerg        if (_Traits::eq (*__first, __escape) || _Traits::eq (*__first, __delim))
526*4d6fc14bSjoerg            __str.push_back(__escape);
527*4d6fc14bSjoerg        __str.push_back(*__first);
528*4d6fc14bSjoerg    }
529*4d6fc14bSjoerg    __str.push_back(__delim);
530*4d6fc14bSjoerg    return _VSTD::__put_character_sequence(__os, __str.data(), __str.size());
531*4d6fc14bSjoerg}
532*4d6fc14bSjoerg
533*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _String>
534*4d6fc14bSjoergbasic_istream<_CharT, _Traits> &
535*4d6fc14bSjoerg__quoted_input ( basic_istream<_CharT, _Traits> &__is, _String & __string, _CharT __delim, _CharT __escape )
536*4d6fc14bSjoerg{
537*4d6fc14bSjoerg    __string.clear ();
538*4d6fc14bSjoerg    _CharT __c;
539*4d6fc14bSjoerg    __is >> __c;
540*4d6fc14bSjoerg    if ( __is.fail ())
541*4d6fc14bSjoerg        return __is;
542*4d6fc14bSjoerg
543*4d6fc14bSjoerg    if (!_Traits::eq (__c, __delim))    // no delimiter, read the whole string
544*4d6fc14bSjoerg    {
545*4d6fc14bSjoerg        __is.unget ();
546*4d6fc14bSjoerg        __is >> __string;
547*4d6fc14bSjoerg        return __is;
548*4d6fc14bSjoerg    }
549*4d6fc14bSjoerg
550*4d6fc14bSjoerg    __save_flags<_CharT, _Traits> sf(__is);
551*4d6fc14bSjoerg    noskipws (__is);
552*4d6fc14bSjoerg    while (true)
553*4d6fc14bSjoerg        {
554*4d6fc14bSjoerg        __is >> __c;
555*4d6fc14bSjoerg        if ( __is.fail ())
556*4d6fc14bSjoerg            break;
557*4d6fc14bSjoerg        if (_Traits::eq (__c, __escape))
558*4d6fc14bSjoerg        {
559*4d6fc14bSjoerg            __is >> __c;
560*4d6fc14bSjoerg            if ( __is.fail ())
561*4d6fc14bSjoerg                break;
562*4d6fc14bSjoerg        }
563*4d6fc14bSjoerg        else if (_Traits::eq (__c, __delim))
564*4d6fc14bSjoerg            break;
565*4d6fc14bSjoerg        __string.push_back ( __c );
566*4d6fc14bSjoerg        }
567*4d6fc14bSjoerg    return __is;
568*4d6fc14bSjoerg}
569*4d6fc14bSjoerg
570*4d6fc14bSjoerg
571*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Iter>
572*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>& operator<<(
573*4d6fc14bSjoerg         basic_ostream<_CharT, _Traits>& __os,
574*4d6fc14bSjoerg         const __quoted_output_proxy<_CharT, _Iter, _Traits> & __proxy)
575*4d6fc14bSjoerg{
576*4d6fc14bSjoerg    return __quoted_output (__os, __proxy.__first, __proxy.__last, __proxy.__delim, __proxy.__escape);
577*4d6fc14bSjoerg}
578*4d6fc14bSjoerg
579*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Allocator>
580*4d6fc14bSjoergstruct __quoted_proxy
581*4d6fc14bSjoerg{
582*4d6fc14bSjoerg    basic_string<_CharT, _Traits, _Allocator> &__string;
583*4d6fc14bSjoerg    _CharT  __delim;
584*4d6fc14bSjoerg    _CharT  __escape;
585*4d6fc14bSjoerg
586*4d6fc14bSjoerg    __quoted_proxy(basic_string<_CharT, _Traits, _Allocator> &__s, _CharT __d, _CharT __e)
587*4d6fc14bSjoerg    : __string(__s), __delim(__d), __escape(__e) {}
588*4d6fc14bSjoerg};
589*4d6fc14bSjoerg
590*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Allocator>
591*4d6fc14bSjoerg_LIBCPP_INLINE_VISIBILITY
592*4d6fc14bSjoergbasic_ostream<_CharT, _Traits>& operator<<(
593*4d6fc14bSjoerg        basic_ostream<_CharT, _Traits>& __os,
594*4d6fc14bSjoerg        const __quoted_proxy<_CharT, _Traits, _Allocator> & __proxy)
595*4d6fc14bSjoerg{
596*4d6fc14bSjoerg    return __quoted_output (__os, __proxy.__string.cbegin (), __proxy.__string.cend (), __proxy.__delim, __proxy.__escape);
597*4d6fc14bSjoerg}
598*4d6fc14bSjoerg
599*4d6fc14bSjoerg//  extractor for non-const basic_string& proxies
600*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Allocator>
601*4d6fc14bSjoerg_LIBCPP_INLINE_VISIBILITY
602*4d6fc14bSjoergbasic_istream<_CharT, _Traits>& operator>>(
603*4d6fc14bSjoerg        basic_istream<_CharT, _Traits>& __is,
604*4d6fc14bSjoerg        const __quoted_proxy<_CharT, _Traits, _Allocator> & __proxy)
605*4d6fc14bSjoerg{
606*4d6fc14bSjoerg    return __quoted_input ( __is, __proxy.__string, __proxy.__delim, __proxy.__escape );
607*4d6fc14bSjoerg}
608*4d6fc14bSjoerg
609*4d6fc14bSjoerg
610*4d6fc14bSjoergtemplate <class _CharT>
611*4d6fc14bSjoerg_LIBCPP_INLINE_VISIBILITY
612*4d6fc14bSjoerg__quoted_output_proxy<_CharT, const _CharT *>
613*4d6fc14bSjoergquoted ( const _CharT *__s, _CharT __delim = _CharT('"'), _CharT __escape =_CharT('\\'))
614*4d6fc14bSjoerg{
615*4d6fc14bSjoerg    const _CharT *__end = __s;
616*4d6fc14bSjoerg    while ( *__end ) ++__end;
617*4d6fc14bSjoerg    return __quoted_output_proxy<_CharT, const _CharT *> ( __s, __end, __delim, __escape );
618*4d6fc14bSjoerg}
619*4d6fc14bSjoerg
620*4d6fc14bSjoerg
621*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Allocator>
622*4d6fc14bSjoerg_LIBCPP_INLINE_VISIBILITY
623*4d6fc14bSjoerg__quoted_output_proxy<_CharT, typename basic_string <_CharT, _Traits, _Allocator>::const_iterator>
624*4d6fc14bSjoerg__quoted ( const basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))
625*4d6fc14bSjoerg{
626*4d6fc14bSjoerg    return __quoted_output_proxy<_CharT,
627*4d6fc14bSjoerg            typename basic_string <_CharT, _Traits, _Allocator>::const_iterator>
628*4d6fc14bSjoerg                    ( __s.cbegin(), __s.cend (), __delim, __escape );
629*4d6fc14bSjoerg}
630*4d6fc14bSjoerg
631*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Allocator>
632*4d6fc14bSjoerg_LIBCPP_INLINE_VISIBILITY
633*4d6fc14bSjoerg__quoted_proxy<_CharT, _Traits, _Allocator>
634*4d6fc14bSjoerg__quoted ( basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))
635*4d6fc14bSjoerg{
636*4d6fc14bSjoerg    return __quoted_proxy<_CharT, _Traits, _Allocator>( __s, __delim, __escape );
637*4d6fc14bSjoerg}
638*4d6fc14bSjoerg
639*4d6fc14bSjoerg
640*4d6fc14bSjoerg#if _LIBCPP_STD_VER > 11
641*4d6fc14bSjoerg
642*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Allocator>
643*4d6fc14bSjoerg_LIBCPP_INLINE_VISIBILITY
644*4d6fc14bSjoerg__quoted_output_proxy<_CharT, typename basic_string <_CharT, _Traits, _Allocator>::const_iterator>
645*4d6fc14bSjoergquoted ( const basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))
646*4d6fc14bSjoerg{
647*4d6fc14bSjoerg    return __quoted(__s, __delim, __escape);
648*4d6fc14bSjoerg}
649*4d6fc14bSjoerg
650*4d6fc14bSjoergtemplate <class _CharT, class _Traits, class _Allocator>
651*4d6fc14bSjoerg_LIBCPP_INLINE_VISIBILITY
652*4d6fc14bSjoerg__quoted_proxy<_CharT, _Traits, _Allocator>
653*4d6fc14bSjoergquoted ( basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))
654*4d6fc14bSjoerg{
655*4d6fc14bSjoerg    return __quoted(__s, __delim, __escape);
656*4d6fc14bSjoerg}
657*4d6fc14bSjoerg
658*4d6fc14bSjoergtemplate <class _CharT, class _Traits>
659*4d6fc14bSjoerg__quoted_output_proxy<_CharT, const _CharT *, _Traits>
660*4d6fc14bSjoergquoted (basic_string_view <_CharT, _Traits> __sv,
661*4d6fc14bSjoerg             _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))
662*4d6fc14bSjoerg{
663*4d6fc14bSjoerg    return __quoted_output_proxy<_CharT, const _CharT *, _Traits>
664*4d6fc14bSjoerg         ( __sv.data(), __sv.data() + __sv.size(), __delim, __escape );
665*4d6fc14bSjoerg}
666*4d6fc14bSjoerg#endif
667*4d6fc14bSjoerg
668*4d6fc14bSjoerg_LIBCPP_END_NAMESPACE_STD
669*4d6fc14bSjoerg
670*4d6fc14bSjoerg#endif // _LIBCPP_IOMANIP
671