brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.9 KiB · d65d66d Raw
577 lines · plain
1// -*- C++ -*-2//===----------------------------------------------------------------------===//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 _LIBCPP_IOMANIP11#define _LIBCPP_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#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)46#  include <__cxx03/iomanip>47#else48#  include <__config>49 50#  if _LIBCPP_HAS_LOCALIZATION51 52#    include <__iterator/istreambuf_iterator.h>53#    include <__locale_dir/money.h>54#    include <__locale_dir/time.h>55#    include <__ostream/put_character_sequence.h>56#    include <ios>57#    include <iosfwd>58#    include <version>59 60#    if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)61#      pragma GCC system_header62#    endif63 64_LIBCPP_BEGIN_NAMESPACE_STD65 66// resetiosflags67 68class __iom_t1 {69  ios_base::fmtflags __mask_;70 71public:72  _LIBCPP_HIDE_FROM_ABI explicit __iom_t1(ios_base::fmtflags __m) : __mask_(__m) {}73 74  template <class _CharT, class _Traits>75  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&76  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t1& __x) {77    __is.unsetf(__x.__mask_);78    return __is;79  }80 81  template <class _CharT, class _Traits>82  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&83  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t1& __x) {84    __os.unsetf(__x.__mask_);85    return __os;86  }87};88 89inline _LIBCPP_HIDE_FROM_ABI __iom_t1 resetiosflags(ios_base::fmtflags __mask) { return __iom_t1(__mask); }90 91// setiosflags92 93class __iom_t2 {94  ios_base::fmtflags __mask_;95 96public:97  _LIBCPP_HIDE_FROM_ABI explicit __iom_t2(ios_base::fmtflags __m) : __mask_(__m) {}98 99  template <class _CharT, class _Traits>100  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&101  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t2& __x) {102    __is.setf(__x.__mask_);103    return __is;104  }105 106  template <class _CharT, class _Traits>107  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&108  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t2& __x) {109    __os.setf(__x.__mask_);110    return __os;111  }112};113 114inline _LIBCPP_HIDE_FROM_ABI __iom_t2 setiosflags(ios_base::fmtflags __mask) { return __iom_t2(__mask); }115 116// setbase117 118class __iom_t3 {119  int __base_;120 121public:122  _LIBCPP_HIDE_FROM_ABI explicit __iom_t3(int __b) : __base_(__b) {}123 124  template <class _CharT, class _Traits>125  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&126  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t3& __x) {127    __is.setf(__x.__base_ == 8    ? ios_base::oct128              : __x.__base_ == 10 ? ios_base::dec129              : __x.__base_ == 16 ? ios_base::hex130                                  : ios_base::fmtflags(0),131              ios_base::basefield);132    return __is;133  }134 135  template <class _CharT, class _Traits>136  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&137  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t3& __x) {138    __os.setf(__x.__base_ == 8    ? ios_base::oct139              : __x.__base_ == 10 ? ios_base::dec140              : __x.__base_ == 16 ? ios_base::hex141                                  : ios_base::fmtflags(0),142              ios_base::basefield);143    return __os;144  }145};146 147inline _LIBCPP_HIDE_FROM_ABI __iom_t3 setbase(int __base) { return __iom_t3(__base); }148 149// setfill150 151template <class _CharT>152class __iom_t4 {153  _CharT __fill_;154 155public:156  _LIBCPP_HIDE_FROM_ABI explicit __iom_t4(_CharT __c) : __fill_(__c) {}157 158  template <class _Traits>159  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&160  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t4& __x) {161    __os.fill(__x.__fill_);162    return __os;163  }164};165 166template <class _CharT>167inline _LIBCPP_HIDE_FROM_ABI __iom_t4<_CharT> setfill(_CharT __c) {168  return __iom_t4<_CharT>(__c);169}170 171// setprecision172 173class __iom_t5 {174  int __n_;175 176public:177  _LIBCPP_HIDE_FROM_ABI explicit __iom_t5(int __n) : __n_(__n) {}178 179  template <class _CharT, class _Traits>180  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&181  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t5& __x) {182    __is.precision(__x.__n_);183    return __is;184  }185 186  template <class _CharT, class _Traits>187  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&188  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t5& __x) {189    __os.precision(__x.__n_);190    return __os;191  }192};193 194inline _LIBCPP_HIDE_FROM_ABI __iom_t5 setprecision(int __n) { return __iom_t5(__n); }195 196// setw197 198class __iom_t6 {199  int __n_;200 201public:202  _LIBCPP_HIDE_FROM_ABI explicit __iom_t6(int __n) : __n_(__n) {}203 204  template <class _CharT, class _Traits>205  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&206  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t6& __x) {207    __is.width(__x.__n_);208    return __is;209  }210 211  template <class _CharT, class _Traits>212  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&213  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t6& __x) {214    __os.width(__x.__n_);215    return __os;216  }217};218 219inline _LIBCPP_HIDE_FROM_ABI __iom_t6 setw(int __n) { return __iom_t6(__n); }220 221// get_money222 223template <class _MoneyT>224class __iom_t7;225 226template <class _CharT, class _Traits, class _MoneyT>227_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&228operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x);229 230template <class _MoneyT>231class __iom_t7 {232  _MoneyT& __mon_;233  bool __intl_;234 235public:236  _LIBCPP_HIDE_FROM_ABI __iom_t7(_MoneyT& __mon, bool __intl) : __mon_(__mon), __intl_(__intl) {}237 238  template <class _CharT, class _Traits, class _Mp>239  friend basic_istream<_CharT, _Traits>& operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_Mp>& __x);240};241 242template <class _CharT, class _Traits, class _MoneyT>243_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&244operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x) {245#    if _LIBCPP_HAS_EXCEPTIONS246  try {247#    endif // _LIBCPP_HAS_EXCEPTIONS248    typename basic_istream<_CharT, _Traits>::sentry __s(__is);249    if (__s) {250      typedef istreambuf_iterator<_CharT, _Traits> _Ip;251      typedef money_get<_CharT, _Ip> _Fp;252      ios_base::iostate __err = ios_base::goodbit;253      const _Fp& __mf         = std::use_facet<_Fp>(__is.getloc());254      __mf.get(_Ip(__is), _Ip(), __x.__intl_, __is, __err, __x.__mon_);255      __is.setstate(__err);256    }257#    if _LIBCPP_HAS_EXCEPTIONS258  } catch (...) {259    __is.__set_badbit_and_consider_rethrow();260  }261#    endif // _LIBCPP_HAS_EXCEPTIONS262  return __is;263}264 265template <class _MoneyT>266inline _LIBCPP_HIDE_FROM_ABI __iom_t7<_MoneyT> get_money(_MoneyT& __mon, bool __intl = false) {267  return __iom_t7<_MoneyT>(__mon, __intl);268}269 270// put_money271 272template <class _MoneyT>273class __iom_t8;274 275template <class _CharT, class _Traits, class _MoneyT>276_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&277operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x);278 279template <class _MoneyT>280class __iom_t8 {281  const _MoneyT& __mon_;282  bool __intl_;283 284public:285  _LIBCPP_HIDE_FROM_ABI __iom_t8(const _MoneyT& __mon, bool __intl) : __mon_(__mon), __intl_(__intl) {}286 287  template <class _CharT, class _Traits, class _Mp>288  friend basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_Mp>& __x);289};290 291template <class _CharT, class _Traits, class _MoneyT>292_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&293operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x) {294#    if _LIBCPP_HAS_EXCEPTIONS295  try {296#    endif // _LIBCPP_HAS_EXCEPTIONS297    typename basic_ostream<_CharT, _Traits>::sentry __s(__os);298    if (__s) {299      typedef ostreambuf_iterator<_CharT, _Traits> _Op;300      typedef money_put<_CharT, _Op> _Fp;301      const _Fp& __mf = std::use_facet<_Fp>(__os.getloc());302      if (__mf.put(_Op(__os), __x.__intl_, __os, __os.fill(), __x.__mon_).failed())303        __os.setstate(ios_base::badbit);304    }305#    if _LIBCPP_HAS_EXCEPTIONS306  } catch (...) {307    __os.__set_badbit_and_consider_rethrow();308  }309#    endif // _LIBCPP_HAS_EXCEPTIONS310  return __os;311}312 313template <class _MoneyT>314inline _LIBCPP_HIDE_FROM_ABI __iom_t8<_MoneyT> put_money(const _MoneyT& __mon, bool __intl = false) {315  return __iom_t8<_MoneyT>(__mon, __intl);316}317 318// get_time319 320template <class _CharT>321class __iom_t9;322 323template <class _CharT, class _Traits>324_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&325operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x);326 327template <class _CharT>328class __iom_t9 {329  tm* __tm_;330  const _CharT* __fmt_;331 332public:333  _LIBCPP_HIDE_FROM_ABI __iom_t9(tm* __tm, const _CharT* __fmt) : __tm_(__tm), __fmt_(__fmt) {}334 335  template <class _Cp, class _Traits>336  friend basic_istream<_Cp, _Traits>& operator>>(basic_istream<_Cp, _Traits>& __is, const __iom_t9<_Cp>& __x);337};338 339template <class _CharT, class _Traits>340_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&341operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x) {342#    if _LIBCPP_HAS_EXCEPTIONS343  try {344#    endif // _LIBCPP_HAS_EXCEPTIONS345    typename basic_istream<_CharT, _Traits>::sentry __s(__is);346    if (__s) {347      typedef istreambuf_iterator<_CharT, _Traits> _Ip;348      typedef time_get<_CharT, _Ip> _Fp;349      ios_base::iostate __err = ios_base::goodbit;350      const _Fp& __tf         = std::use_facet<_Fp>(__is.getloc());351      __tf.get(_Ip(__is), _Ip(), __is, __err, __x.__tm_, __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_));352      __is.setstate(__err);353    }354#    if _LIBCPP_HAS_EXCEPTIONS355  } catch (...) {356    __is.__set_badbit_and_consider_rethrow();357  }358#    endif // _LIBCPP_HAS_EXCEPTIONS359  return __is;360}361 362template <class _CharT>363inline _LIBCPP_HIDE_FROM_ABI __iom_t9<_CharT> get_time(tm* __tm, const _CharT* __fmt) {364  return __iom_t9<_CharT>(__tm, __fmt);365}366 367// put_time368 369template <class _CharT>370class __iom_t10;371 372template <class _CharT, class _Traits>373_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&374operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x);375 376template <class _CharT>377class __iom_t10 {378  const tm* __tm_;379  const _CharT* __fmt_;380 381public:382  _LIBCPP_HIDE_FROM_ABI __iom_t10(const tm* __tm, const _CharT* __fmt) : __tm_(__tm), __fmt_(__fmt) {}383 384  template <class _Cp, class _Traits>385  friend basic_ostream<_Cp, _Traits>& operator<<(basic_ostream<_Cp, _Traits>& __os, const __iom_t10<_Cp>& __x);386};387 388template <class _CharT, class _Traits>389_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&390operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x) {391#    if _LIBCPP_HAS_EXCEPTIONS392  try {393#    endif // _LIBCPP_HAS_EXCEPTIONS394    typename basic_ostream<_CharT, _Traits>::sentry __s(__os);395    if (__s) {396      typedef ostreambuf_iterator<_CharT, _Traits> _Op;397      typedef time_put<_CharT, _Op> _Fp;398      const _Fp& __tf = std::use_facet<_Fp>(__os.getloc());399      if (__tf.put(_Op(__os), __os, __os.fill(), __x.__tm_, __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_))400              .failed())401        __os.setstate(ios_base::badbit);402    }403#    if _LIBCPP_HAS_EXCEPTIONS404  } catch (...) {405    __os.__set_badbit_and_consider_rethrow();406  }407#    endif // _LIBCPP_HAS_EXCEPTIONS408  return __os;409}410 411template <class _CharT>412inline _LIBCPP_HIDE_FROM_ABI __iom_t10<_CharT> put_time(const tm* __tm, const _CharT* __fmt) {413  return __iom_t10<_CharT>(__tm, __fmt);414}415 416template <class _CharT, class _Traits>417_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& __quoted_output(418    basic_ostream<_CharT, _Traits>& __os,419    const _CharT* __first,420    const _CharT* __last,421    _CharT __delim,422    _CharT __escape) {423  basic_string<_CharT, _Traits> __str;424  __str.push_back(__delim);425  for (; __first != __last; ++__first) {426    if (_Traits::eq(*__first, __escape) || _Traits::eq(*__first, __delim))427      __str.push_back(__escape);428    __str.push_back(*__first);429  }430  __str.push_back(__delim);431  return std::__put_character_sequence(__os, __str.data(), __str.size());432}433 434template <class _CharT, class _Traits, class _String>435_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&436__quoted_input(basic_istream<_CharT, _Traits>& __is, _String& __string, _CharT __delim, _CharT __escape) {437  __string.clear();438  _CharT __c;439  __is >> __c;440  if (__is.fail())441    return __is;442 443  if (!_Traits::eq(__c, __delim)) {444    // no delimiter, read the whole string445    __is.unget();446    __is >> __string;447    return __is;448  }449 450  __save_flags<_CharT, _Traits> __sf(__is);451  std::noskipws(__is);452  while (true) {453    __is >> __c;454    if (__is.fail())455      break;456    if (_Traits::eq(__c, __escape)) {457      __is >> __c;458      if (__is.fail())459        break;460    } else if (_Traits::eq(__c, __delim))461      break;462    __string.push_back(__c);463  }464  return __is;465}466 467template <class _CharT, class _Traits>468struct _LIBCPP_HIDDEN __quoted_output_proxy {469  const _CharT* __first_;470  const _CharT* __last_;471  _CharT __delim_;472  _CharT __escape_;473 474  _LIBCPP_HIDE_FROM_ABI explicit __quoted_output_proxy(const _CharT* __f, const _CharT* __l, _CharT __d, _CharT __e)475      : __first_(__f), __last_(__l), __delim_(__d), __escape_(__e) {}476 477  template <class _T2, __enable_if_t<_IsSame<_Traits, void>::value || _IsSame<_Traits, _T2>::value, int> = 0>478  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _T2>&479  operator<<(basic_ostream<_CharT, _T2>& __os, const __quoted_output_proxy& __p) {480    return std::__quoted_output(__os, __p.__first_, __p.__last_, __p.__delim_, __p.__escape_);481  }482};483 484template <class _CharT, class _Traits, class _Allocator>485struct _LIBCPP_HIDDEN __quoted_proxy {486  basic_string<_CharT, _Traits, _Allocator>& __string_;487  _CharT __delim_;488  _CharT __escape_;489 490  _LIBCPP_HIDE_FROM_ABI explicit __quoted_proxy(basic_string<_CharT, _Traits, _Allocator>& __s, _CharT __d, _CharT __e)491      : __string_(__s), __delim_(__d), __escape_(__e) {}492 493  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&494  operator<<(basic_ostream<_CharT, _Traits>& __os, const __quoted_proxy& __p) {495    return std::__quoted_output(496        __os, __p.__string_.data(), __p.__string_.data() + __p.__string_.size(), __p.__delim_, __p.__escape_);497  }498 499  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&500  operator>>(basic_istream<_CharT, _Traits>& __is, const __quoted_proxy& __p) {501    return std::__quoted_input(__is, __p.__string_, __p.__delim_, __p.__escape_);502  }503};504 505template <class _CharT, class _Traits, class _Allocator>506_LIBCPP_HIDE_FROM_ABI __quoted_output_proxy<_CharT, _Traits>507__quoted(const basic_string<_CharT, _Traits, _Allocator>& __s,508         _CharT __delim  = _CharT('"'),509         _CharT __escape = _CharT('\\')) {510  return __quoted_output_proxy<_CharT, _Traits>(__s.data(), __s.data() + __s.size(), __delim, __escape);511}512 513template <class _CharT, class _Traits, class _Allocator>514_LIBCPP_HIDE_FROM_ABI __quoted_proxy<_CharT, _Traits, _Allocator>515__quoted(basic_string<_CharT, _Traits, _Allocator>& __s, _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) {516  return __quoted_proxy<_CharT, _Traits, _Allocator>(__s, __delim, __escape);517}518 519#    if _LIBCPP_STD_VER >= 14520 521template <class _CharT>522_LIBCPP_HIDE_FROM_ABI auto quoted(const _CharT* __s, _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) {523  const _CharT* __end = __s;524  while (*__end)525    ++__end;526  return __quoted_output_proxy<_CharT, void>(__s, __end, __delim, __escape);527}528 529template <class _CharT, class _Traits, class _Allocator>530_LIBCPP_HIDE_FROM_ABI auto531quoted(const basic_string<_CharT, _Traits, _Allocator>& __s,532       _CharT __delim  = _CharT('"'),533       _CharT __escape = _CharT('\\')) {534  return __quoted_output_proxy<_CharT, _Traits>(__s.data(), __s.data() + __s.size(), __delim, __escape);535}536 537template <class _CharT, class _Traits, class _Allocator>538_LIBCPP_HIDE_FROM_ABI auto539quoted(basic_string<_CharT, _Traits, _Allocator>& __s, _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) {540  return __quoted_proxy<_CharT, _Traits, _Allocator>(__s, __delim, __escape);541}542 543template <class _CharT, class _Traits>544_LIBCPP_HIDE_FROM_ABI auto545quoted(basic_string_view<_CharT, _Traits> __sv, _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) {546  return __quoted_output_proxy<_CharT, _Traits>(__sv.data(), __sv.data() + __sv.size(), __delim, __escape);547}548 549#    endif // _LIBCPP_STD_VER >= 14550 551_LIBCPP_END_NAMESPACE_STD552 553#  endif // _LIBCPP_HAS_LOCALIZATION554 555#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20556#    include <array>557#    include <bitset>558#    include <deque>559#    include <format>560#    include <functional>561#    include <istream>562#    include <ostream>563#    include <print>564#    include <queue>565#    include <stack>566#    include <unordered_map>567#    include <vector>568#  endif569 570#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23571#    include <locale>572#  endif573 574#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)575 576#endif // _LIBCPP_IOMANIP577