brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.8 KiB · faade2e Raw
511 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___CXX03_IOMANIP11#define _LIBCPP___CXX03_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 <__cxx03/__config>46#include <__cxx03/istream>47#include <__cxx03/version>48 49#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)50#  pragma GCC system_header51#endif52 53_LIBCPP_BEGIN_NAMESPACE_STD54 55// resetiosflags56 57class __iom_t1 {58  ios_base::fmtflags __mask_;59 60public:61  _LIBCPP_HIDE_FROM_ABI explicit __iom_t1(ios_base::fmtflags __m) : __mask_(__m) {}62 63  template <class _CharT, class _Traits>64  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&65  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t1& __x) {66    __is.unsetf(__x.__mask_);67    return __is;68  }69 70  template <class _CharT, class _Traits>71  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&72  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t1& __x) {73    __os.unsetf(__x.__mask_);74    return __os;75  }76};77 78inline _LIBCPP_HIDE_FROM_ABI __iom_t1 resetiosflags(ios_base::fmtflags __mask) { return __iom_t1(__mask); }79 80// setiosflags81 82class __iom_t2 {83  ios_base::fmtflags __mask_;84 85public:86  _LIBCPP_HIDE_FROM_ABI explicit __iom_t2(ios_base::fmtflags __m) : __mask_(__m) {}87 88  template <class _CharT, class _Traits>89  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&90  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t2& __x) {91    __is.setf(__x.__mask_);92    return __is;93  }94 95  template <class _CharT, class _Traits>96  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&97  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t2& __x) {98    __os.setf(__x.__mask_);99    return __os;100  }101};102 103inline _LIBCPP_HIDE_FROM_ABI __iom_t2 setiosflags(ios_base::fmtflags __mask) { return __iom_t2(__mask); }104 105// setbase106 107class __iom_t3 {108  int __base_;109 110public:111  _LIBCPP_HIDE_FROM_ABI explicit __iom_t3(int __b) : __base_(__b) {}112 113  template <class _CharT, class _Traits>114  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&115  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t3& __x) {116    __is.setf(__x.__base_ == 8    ? ios_base::oct117              : __x.__base_ == 10 ? ios_base::dec118              : __x.__base_ == 16 ? ios_base::hex119                                  : ios_base::fmtflags(0),120              ios_base::basefield);121    return __is;122  }123 124  template <class _CharT, class _Traits>125  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&126  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t3& __x) {127    __os.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 __os;133  }134};135 136inline _LIBCPP_HIDE_FROM_ABI __iom_t3 setbase(int __base) { return __iom_t3(__base); }137 138// setfill139 140template <class _CharT>141class __iom_t4 {142  _CharT __fill_;143 144public:145  _LIBCPP_HIDE_FROM_ABI explicit __iom_t4(_CharT __c) : __fill_(__c) {}146 147  template <class _Traits>148  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&149  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t4& __x) {150    __os.fill(__x.__fill_);151    return __os;152  }153};154 155template <class _CharT>156inline _LIBCPP_HIDE_FROM_ABI __iom_t4<_CharT> setfill(_CharT __c) {157  return __iom_t4<_CharT>(__c);158}159 160// setprecision161 162class __iom_t5 {163  int __n_;164 165public:166  _LIBCPP_HIDE_FROM_ABI explicit __iom_t5(int __n) : __n_(__n) {}167 168  template <class _CharT, class _Traits>169  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&170  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t5& __x) {171    __is.precision(__x.__n_);172    return __is;173  }174 175  template <class _CharT, class _Traits>176  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&177  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t5& __x) {178    __os.precision(__x.__n_);179    return __os;180  }181};182 183inline _LIBCPP_HIDE_FROM_ABI __iom_t5 setprecision(int __n) { return __iom_t5(__n); }184 185// setw186 187class __iom_t6 {188  int __n_;189 190public:191  _LIBCPP_HIDE_FROM_ABI explicit __iom_t6(int __n) : __n_(__n) {}192 193  template <class _CharT, class _Traits>194  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&195  operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t6& __x) {196    __is.width(__x.__n_);197    return __is;198  }199 200  template <class _CharT, class _Traits>201  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&202  operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t6& __x) {203    __os.width(__x.__n_);204    return __os;205  }206};207 208inline _LIBCPP_HIDE_FROM_ABI __iom_t6 setw(int __n) { return __iom_t6(__n); }209 210// get_money211 212template <class _MoneyT>213class __iom_t7;214 215template <class _CharT, class _Traits, class _MoneyT>216_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&217operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x);218 219template <class _MoneyT>220class __iom_t7 {221  _MoneyT& __mon_;222  bool __intl_;223 224public:225  _LIBCPP_HIDE_FROM_ABI __iom_t7(_MoneyT& __mon, bool __intl) : __mon_(__mon), __intl_(__intl) {}226 227  template <class _CharT, class _Traits, class _Mp>228  friend basic_istream<_CharT, _Traits>& operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_Mp>& __x);229};230 231template <class _CharT, class _Traits, class _MoneyT>232_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&233operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t7<_MoneyT>& __x) {234#ifndef _LIBCPP_HAS_NO_EXCEPTIONS235  try {236#endif // _LIBCPP_HAS_NO_EXCEPTIONS237    typename basic_istream<_CharT, _Traits>::sentry __s(__is);238    if (__s) {239      typedef istreambuf_iterator<_CharT, _Traits> _Ip;240      typedef money_get<_CharT, _Ip> _Fp;241      ios_base::iostate __err = ios_base::goodbit;242      const _Fp& __mf         = std::use_facet<_Fp>(__is.getloc());243      __mf.get(_Ip(__is), _Ip(), __x.__intl_, __is, __err, __x.__mon_);244      __is.setstate(__err);245    }246#ifndef _LIBCPP_HAS_NO_EXCEPTIONS247  } catch (...) {248    __is.__set_badbit_and_consider_rethrow();249  }250#endif // _LIBCPP_HAS_NO_EXCEPTIONS251  return __is;252}253 254template <class _MoneyT>255inline _LIBCPP_HIDE_FROM_ABI __iom_t7<_MoneyT> get_money(_MoneyT& __mon, bool __intl = false) {256  return __iom_t7<_MoneyT>(__mon, __intl);257}258 259// put_money260 261template <class _MoneyT>262class __iom_t8;263 264template <class _CharT, class _Traits, class _MoneyT>265_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&266operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x);267 268template <class _MoneyT>269class __iom_t8 {270  const _MoneyT& __mon_;271  bool __intl_;272 273public:274  _LIBCPP_HIDE_FROM_ABI __iom_t8(const _MoneyT& __mon, bool __intl) : __mon_(__mon), __intl_(__intl) {}275 276  template <class _CharT, class _Traits, class _Mp>277  friend basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_Mp>& __x);278};279 280template <class _CharT, class _Traits, class _MoneyT>281_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&282operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t8<_MoneyT>& __x) {283#ifndef _LIBCPP_HAS_NO_EXCEPTIONS284  try {285#endif // _LIBCPP_HAS_NO_EXCEPTIONS286    typename basic_ostream<_CharT, _Traits>::sentry __s(__os);287    if (__s) {288      typedef ostreambuf_iterator<_CharT, _Traits> _Op;289      typedef money_put<_CharT, _Op> _Fp;290      const _Fp& __mf = std::use_facet<_Fp>(__os.getloc());291      if (__mf.put(_Op(__os), __x.__intl_, __os, __os.fill(), __x.__mon_).failed())292        __os.setstate(ios_base::badbit);293    }294#ifndef _LIBCPP_HAS_NO_EXCEPTIONS295  } catch (...) {296    __os.__set_badbit_and_consider_rethrow();297  }298#endif // _LIBCPP_HAS_NO_EXCEPTIONS299  return __os;300}301 302template <class _MoneyT>303inline _LIBCPP_HIDE_FROM_ABI __iom_t8<_MoneyT> put_money(const _MoneyT& __mon, bool __intl = false) {304  return __iom_t8<_MoneyT>(__mon, __intl);305}306 307// get_time308 309template <class _CharT>310class __iom_t9;311 312template <class _CharT, class _Traits>313_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&314operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x);315 316template <class _CharT>317class __iom_t9 {318  tm* __tm_;319  const _CharT* __fmt_;320 321public:322  _LIBCPP_HIDE_FROM_ABI __iom_t9(tm* __tm, const _CharT* __fmt) : __tm_(__tm), __fmt_(__fmt) {}323 324  template <class _Cp, class _Traits>325  friend basic_istream<_Cp, _Traits>& operator>>(basic_istream<_Cp, _Traits>& __is, const __iom_t9<_Cp>& __x);326};327 328template <class _CharT, class _Traits>329_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&330operator>>(basic_istream<_CharT, _Traits>& __is, const __iom_t9<_CharT>& __x) {331#ifndef _LIBCPP_HAS_NO_EXCEPTIONS332  try {333#endif // _LIBCPP_HAS_NO_EXCEPTIONS334    typename basic_istream<_CharT, _Traits>::sentry __s(__is);335    if (__s) {336      typedef istreambuf_iterator<_CharT, _Traits> _Ip;337      typedef time_get<_CharT, _Ip> _Fp;338      ios_base::iostate __err = ios_base::goodbit;339      const _Fp& __tf         = std::use_facet<_Fp>(__is.getloc());340      __tf.get(_Ip(__is), _Ip(), __is, __err, __x.__tm_, __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_));341      __is.setstate(__err);342    }343#ifndef _LIBCPP_HAS_NO_EXCEPTIONS344  } catch (...) {345    __is.__set_badbit_and_consider_rethrow();346  }347#endif // _LIBCPP_HAS_NO_EXCEPTIONS348  return __is;349}350 351template <class _CharT>352inline _LIBCPP_HIDE_FROM_ABI __iom_t9<_CharT> get_time(tm* __tm, const _CharT* __fmt) {353  return __iom_t9<_CharT>(__tm, __fmt);354}355 356// put_time357 358template <class _CharT>359class __iom_t10;360 361template <class _CharT, class _Traits>362_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&363operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x);364 365template <class _CharT>366class __iom_t10 {367  const tm* __tm_;368  const _CharT* __fmt_;369 370public:371  _LIBCPP_HIDE_FROM_ABI __iom_t10(const tm* __tm, const _CharT* __fmt) : __tm_(__tm), __fmt_(__fmt) {}372 373  template <class _Cp, class _Traits>374  friend basic_ostream<_Cp, _Traits>& operator<<(basic_ostream<_Cp, _Traits>& __os, const __iom_t10<_Cp>& __x);375};376 377template <class _CharT, class _Traits>378_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&379operator<<(basic_ostream<_CharT, _Traits>& __os, const __iom_t10<_CharT>& __x) {380#ifndef _LIBCPP_HAS_NO_EXCEPTIONS381  try {382#endif // _LIBCPP_HAS_NO_EXCEPTIONS383    typename basic_ostream<_CharT, _Traits>::sentry __s(__os);384    if (__s) {385      typedef ostreambuf_iterator<_CharT, _Traits> _Op;386      typedef time_put<_CharT, _Op> _Fp;387      const _Fp& __tf = std::use_facet<_Fp>(__os.getloc());388      if (__tf.put(_Op(__os), __os, __os.fill(), __x.__tm_, __x.__fmt_, __x.__fmt_ + _Traits::length(__x.__fmt_))389              .failed())390        __os.setstate(ios_base::badbit);391    }392#ifndef _LIBCPP_HAS_NO_EXCEPTIONS393  } catch (...) {394    __os.__set_badbit_and_consider_rethrow();395  }396#endif // _LIBCPP_HAS_NO_EXCEPTIONS397  return __os;398}399 400template <class _CharT>401inline _LIBCPP_HIDE_FROM_ABI __iom_t10<_CharT> put_time(const tm* __tm, const _CharT* __fmt) {402  return __iom_t10<_CharT>(__tm, __fmt);403}404 405template <class _CharT, class _Traits>406_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& __quoted_output(407    basic_ostream<_CharT, _Traits>& __os,408    const _CharT* __first,409    const _CharT* __last,410    _CharT __delim,411    _CharT __escape) {412  basic_string<_CharT, _Traits> __str;413  __str.push_back(__delim);414  for (; __first != __last; ++__first) {415    if (_Traits::eq(*__first, __escape) || _Traits::eq(*__first, __delim))416      __str.push_back(__escape);417    __str.push_back(*__first);418  }419  __str.push_back(__delim);420  return std::__put_character_sequence(__os, __str.data(), __str.size());421}422 423template <class _CharT, class _Traits, class _String>424_LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&425__quoted_input(basic_istream<_CharT, _Traits>& __is, _String& __string, _CharT __delim, _CharT __escape) {426  __string.clear();427  _CharT __c;428  __is >> __c;429  if (__is.fail())430    return __is;431 432  if (!_Traits::eq(__c, __delim)) {433    // no delimiter, read the whole string434    __is.unget();435    __is >> __string;436    return __is;437  }438 439  __save_flags<_CharT, _Traits> __sf(__is);440  std::noskipws(__is);441  while (true) {442    __is >> __c;443    if (__is.fail())444      break;445    if (_Traits::eq(__c, __escape)) {446      __is >> __c;447      if (__is.fail())448        break;449    } else if (_Traits::eq(__c, __delim))450      break;451    __string.push_back(__c);452  }453  return __is;454}455 456template <class _CharT, class _Traits>457struct _LIBCPP_HIDDEN __quoted_output_proxy {458  const _CharT* __first_;459  const _CharT* __last_;460  _CharT __delim_;461  _CharT __escape_;462 463  _LIBCPP_HIDE_FROM_ABI explicit __quoted_output_proxy(const _CharT* __f, const _CharT* __l, _CharT __d, _CharT __e)464      : __first_(__f), __last_(__l), __delim_(__d), __escape_(__e) {}465 466  template <class _T2, __enable_if_t<_IsSame<_Traits, void>::value || _IsSame<_Traits, _T2>::value, int> = 0>467  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _T2>&468  operator<<(basic_ostream<_CharT, _T2>& __os, const __quoted_output_proxy& __p) {469    return std::__quoted_output(__os, __p.__first_, __p.__last_, __p.__delim_, __p.__escape_);470  }471};472 473template <class _CharT, class _Traits, class _Allocator>474struct _LIBCPP_HIDDEN __quoted_proxy {475  basic_string<_CharT, _Traits, _Allocator>& __string_;476  _CharT __delim_;477  _CharT __escape_;478 479  _LIBCPP_HIDE_FROM_ABI explicit __quoted_proxy(basic_string<_CharT, _Traits, _Allocator>& __s, _CharT __d, _CharT __e)480      : __string_(__s), __delim_(__d), __escape_(__e) {}481 482  friend _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&483  operator<<(basic_ostream<_CharT, _Traits>& __os, const __quoted_proxy& __p) {484    return std::__quoted_output(485        __os, __p.__string_.data(), __p.__string_.data() + __p.__string_.size(), __p.__delim_, __p.__escape_);486  }487 488  friend _LIBCPP_HIDE_FROM_ABI basic_istream<_CharT, _Traits>&489  operator>>(basic_istream<_CharT, _Traits>& __is, const __quoted_proxy& __p) {490    return std::__quoted_input(__is, __p.__string_, __p.__delim_, __p.__escape_);491  }492};493 494template <class _CharT, class _Traits, class _Allocator>495_LIBCPP_HIDE_FROM_ABI __quoted_output_proxy<_CharT, _Traits>496__quoted(const basic_string<_CharT, _Traits, _Allocator>& __s,497         _CharT __delim  = _CharT('"'),498         _CharT __escape = _CharT('\\')) {499  return __quoted_output_proxy<_CharT, _Traits>(__s.data(), __s.data() + __s.size(), __delim, __escape);500}501 502template <class _CharT, class _Traits, class _Allocator>503_LIBCPP_HIDE_FROM_ABI __quoted_proxy<_CharT, _Traits, _Allocator>504__quoted(basic_string<_CharT, _Traits, _Allocator>& __s, _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) {505  return __quoted_proxy<_CharT, _Traits, _Allocator>(__s, __delim, __escape);506}507 508_LIBCPP_END_NAMESPACE_STD509 510#endif // _LIBCPP___CXX03_IOMANIP511