codekingpro/portable-devtools
114k
1// -*- C++ -*-2//===--------------------------- iomanip ----------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCUDACXX_IOMANIP11#define _LIBCUDACXX_IOMANIP12 13/*14 iomanip synopsis15 16namespace std {17 18// types T1, T2, ... are unspecified implementation types19T1 resetiosflags(ios_base::fmtflags mask);20T2 setiosflags (ios_base::fmtflags mask);21T3 setbase(int base);22template<charT> T4 setfill(charT c);23T5 setprecision(int n);24T6 setw(int n);25template <class moneyT> T7 get_money(moneyT& mon, bool intl = false);26template <class charT, class moneyT> T8 put_money(const moneyT& mon, bool intl = false);27template <class charT> T9 get_time(struct tm* tmb, const charT* fmt);28template <class charT> T10 put_time(const struct tm* tmb, const charT* fmt);29 30template <class charT>31 T11 quoted(const charT* s, charT delim=charT('"'), charT escape=charT('\\')); // C++1432 33template <class charT, class traits, class Allocator>34 T12 quoted(const basic_string<charT, traits, Allocator>& s,35 charT delim=charT('"'), charT escape=charT('\\')); // C++1436 37template <class charT, class traits, class Allocator>38 T13 quoted(basic_string<charT, traits, Allocator>& s,39 charT delim=charT('"'), charT escape=charT('\\')); // C++1440 41} // std42 43*/44 45#include <__config>46#include <__string>47#include <istream>48#include <version>49 50#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)51# pragma GCC system_header52#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)53# pragma clang system_header54#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)55# pragma system_header56#endif // no system header57 58_LIBCUDACXX_BEGIN_NAMESPACE_STD59 60// resetiosflags61 62class __iom_t163{64 ios_base::fmtflags __mask_;65public:66 _LIBCUDACXX_INLINE_VISIBILITY67 explicit __iom_t1(ios_base::fmtflags __m) : __mask_(__m) {}68 69 template <class _CharT, class _Traits>70 friend71 _LIBCUDACXX_INLINE_VISIBILITY72 basic_istream<_CharT, _Traits>&73 operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t1& __x)74 {75 __is.unsetf(__x.__mask_);76 return __is;77 }78 79 template <class _CharT, class _Traits>80 friend81 _LIBCUDACXX_INLINE_VISIBILITY82 basic_ostream<_CharT, _Traits>&83 operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t1& __x)84 {85 __os.unsetf(__x.__mask_);86 return __os;87 }88};89 90inline _LIBCUDACXX_INLINE_VISIBILITY91__iom_t192resetiosflags(ios_base::fmtflags __mask)93{94 return __iom_t1(__mask);95}96 97// setiosflags98 99class __iom_t2100{101 ios_base::fmtflags __mask_;102public:103 _LIBCUDACXX_INLINE_VISIBILITY104 explicit __iom_t2(ios_base::fmtflags __m) : __mask_(__m) {}105 106 template <class _CharT, class _Traits>107 friend108 _LIBCUDACXX_INLINE_VISIBILITY109 basic_istream<_CharT, _Traits>&110 operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t2& __x)111 {112 __is.setf(__x.__mask_);113 return __is;114 }115 116 template <class _CharT, class _Traits>117 friend118 _LIBCUDACXX_INLINE_VISIBILITY119 basic_ostream<_CharT, _Traits>&120 operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t2& __x)121 {122 __os.setf(__x.__mask_);123 return __os;124 }125};126 127inline _LIBCUDACXX_INLINE_VISIBILITY128__iom_t2129setiosflags(ios_base::fmtflags __mask)130{131 return __iom_t2(__mask);132}133 134// setbase135 136class __iom_t3137{138 int __base_;139public:140 _LIBCUDACXX_INLINE_VISIBILITY141 explicit __iom_t3(int __b) : __base_(__b) {}142 143 template <class _CharT, class _Traits>144 friend145 _LIBCUDACXX_INLINE_VISIBILITY146 basic_istream<_CharT, _Traits>&147 operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t3& __x)148 {149 __is.setf(__x.__base_ == 8 ? ios_base::oct :150 __x.__base_ == 10 ? ios_base::dec :151 __x.__base_ == 16 ? ios_base::hex :152 ios_base::fmtflags(0), ios_base::basefield);153 return __is;154 }155 156 template <class _CharT, class _Traits>157 friend158 _LIBCUDACXX_INLINE_VISIBILITY159 basic_ostream<_CharT, _Traits>&160 operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t3& __x)161 {162 __os.setf(__x.__base_ == 8 ? ios_base::oct :163 __x.__base_ == 10 ? ios_base::dec :164 __x.__base_ == 16 ? ios_base::hex :165 ios_base::fmtflags(0), ios_base::basefield);166 return __os;167 }168};169 170inline _LIBCUDACXX_INLINE_VISIBILITY171__iom_t3172setbase(int __base)173{174 return __iom_t3(__base);175}176 177// setfill178 179template<class _CharT>180class __iom_t4181{182 _CharT __fill_;183public:184 _LIBCUDACXX_INLINE_VISIBILITY185 explicit __iom_t4(_CharT __c) : __fill_(__c) {}186 187 template <class _Traits>188 friend189 _LIBCUDACXX_INLINE_VISIBILITY190 basic_ostream<_CharT, _Traits>&191 operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t4& __x)192 {193 __os.fill(__x.__fill_);194 return __os;195 }196};197 198template<class _CharT>199inline _LIBCUDACXX_INLINE_VISIBILITY200__iom_t4<_CharT>201setfill(_CharT __c)202{203 return __iom_t4<_CharT>(__c);204}205 206// setprecision207 208class __iom_t5209{210 int __n_;211public:212 _LIBCUDACXX_INLINE_VISIBILITY213 explicit __iom_t5(int __n) : __n_(__n) {}214 215 template <class _CharT, class _Traits>216 friend217 _LIBCUDACXX_INLINE_VISIBILITY218 basic_istream<_CharT, _Traits>&219 operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t5& __x)220 {221 __is.precision(__x.__n_);222 return __is;223 }224 225 template <class _CharT, class _Traits>226 friend227 _LIBCUDACXX_INLINE_VISIBILITY228 basic_ostream<_CharT, _Traits>&229 operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t5& __x)230 {231 __os.precision(__x.__n_);232 return __os;233 }234};235 236inline _LIBCUDACXX_INLINE_VISIBILITY237__iom_t5238setprecision(int __n)239{240 return __iom_t5(__n);241}242 243// setw244 245class __iom_t6246{247 int __n_;248public:249 _LIBCUDACXX_INLINE_VISIBILITY250 explicit __iom_t6(int __n) : __n_(__n) {}251 252 template <class _CharT, class _Traits>253 friend254 _LIBCUDACXX_INLINE_VISIBILITY255 basic_istream<_CharT, _Traits>&256 operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t6& __x)257 {258 __is.width(__x.__n_);259 return __is;260 }261 262 template <class _CharT, class _Traits>263 friend264 _LIBCUDACXX_INLINE_VISIBILITY265 basic_ostream<_CharT, _Traits>&266 operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t6& __x)267 {268 __os.width(__x.__n_);269 return __os;270 }271};272 273inline _LIBCUDACXX_INLINE_VISIBILITY274__iom_t6275setw(int __n)276{277 return __iom_t6(__n);278}279 280// get_money281 282template <class _MoneyT> class __iom_t7;283 284template <class _CharT, class _Traits, class _MoneyT>285basic_istream<_CharT, _Traits>&286operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x);287 288template <class _MoneyT>289class __iom_t7290{291 _MoneyT& __mon_;292 bool __intl_;293public:294 _LIBCUDACXX_INLINE_VISIBILITY295 __iom_t7(_MoneyT& __mon, bool __intl)296 : __mon_(__mon), __intl_(__intl) {}297 298 template <class _CharT, class _Traits, class _Mp>299 friend300 basic_istream<_CharT, _Traits>&301 operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_Mp>& __x);302};303 304template <class _CharT, class _Traits, class _MoneyT>305basic_istream<_CharT, _Traits>&306operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x)307{308#ifndef _LIBCUDACXX_NO_EXCEPTIONS309 try310 {311#endif // _LIBCUDACXX_NO_EXCEPTIONS312 typename basic_istream<_CharT, _Traits>::sentry __s(__is);313 if (__s)314 {315 typedef istreambuf_iterator<_CharT, _Traits> _Ip;316 typedef money_get<_CharT, _Ip> _Fp;317 ios_base::iostate __err = ios_base::goodbit;318 const _Fp& __mf = use_facet<_Fp>(__is.getloc());319 __mf.get(_Ip(__is), _Ip(), __x.__intl_, __is, __err, __x.__mon_);320 __is.setstate(__err);321 }322#ifndef _LIBCUDACXX_NO_EXCEPTIONS323 }324 catch (...)325 {326 __is.__set_badbit_and_consider_rethrow();327 }328#endif // _LIBCUDACXX_NO_EXCEPTIONS329 return __is;330}331 332template <class _MoneyT>333inline _LIBCUDACXX_INLINE_VISIBILITY334__iom_t7<_MoneyT>335get_money(_MoneyT& __mon, bool __intl = false)336{337 return __iom_t7<_MoneyT>(__mon, __intl);338}339 340// put_money341 342template <class _MoneyT> class __iom_t8;343 344template <class _CharT, class _Traits, class _MoneyT>345basic_ostream<_CharT, _Traits>&346operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x);347 348template <class _MoneyT>349class __iom_t8350{351 const _MoneyT& __mon_;352 bool __intl_;353public:354 _LIBCUDACXX_INLINE_VISIBILITY355 __iom_t8(const _MoneyT& __mon, bool __intl)356 : __mon_(__mon), __intl_(__intl) {}357 358 template <class _CharT, class _Traits, class _Mp>359 friend360 basic_ostream<_CharT, _Traits>&361 operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_Mp>& __x);362};363 364template <class _CharT, class _Traits, class _MoneyT>365basic_ostream<_CharT, _Traits>&366operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x)367{368#ifndef _LIBCUDACXX_NO_EXCEPTIONS369 try370 {371#endif // _LIBCUDACXX_NO_EXCEPTIONS372 typename basic_ostream<_CharT, _Traits>::sentry __s(__os);373 if (__s)374 {375 typedef ostreambuf_iterator<_CharT, _Traits> _Op;376 typedef money_put<_CharT, _Op> _Fp;377 const _Fp& __mf = use_facet<_Fp>(__os.getloc());378 if (__mf.put(_Op(__os), __x.__intl_, __os, __os.fill(), __x.__mon_).failed())379 __os.setstate(ios_base::badbit);380 }381#ifndef _LIBCUDACXX_NO_EXCEPTIONS382 }383 catch (...)384 {385 __os.__set_badbit_and_consider_rethrow();386 }387#endif // _LIBCUDACXX_NO_EXCEPTIONS388 return __os;389}390 391template <class _MoneyT>392inline _LIBCUDACXX_INLINE_VISIBILITY393__iom_t8<_MoneyT>394put_money(const _MoneyT& __mon, bool __intl = false)395{396 return __iom_t8<_MoneyT>(__mon, __intl);397}398 399// get_time400 401template <class _CharT> class __iom_t9;402 403template <class _CharT, class _Traits>404basic_istream<_CharT, _Traits>&405operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x);406 407template <class _CharT>408class __iom_t9409{410 tm* __tm_;411 const _CharT* __fmt_;412public:413 _LIBCUDACXX_INLINE_VISIBILITY414 __iom_t9(tm* __tm, const _CharT* __fmt)415 : __tm_(__tm), __fmt_(__fmt) {}416 417 template <class _Cp, class _Traits>418 friend419 basic_istream<_Cp, _Traits>&420 operator>>(basic_istream<_Cp, _Traits>& __is, const __iom_t9<_Cp>& __x);421};422 423template <class _CharT, class _Traits>424basic_istream<_CharT, _Traits>&425operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x)426{427#ifndef _LIBCUDACXX_NO_EXCEPTIONS428 try429 {430#endif // _LIBCUDACXX_NO_EXCEPTIONS431 typename basic_istream<_CharT, _Traits>::sentry __s(__is);432 if (__s)433 {434 typedef istreambuf_iterator<_CharT, _Traits> _Ip;435 typedef time_get<_CharT, _Ip> _Fp;436 ios_base::iostate __err = ios_base::goodbit;437 const _Fp& __tf = use_facet<_Fp>(__is.getloc());438 __tf.get(_Ip(__is), _Ip(), __is, __err, __x.__tm_,439 __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_));440 __is.setstate(__err);441 }442#ifndef _LIBCUDACXX_NO_EXCEPTIONS443 }444 catch (...)445 {446 __is.__set_badbit_and_consider_rethrow();447 }448#endif // _LIBCUDACXX_NO_EXCEPTIONS449 return __is;450}451 452template <class _CharT>453inline _LIBCUDACXX_INLINE_VISIBILITY454__iom_t9<_CharT>455get_time(tm* __tm, const _CharT* __fmt)456{457 return __iom_t9<_CharT>(__tm, __fmt);458}459 460// put_time461 462template <class _CharT> class __iom_t10;463 464template <class _CharT, class _Traits>465basic_ostream<_CharT, _Traits>&466operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x);467 468template <class _CharT>469class __iom_t10470{471 const tm* __tm_;472 const _CharT* __fmt_;473public:474 _LIBCUDACXX_INLINE_VISIBILITY475 __iom_t10(const tm* __tm, const _CharT* __fmt)476 : __tm_(__tm), __fmt_(__fmt) {}477 478 template <class _Cp, class _Traits>479 friend480 basic_ostream<_Cp, _Traits>&481 operator<<(basic_ostream<_Cp, _Traits>& __os, const __iom_t10<_Cp>& __x);482};483 484template <class _CharT, class _Traits>485basic_ostream<_CharT, _Traits>&486operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x)487{488#ifndef _LIBCUDACXX_NO_EXCEPTIONS489 try490 {491#endif // _LIBCUDACXX_NO_EXCEPTIONS492 typename basic_ostream<_CharT, _Traits>::sentry __s(__os);493 if (__s)494 {495 typedef ostreambuf_iterator<_CharT, _Traits> _Op;496 typedef time_put<_CharT, _Op> _Fp;497 const _Fp& __tf = use_facet<_Fp>(__os.getloc());498 if (__tf.put(_Op(__os), __os, __os.fill(), __x.__tm_,499 __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_)).failed())500 __os.setstate(ios_base::badbit);501 }502#ifndef _LIBCUDACXX_NO_EXCEPTIONS503 }504 catch (...)505 {506 __os.__set_badbit_and_consider_rethrow();507 }508#endif // _LIBCUDACXX_NO_EXCEPTIONS509 return __os;510}511 512template <class _CharT>513inline _LIBCUDACXX_INLINE_VISIBILITY514__iom_t10<_CharT>515put_time(const tm* __tm, const _CharT* __fmt)516{517 return __iom_t10<_CharT>(__tm, __fmt);518}519 520template <class _CharT, class _Traits, class _ForwardIterator>521std::basic_ostream<_CharT, _Traits> &522__quoted_output ( basic_ostream<_CharT, _Traits> &__os,523 _ForwardIterator __first, _ForwardIterator __last, _CharT __delim, _CharT __escape )524{525 _CUDA_VSTD::basic_string<_CharT, _Traits> __str;526 __str.push_back(__delim);527 for ( ; __first != __last; ++ __first )528 {529 if (_Traits::eq (*__first, __escape) || _Traits::eq (*__first, __delim))530 __str.push_back(__escape);531 __str.push_back(*__first);532 }533 __str.push_back(__delim);534 return __put_character_sequence(__os, __str.data(), __str.size());535}536 537template <class _CharT, class _Traits, class _String>538basic_istream<_CharT, _Traits> &539__quoted_input ( basic_istream<_CharT, _Traits> &__is, _String & __string, _CharT __delim, _CharT __escape )540{541 __string.clear ();542 _CharT __c;543 __is >> __c;544 if ( __is.fail ())545 return __is;546 547 if (!_Traits::eq (__c, __delim)) // no delimiter, read the whole string548 {549 __is.unget ();550 __is >> __string;551 return __is;552 }553 554 __save_flags<_CharT, _Traits> sf(__is);555 noskipws (__is);556 while (true)557 {558 __is >> __c;559 if ( __is.fail ())560 break;561 if (_Traits::eq (__c, __escape))562 {563 __is >> __c;564 if ( __is.fail ())565 break;566 }567 else if (_Traits::eq (__c, __delim))568 break;569 __string.push_back ( __c );570 }571 return __is;572}573 574 575template <class _CharT, class _Traits, class _Iter>576basic_ostream<_CharT, _Traits>& operator<<(577 basic_ostream<_CharT, _Traits>& __os,578 const __quoted_output_proxy<_CharT, _Iter, _Traits> & __proxy)579{580 return __quoted_output (__os, __proxy.__first, __proxy.__last, __proxy.__delim, __proxy.__escape);581}582 583template <class _CharT, class _Traits, class _Allocator>584struct __quoted_proxy585{586 basic_string<_CharT, _Traits, _Allocator> &__string;587 _CharT __delim;588 _CharT __escape;589 590 __quoted_proxy(basic_string<_CharT, _Traits, _Allocator> &__s, _CharT __d, _CharT __e)591 : __string(__s), __delim(__d), __escape(__e) {}592};593 594template <class _CharT, class _Traits, class _Allocator>595_LIBCUDACXX_INLINE_VISIBILITY596basic_ostream<_CharT, _Traits>& operator<<(597 basic_ostream<_CharT, _Traits>& __os,598 const __quoted_proxy<_CharT, _Traits, _Allocator> & __proxy)599{600 return __quoted_output (__os, __proxy.__string.cbegin (), __proxy.__string.cend (), __proxy.__delim, __proxy.__escape);601}602 603// extractor for non-const basic_string& proxies604template <class _CharT, class _Traits, class _Allocator>605_LIBCUDACXX_INLINE_VISIBILITY606basic_istream<_CharT, _Traits>& operator>>(607 basic_istream<_CharT, _Traits>& __is,608 const __quoted_proxy<_CharT, _Traits, _Allocator> & __proxy)609{610 return __quoted_input ( __is, __proxy.__string, __proxy.__delim, __proxy.__escape );611}612 613 614template <class _CharT>615_LIBCUDACXX_INLINE_VISIBILITY616__quoted_output_proxy<_CharT, const _CharT *>617quoted ( const _CharT *__s, _CharT __delim = _CharT('"'), _CharT __escape =_CharT('\\'))618{619 const _CharT *__end = __s;620 while ( *__end ) ++__end;621 return __quoted_output_proxy<_CharT, const _CharT *> ( __s, __end, __delim, __escape );622}623 624 625template <class _CharT, class _Traits, class _Allocator>626_LIBCUDACXX_INLINE_VISIBILITY627__quoted_output_proxy<_CharT, typename basic_string <_CharT, _Traits, _Allocator>::const_iterator>628__quoted ( const basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))629{630 return __quoted_output_proxy<_CharT,631 typename basic_string <_CharT, _Traits, _Allocator>::const_iterator>632 ( __s.cbegin(), __s.cend (), __delim, __escape );633}634 635template <class _CharT, class _Traits, class _Allocator>636_LIBCUDACXX_INLINE_VISIBILITY637__quoted_proxy<_CharT, _Traits, _Allocator>638__quoted ( basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))639{640 return __quoted_proxy<_CharT, _Traits, _Allocator>( __s, __delim, __escape );641}642 643 644#if _LIBCUDACXX_STD_VER > 11645 646template <class _CharT, class _Traits, class _Allocator>647_LIBCUDACXX_INLINE_VISIBILITY648__quoted_output_proxy<_CharT, typename basic_string <_CharT, _Traits, _Allocator>::const_iterator>649quoted ( const basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))650{651 return __quoted(__s, __delim, __escape);652}653 654template <class _CharT, class _Traits, class _Allocator>655_LIBCUDACXX_INLINE_VISIBILITY656__quoted_proxy<_CharT, _Traits, _Allocator>657quoted ( basic_string <_CharT, _Traits, _Allocator> &__s, _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))658{659 return __quoted(__s, __delim, __escape);660}661 662template <class _CharT, class _Traits>663__quoted_output_proxy<_CharT, const _CharT *, _Traits>664quoted (basic_string_view <_CharT, _Traits> __sv,665 _CharT __delim = _CharT('"'), _CharT __escape=_CharT('\\'))666{667 return __quoted_output_proxy<_CharT, const _CharT *, _Traits>668 ( __sv.data(), __sv.data() + __sv.size(), __delim, __escape );669}670#endif671 672_LIBCUDACXX_END_NAMESPACE_STD673 674#endif // _LIBCUDACXX_IOMANIP675 