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