OLD | NEW |
(Empty) | |
| 1 // -*- C++ -*- |
| 2 //===-------------------------- ostream -----------------------------------===// |
| 3 // |
| 4 // The LLVM Compiler Infrastructure |
| 5 // |
| 6 // This file is dual licensed under the MIT and the University of Illinois Open |
| 7 // Source Licenses. See LICENSE.TXT for details. |
| 8 // |
| 9 //===----------------------------------------------------------------------===// |
| 10 |
| 11 #ifndef _LIBCPP_OSTREAM |
| 12 #define _LIBCPP_OSTREAM |
| 13 |
| 14 /* |
| 15 ostream synopsis |
| 16 |
| 17 template <class charT, class traits = char_traits<charT> > |
| 18 class basic_ostream |
| 19 : virtual public basic_ios<charT,traits> |
| 20 { |
| 21 public: |
| 22 // types (inherited from basic_ios (27.5.4)): |
| 23 typedef charT char_type; |
| 24 typedef traits traits_type; |
| 25 typedef typename traits_type::int_type int_type; |
| 26 typedef typename traits_type::pos_type pos_type; |
| 27 typedef typename traits_type::off_type off_type; |
| 28 |
| 29 // 27.7.2.2 Constructor/destructor: |
| 30 explicit basic_ostream(basic_streambuf<char_type,traits>* sb); |
| 31 basic_ostream(basic_ostream&& rhs); |
| 32 virtual ~basic_ostream(); |
| 33 |
| 34 // 27.7.2.3 Assign/swap |
| 35 basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14 |
| 36 basic_ostream& operator=(basic_ostream&& rhs); |
| 37 void swap(basic_ostream& rhs); |
| 38 |
| 39 // 27.7.2.4 Prefix/suffix: |
| 40 class sentry; |
| 41 |
| 42 // 27.7.2.6 Formatted output: |
| 43 basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&)); |
| 44 basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,tr
aits>&)); |
| 45 basic_ostream& operator<<(ios_base& (*pf)(ios_base&)); |
| 46 basic_ostream& operator<<(bool n); |
| 47 basic_ostream& operator<<(short n); |
| 48 basic_ostream& operator<<(unsigned short n); |
| 49 basic_ostream& operator<<(int n); |
| 50 basic_ostream& operator<<(unsigned int n); |
| 51 basic_ostream& operator<<(long n); |
| 52 basic_ostream& operator<<(unsigned long n); |
| 53 basic_ostream& operator<<(long long n); |
| 54 basic_ostream& operator<<(unsigned long long n); |
| 55 basic_ostream& operator<<(float f); |
| 56 basic_ostream& operator<<(double f); |
| 57 basic_ostream& operator<<(long double f); |
| 58 basic_ostream& operator<<(const void* p); |
| 59 basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb); |
| 60 |
| 61 // 27.7.2.7 Unformatted output: |
| 62 basic_ostream& put(char_type c); |
| 63 basic_ostream& write(const char_type* s, streamsize n); |
| 64 basic_ostream& flush(); |
| 65 |
| 66 // 27.7.2.5 seeks: |
| 67 pos_type tellp(); |
| 68 basic_ostream& seekp(pos_type); |
| 69 basic_ostream& seekp(off_type, ios_base::seekdir); |
| 70 }; |
| 71 |
| 72 // 27.7.2.6.4 character inserters |
| 73 |
| 74 template<class charT, class traits> |
| 75 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT); |
| 76 |
| 77 template<class charT, class traits> |
| 78 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char); |
| 79 |
| 80 template<class traits> |
| 81 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char); |
| 82 |
| 83 // signed and unsigned |
| 84 |
| 85 template<class traits> |
| 86 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed cha
r); |
| 87 |
| 88 template<class traits> |
| 89 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned c
har); |
| 90 |
| 91 // NTBS |
| 92 template<class charT, class traits> |
| 93 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const ch
arT*); |
| 94 |
| 95 template<class charT, class traits> |
| 96 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const ch
ar*); |
| 97 |
| 98 template<class traits> |
| 99 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char
*); |
| 100 |
| 101 // signed and unsigned |
| 102 template<class traits> |
| 103 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed
char*); |
| 104 |
| 105 template<class traits> |
| 106 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsi
gned char*); |
| 107 |
| 108 // swap: |
| 109 template <class charT, class traits> |
| 110 void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y); |
| 111 |
| 112 template <class charT, class traits> |
| 113 basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os); |
| 114 |
| 115 template <class charT, class traits> |
| 116 basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os); |
| 117 |
| 118 template <class charT, class traits> |
| 119 basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os); |
| 120 |
| 121 // rvalue stream insertion |
| 122 template <class charT, class traits, class T> |
| 123 basic_ostream<charT, traits>& |
| 124 operator<<(basic_ostream<charT, traits>&& os, const T& x); |
| 125 |
| 126 } // std |
| 127 |
| 128 */ |
| 129 |
| 130 #include <__config> |
| 131 #include <ios> |
| 132 #include <streambuf> |
| 133 #include <locale> |
| 134 #include <iterator> |
| 135 #include <bitset> |
| 136 |
| 137 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) |
| 138 #pragma GCC system_header |
| 139 #endif |
| 140 |
| 141 _LIBCPP_BEGIN_NAMESPACE_STD |
| 142 |
| 143 template <class _CharT, class _Traits> |
| 144 class _LIBCPP_TYPE_VIS_ONLY basic_ostream |
| 145 : virtual public basic_ios<_CharT, _Traits> |
| 146 { |
| 147 public: |
| 148 // types (inherited from basic_ios (27.5.4)): |
| 149 typedef _CharT char_type; |
| 150 typedef _Traits traits_type; |
| 151 typedef typename traits_type::int_type int_type; |
| 152 typedef typename traits_type::pos_type pos_type; |
| 153 typedef typename traits_type::off_type off_type; |
| 154 |
| 155 // 27.7.2.2 Constructor/destructor: |
| 156 explicit basic_ostream(basic_streambuf<char_type, traits_type>* __sb); |
| 157 virtual ~basic_ostream(); |
| 158 protected: |
| 159 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES |
| 160 _LIBCPP_INLINE_VISIBILITY |
| 161 basic_ostream(basic_ostream&& __rhs); |
| 162 #endif |
| 163 |
| 164 // 27.7.2.3 Assign/swap |
| 165 #if _LIBCPP_STD_VER > 11 |
| 166 basic_ostream& operator=(const basic_ostream&) = delete; |
| 167 #endif |
| 168 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES |
| 169 _LIBCPP_INLINE_VISIBILITY |
| 170 basic_ostream& operator=(basic_ostream&& __rhs); |
| 171 #endif |
| 172 void swap(basic_ostream& __rhs); |
| 173 public: |
| 174 |
| 175 // 27.7.2.4 Prefix/suffix: |
| 176 class _LIBCPP_TYPE_VIS_ONLY sentry; |
| 177 |
| 178 // 27.7.2.6 Formatted output: |
| 179 basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&)); |
| 180 basic_ostream& operator<<(basic_ios<char_type, traits_type>& |
| 181 (*__pf)(basic_ios<char_type,traits_type>&)); |
| 182 basic_ostream& operator<<(ios_base& (*__pf)(ios_base&)); |
| 183 basic_ostream& operator<<(bool __n); |
| 184 basic_ostream& operator<<(short __n); |
| 185 basic_ostream& operator<<(unsigned short __n); |
| 186 basic_ostream& operator<<(int __n); |
| 187 basic_ostream& operator<<(unsigned int __n); |
| 188 basic_ostream& operator<<(long __n); |
| 189 basic_ostream& operator<<(unsigned long __n); |
| 190 basic_ostream& operator<<(long long __n); |
| 191 basic_ostream& operator<<(unsigned long long __n); |
| 192 basic_ostream& operator<<(float __f); |
| 193 basic_ostream& operator<<(double __f); |
| 194 basic_ostream& operator<<(long double __f); |
| 195 basic_ostream& operator<<(const void* __p); |
| 196 basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb); |
| 197 |
| 198 // 27.7.2.7 Unformatted output: |
| 199 basic_ostream& put(char_type __c); |
| 200 basic_ostream& write(const char_type* __s, streamsize __n); |
| 201 basic_ostream& flush(); |
| 202 |
| 203 // 27.7.2.5 seeks: |
| 204 pos_type tellp(); |
| 205 basic_ostream& seekp(pos_type __pos); |
| 206 basic_ostream& seekp(off_type __off, ios_base::seekdir __dir); |
| 207 |
| 208 protected: |
| 209 _LIBCPP_ALWAYS_INLINE |
| 210 basic_ostream() {} // extension, intentially does not initialize |
| 211 }; |
| 212 |
| 213 template <class _CharT, class _Traits> |
| 214 class _LIBCPP_TYPE_VIS_ONLY basic_ostream<_CharT, _Traits>::sentry |
| 215 { |
| 216 bool __ok_; |
| 217 basic_ostream<_CharT, _Traits>& __os_; |
| 218 |
| 219 sentry(const sentry&); // = delete; |
| 220 sentry& operator=(const sentry&); // = delete; |
| 221 |
| 222 public: |
| 223 explicit sentry(basic_ostream<_CharT, _Traits>& __os); |
| 224 ~sentry(); |
| 225 |
| 226 _LIBCPP_ALWAYS_INLINE |
| 227 _LIBCPP_EXPLICIT |
| 228 operator bool() const {return __ok_;} |
| 229 }; |
| 230 |
| 231 template <class _CharT, class _Traits> |
| 232 basic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& _
_os) |
| 233 : __ok_(false), |
| 234 __os_(__os) |
| 235 { |
| 236 if (__os.good()) |
| 237 { |
| 238 if (__os.tie()) |
| 239 __os.tie()->flush(); |
| 240 __ok_ = true; |
| 241 } |
| 242 } |
| 243 |
| 244 template <class _CharT, class _Traits> |
| 245 basic_ostream<_CharT, _Traits>::sentry::~sentry() |
| 246 { |
| 247 if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf) |
| 248 && !uncaught_exception()) |
| 249 { |
| 250 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 251 try |
| 252 { |
| 253 #endif // _LIBCPP_NO_EXCEPTIONS |
| 254 if (__os_.rdbuf()->pubsync() == -1) |
| 255 __os_.setstate(ios_base::badbit); |
| 256 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 257 } |
| 258 catch (...) |
| 259 { |
| 260 } |
| 261 #endif // _LIBCPP_NO_EXCEPTIONS |
| 262 } |
| 263 } |
| 264 |
| 265 template <class _CharT, class _Traits> |
| 266 inline _LIBCPP_INLINE_VISIBILITY |
| 267 basic_ostream<_CharT, _Traits>::basic_ostream(basic_streambuf<char_type, traits_
type>* __sb) |
| 268 { |
| 269 this->init(__sb); |
| 270 } |
| 271 |
| 272 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES |
| 273 |
| 274 template <class _CharT, class _Traits> |
| 275 inline _LIBCPP_INLINE_VISIBILITY |
| 276 basic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs) |
| 277 { |
| 278 this->move(__rhs); |
| 279 } |
| 280 |
| 281 template <class _CharT, class _Traits> |
| 282 inline _LIBCPP_INLINE_VISIBILITY |
| 283 basic_ostream<_CharT, _Traits>& |
| 284 basic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs) |
| 285 { |
| 286 swap(__rhs); |
| 287 return *this; |
| 288 } |
| 289 |
| 290 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES |
| 291 |
| 292 template <class _CharT, class _Traits> |
| 293 basic_ostream<_CharT, _Traits>::~basic_ostream() |
| 294 { |
| 295 } |
| 296 |
| 297 template <class _CharT, class _Traits> |
| 298 inline _LIBCPP_INLINE_VISIBILITY |
| 299 void |
| 300 basic_ostream<_CharT, _Traits>::swap(basic_ostream& __rhs) |
| 301 { |
| 302 basic_ios<char_type, traits_type>::swap(__rhs); |
| 303 } |
| 304 |
| 305 template <class _CharT, class _Traits> |
| 306 inline _LIBCPP_INLINE_VISIBILITY |
| 307 basic_ostream<_CharT, _Traits>& |
| 308 basic_ostream<_CharT, _Traits>::operator<<(basic_ostream& (*__pf)(basic_ostream&
)) |
| 309 { |
| 310 return __pf(*this); |
| 311 } |
| 312 |
| 313 template <class _CharT, class _Traits> |
| 314 inline _LIBCPP_INLINE_VISIBILITY |
| 315 basic_ostream<_CharT, _Traits>& |
| 316 basic_ostream<_CharT, _Traits>::operator<<(basic_ios<char_type, traits_type>& |
| 317 (*__pf)(basic_ios<char_type,traits_ty
pe>&)) |
| 318 { |
| 319 __pf(*this); |
| 320 return *this; |
| 321 } |
| 322 |
| 323 template <class _CharT, class _Traits> |
| 324 inline _LIBCPP_INLINE_VISIBILITY |
| 325 basic_ostream<_CharT, _Traits>& |
| 326 basic_ostream<_CharT, _Traits>::operator<<(ios_base& (*__pf)(ios_base&)) |
| 327 { |
| 328 __pf(*this); |
| 329 return *this; |
| 330 } |
| 331 |
| 332 template <class _CharT, class _Traits> |
| 333 basic_ostream<_CharT, _Traits>& |
| 334 basic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<char_type, traits_typ
e>* __sb) |
| 335 { |
| 336 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 337 try |
| 338 { |
| 339 #endif // _LIBCPP_NO_EXCEPTIONS |
| 340 sentry __s(*this); |
| 341 if (__s) |
| 342 { |
| 343 if (__sb) |
| 344 { |
| 345 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 346 try |
| 347 { |
| 348 #endif // _LIBCPP_NO_EXCEPTIONS |
| 349 typedef istreambuf_iterator<_CharT, _Traits> _Ip; |
| 350 typedef ostreambuf_iterator<_CharT, _Traits> _Op; |
| 351 _Ip __i(__sb); |
| 352 _Ip __eof; |
| 353 _Op __o(*this); |
| 354 size_t __c = 0; |
| 355 for (; __i != __eof; ++__i, ++__o, ++__c) |
| 356 { |
| 357 *__o = *__i; |
| 358 if (__o.failed()) |
| 359 break; |
| 360 } |
| 361 if (__c == 0) |
| 362 this->setstate(ios_base::failbit); |
| 363 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 364 } |
| 365 catch (...) |
| 366 { |
| 367 this->__set_failbit_and_consider_rethrow(); |
| 368 } |
| 369 #endif // _LIBCPP_NO_EXCEPTIONS |
| 370 } |
| 371 else |
| 372 this->setstate(ios_base::badbit); |
| 373 } |
| 374 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 375 } |
| 376 catch (...) |
| 377 { |
| 378 this->__set_badbit_and_consider_rethrow(); |
| 379 } |
| 380 #endif // _LIBCPP_NO_EXCEPTIONS |
| 381 return *this; |
| 382 } |
| 383 |
| 384 template <class _CharT, class _Traits> |
| 385 basic_ostream<_CharT, _Traits>& |
| 386 basic_ostream<_CharT, _Traits>::operator<<(bool __n) |
| 387 { |
| 388 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 389 try |
| 390 { |
| 391 #endif // _LIBCPP_NO_EXCEPTIONS |
| 392 sentry __s(*this); |
| 393 if (__s) |
| 394 { |
| 395 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 396 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 397 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 398 this->setstate(ios_base::badbit | ios_base::failbit); |
| 399 } |
| 400 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 401 } |
| 402 catch (...) |
| 403 { |
| 404 this->__set_badbit_and_consider_rethrow(); |
| 405 } |
| 406 #endif // _LIBCPP_NO_EXCEPTIONS |
| 407 return *this; |
| 408 } |
| 409 |
| 410 template <class _CharT, class _Traits> |
| 411 basic_ostream<_CharT, _Traits>& |
| 412 basic_ostream<_CharT, _Traits>::operator<<(short __n) |
| 413 { |
| 414 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 415 try |
| 416 { |
| 417 #endif // _LIBCPP_NO_EXCEPTIONS |
| 418 sentry __s(*this); |
| 419 if (__s) |
| 420 { |
| 421 ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield
; |
| 422 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 423 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 424 if (__f.put(*this, *this, this->fill(), |
| 425 __flags == ios_base::oct || __flags == ios_base::hex ? |
| 426 static_cast<long>(static_cast<unsigned short>(__n)) : |
| 427 static_cast<long>(__n)).failed()) |
| 428 this->setstate(ios_base::badbit | ios_base::failbit); |
| 429 } |
| 430 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 431 } |
| 432 catch (...) |
| 433 { |
| 434 this->__set_badbit_and_consider_rethrow(); |
| 435 } |
| 436 #endif // _LIBCPP_NO_EXCEPTIONS |
| 437 return *this; |
| 438 } |
| 439 |
| 440 template <class _CharT, class _Traits> |
| 441 basic_ostream<_CharT, _Traits>& |
| 442 basic_ostream<_CharT, _Traits>::operator<<(unsigned short __n) |
| 443 { |
| 444 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 445 try |
| 446 { |
| 447 #endif // _LIBCPP_NO_EXCEPTIONS |
| 448 sentry __s(*this); |
| 449 if (__s) |
| 450 { |
| 451 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 452 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 453 if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(_
_n)).failed()) |
| 454 this->setstate(ios_base::badbit | ios_base::failbit); |
| 455 } |
| 456 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 457 } |
| 458 catch (...) |
| 459 { |
| 460 this->__set_badbit_and_consider_rethrow(); |
| 461 } |
| 462 #endif // _LIBCPP_NO_EXCEPTIONS |
| 463 return *this; |
| 464 } |
| 465 |
| 466 template <class _CharT, class _Traits> |
| 467 basic_ostream<_CharT, _Traits>& |
| 468 basic_ostream<_CharT, _Traits>::operator<<(int __n) |
| 469 { |
| 470 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 471 try |
| 472 { |
| 473 #endif // _LIBCPP_NO_EXCEPTIONS |
| 474 sentry __s(*this); |
| 475 if (__s) |
| 476 { |
| 477 ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield
; |
| 478 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 479 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 480 if (__f.put(*this, *this, this->fill(), |
| 481 __flags == ios_base::oct || __flags == ios_base::hex ? |
| 482 static_cast<long>(static_cast<unsigned int>(__n)) : |
| 483 static_cast<long>(__n)).failed()) |
| 484 this->setstate(ios_base::badbit | ios_base::failbit); |
| 485 } |
| 486 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 487 } |
| 488 catch (...) |
| 489 { |
| 490 this->__set_badbit_and_consider_rethrow(); |
| 491 } |
| 492 #endif // _LIBCPP_NO_EXCEPTIONS |
| 493 return *this; |
| 494 } |
| 495 |
| 496 template <class _CharT, class _Traits> |
| 497 basic_ostream<_CharT, _Traits>& |
| 498 basic_ostream<_CharT, _Traits>::operator<<(unsigned int __n) |
| 499 { |
| 500 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 501 try |
| 502 { |
| 503 #endif // _LIBCPP_NO_EXCEPTIONS |
| 504 sentry __s(*this); |
| 505 if (__s) |
| 506 { |
| 507 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 508 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 509 if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(_
_n)).failed()) |
| 510 this->setstate(ios_base::badbit | ios_base::failbit); |
| 511 } |
| 512 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 513 } |
| 514 catch (...) |
| 515 { |
| 516 this->__set_badbit_and_consider_rethrow(); |
| 517 } |
| 518 #endif // _LIBCPP_NO_EXCEPTIONS |
| 519 return *this; |
| 520 } |
| 521 |
| 522 template <class _CharT, class _Traits> |
| 523 basic_ostream<_CharT, _Traits>& |
| 524 basic_ostream<_CharT, _Traits>::operator<<(long __n) |
| 525 { |
| 526 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 527 try |
| 528 { |
| 529 #endif // _LIBCPP_NO_EXCEPTIONS |
| 530 sentry __s(*this); |
| 531 if (__s) |
| 532 { |
| 533 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 534 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 535 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 536 this->setstate(ios_base::badbit | ios_base::failbit); |
| 537 } |
| 538 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 539 } |
| 540 catch (...) |
| 541 { |
| 542 this->__set_badbit_and_consider_rethrow(); |
| 543 } |
| 544 #endif // _LIBCPP_NO_EXCEPTIONS |
| 545 return *this; |
| 546 } |
| 547 |
| 548 template <class _CharT, class _Traits> |
| 549 basic_ostream<_CharT, _Traits>& |
| 550 basic_ostream<_CharT, _Traits>::operator<<(unsigned long __n) |
| 551 { |
| 552 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 553 try |
| 554 { |
| 555 #endif // _LIBCPP_NO_EXCEPTIONS |
| 556 sentry __s(*this); |
| 557 if (__s) |
| 558 { |
| 559 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 560 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 561 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 562 this->setstate(ios_base::badbit | ios_base::failbit); |
| 563 } |
| 564 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 565 } |
| 566 catch (...) |
| 567 { |
| 568 this->__set_badbit_and_consider_rethrow(); |
| 569 } |
| 570 #endif // _LIBCPP_NO_EXCEPTIONS |
| 571 return *this; |
| 572 } |
| 573 |
| 574 template <class _CharT, class _Traits> |
| 575 basic_ostream<_CharT, _Traits>& |
| 576 basic_ostream<_CharT, _Traits>::operator<<(long long __n) |
| 577 { |
| 578 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 579 try |
| 580 { |
| 581 #endif // _LIBCPP_NO_EXCEPTIONS |
| 582 sentry __s(*this); |
| 583 if (__s) |
| 584 { |
| 585 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 586 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 587 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 588 this->setstate(ios_base::badbit | ios_base::failbit); |
| 589 } |
| 590 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 591 } |
| 592 catch (...) |
| 593 { |
| 594 this->__set_badbit_and_consider_rethrow(); |
| 595 } |
| 596 #endif // _LIBCPP_NO_EXCEPTIONS |
| 597 return *this; |
| 598 } |
| 599 |
| 600 template <class _CharT, class _Traits> |
| 601 basic_ostream<_CharT, _Traits>& |
| 602 basic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n) |
| 603 { |
| 604 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 605 try |
| 606 { |
| 607 #endif // _LIBCPP_NO_EXCEPTIONS |
| 608 sentry __s(*this); |
| 609 if (__s) |
| 610 { |
| 611 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 612 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 613 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 614 this->setstate(ios_base::badbit | ios_base::failbit); |
| 615 } |
| 616 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 617 } |
| 618 catch (...) |
| 619 { |
| 620 this->__set_badbit_and_consider_rethrow(); |
| 621 } |
| 622 #endif // _LIBCPP_NO_EXCEPTIONS |
| 623 return *this; |
| 624 } |
| 625 |
| 626 template <class _CharT, class _Traits> |
| 627 basic_ostream<_CharT, _Traits>& |
| 628 basic_ostream<_CharT, _Traits>::operator<<(float __n) |
| 629 { |
| 630 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 631 try |
| 632 { |
| 633 #endif // _LIBCPP_NO_EXCEPTIONS |
| 634 sentry __s(*this); |
| 635 if (__s) |
| 636 { |
| 637 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 638 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 639 if (__f.put(*this, *this, this->fill(), static_cast<double>(__n)).fa
iled()) |
| 640 this->setstate(ios_base::badbit | ios_base::failbit); |
| 641 } |
| 642 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 643 } |
| 644 catch (...) |
| 645 { |
| 646 this->__set_badbit_and_consider_rethrow(); |
| 647 } |
| 648 #endif // _LIBCPP_NO_EXCEPTIONS |
| 649 return *this; |
| 650 } |
| 651 |
| 652 template <class _CharT, class _Traits> |
| 653 basic_ostream<_CharT, _Traits>& |
| 654 basic_ostream<_CharT, _Traits>::operator<<(double __n) |
| 655 { |
| 656 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 657 try |
| 658 { |
| 659 #endif // _LIBCPP_NO_EXCEPTIONS |
| 660 sentry __s(*this); |
| 661 if (__s) |
| 662 { |
| 663 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 664 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 665 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 666 this->setstate(ios_base::badbit | ios_base::failbit); |
| 667 } |
| 668 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 669 } |
| 670 catch (...) |
| 671 { |
| 672 this->__set_badbit_and_consider_rethrow(); |
| 673 } |
| 674 #endif // _LIBCPP_NO_EXCEPTIONS |
| 675 return *this; |
| 676 } |
| 677 |
| 678 template <class _CharT, class _Traits> |
| 679 basic_ostream<_CharT, _Traits>& |
| 680 basic_ostream<_CharT, _Traits>::operator<<(long double __n) |
| 681 { |
| 682 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 683 try |
| 684 { |
| 685 #endif // _LIBCPP_NO_EXCEPTIONS |
| 686 sentry __s(*this); |
| 687 if (__s) |
| 688 { |
| 689 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 690 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 691 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 692 this->setstate(ios_base::badbit | ios_base::failbit); |
| 693 } |
| 694 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 695 } |
| 696 catch (...) |
| 697 { |
| 698 this->__set_badbit_and_consider_rethrow(); |
| 699 } |
| 700 #endif // _LIBCPP_NO_EXCEPTIONS |
| 701 return *this; |
| 702 } |
| 703 |
| 704 template <class _CharT, class _Traits> |
| 705 basic_ostream<_CharT, _Traits>& |
| 706 basic_ostream<_CharT, _Traits>::operator<<(const void* __n) |
| 707 { |
| 708 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 709 try |
| 710 { |
| 711 #endif // _LIBCPP_NO_EXCEPTIONS |
| 712 sentry __s(*this); |
| 713 if (__s) |
| 714 { |
| 715 typedef num_put<char_type, ostreambuf_iterator<char_type, traits_typ
e> > _Fp; |
| 716 const _Fp& __f = use_facet<_Fp>(this->getloc()); |
| 717 if (__f.put(*this, *this, this->fill(), __n).failed()) |
| 718 this->setstate(ios_base::badbit | ios_base::failbit); |
| 719 } |
| 720 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 721 } |
| 722 catch (...) |
| 723 { |
| 724 this->__set_badbit_and_consider_rethrow(); |
| 725 } |
| 726 #endif // _LIBCPP_NO_EXCEPTIONS |
| 727 return *this; |
| 728 } |
| 729 |
| 730 template<class _CharT, class _Traits> |
| 731 basic_ostream<_CharT, _Traits>& |
| 732 operator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c) |
| 733 { |
| 734 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 735 try |
| 736 { |
| 737 #endif // _LIBCPP_NO_EXCEPTIONS |
| 738 typename basic_ostream<_CharT, _Traits>::sentry __s(__os); |
| 739 if (__s) |
| 740 { |
| 741 typedef ostreambuf_iterator<_CharT, _Traits> _Ip; |
| 742 if (__pad_and_output(_Ip(__os), |
| 743 &__c, |
| 744 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 745 &__c + 1 : |
| 746 &__c, |
| 747 &__c + 1, |
| 748 __os, |
| 749 __os.fill()).failed()) |
| 750 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 751 } |
| 752 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 753 } |
| 754 catch (...) |
| 755 { |
| 756 __os.__set_badbit_and_consider_rethrow(); |
| 757 } |
| 758 #endif // _LIBCPP_NO_EXCEPTIONS |
| 759 return __os; |
| 760 } |
| 761 |
| 762 template<class _CharT, class _Traits> |
| 763 basic_ostream<_CharT, _Traits>& |
| 764 operator<<(basic_ostream<_CharT, _Traits>& __os, char __cn) |
| 765 { |
| 766 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 767 try |
| 768 { |
| 769 #endif // _LIBCPP_NO_EXCEPTIONS |
| 770 typename basic_ostream<_CharT, _Traits>::sentry __s(__os); |
| 771 if (__s) |
| 772 { |
| 773 _CharT __c = __os.widen(__cn); |
| 774 typedef ostreambuf_iterator<_CharT, _Traits> _Ip; |
| 775 if (__pad_and_output(_Ip(__os), |
| 776 &__c, |
| 777 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 778 &__c + 1 : |
| 779 &__c, |
| 780 &__c + 1, |
| 781 __os, |
| 782 __os.fill()).failed()) |
| 783 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 784 } |
| 785 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 786 } |
| 787 catch (...) |
| 788 { |
| 789 __os.__set_badbit_and_consider_rethrow(); |
| 790 } |
| 791 #endif // _LIBCPP_NO_EXCEPTIONS |
| 792 return __os; |
| 793 } |
| 794 |
| 795 template<class _Traits> |
| 796 basic_ostream<char, _Traits>& |
| 797 operator<<(basic_ostream<char, _Traits>& __os, char __c) |
| 798 { |
| 799 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 800 try |
| 801 { |
| 802 #endif // _LIBCPP_NO_EXCEPTIONS |
| 803 typename basic_ostream<char, _Traits>::sentry __s(__os); |
| 804 if (__s) |
| 805 { |
| 806 typedef ostreambuf_iterator<char, _Traits> _Ip; |
| 807 if (__pad_and_output(_Ip(__os), |
| 808 &__c, |
| 809 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 810 &__c + 1 : |
| 811 &__c, |
| 812 &__c + 1, |
| 813 __os, |
| 814 __os.fill()).failed()) |
| 815 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 816 } |
| 817 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 818 } |
| 819 catch (...) |
| 820 { |
| 821 __os.__set_badbit_and_consider_rethrow(); |
| 822 } |
| 823 #endif // _LIBCPP_NO_EXCEPTIONS |
| 824 return __os; |
| 825 } |
| 826 |
| 827 template<class _Traits> |
| 828 basic_ostream<char, _Traits>& |
| 829 operator<<(basic_ostream<char, _Traits>& __os, signed char __c) |
| 830 { |
| 831 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 832 try |
| 833 { |
| 834 #endif // _LIBCPP_NO_EXCEPTIONS |
| 835 typename basic_ostream<char, _Traits>::sentry __s(__os); |
| 836 if (__s) |
| 837 { |
| 838 typedef ostreambuf_iterator<char, _Traits> _Ip; |
| 839 if (__pad_and_output(_Ip(__os), |
| 840 (char*)&__c, |
| 841 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 842 (char*)&__c + 1 : |
| 843 (char*)&__c, |
| 844 (char*)&__c + 1, |
| 845 __os, |
| 846 __os.fill()).failed()) |
| 847 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 848 } |
| 849 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 850 } |
| 851 catch (...) |
| 852 { |
| 853 __os.__set_badbit_and_consider_rethrow(); |
| 854 } |
| 855 #endif // _LIBCPP_NO_EXCEPTIONS |
| 856 return __os; |
| 857 } |
| 858 |
| 859 template<class _Traits> |
| 860 basic_ostream<char, _Traits>& |
| 861 operator<<(basic_ostream<char, _Traits>& __os, unsigned char __c) |
| 862 { |
| 863 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 864 try |
| 865 { |
| 866 #endif // _LIBCPP_NO_EXCEPTIONS |
| 867 typename basic_ostream<char, _Traits>::sentry __s(__os); |
| 868 if (__s) |
| 869 { |
| 870 typedef ostreambuf_iterator<char, _Traits> _Ip; |
| 871 if (__pad_and_output(_Ip(__os), |
| 872 (char*)&__c, |
| 873 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 874 (char*)&__c + 1 : |
| 875 (char*)&__c, |
| 876 (char*)&__c + 1, |
| 877 __os, |
| 878 __os.fill()).failed()) |
| 879 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 880 } |
| 881 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 882 } |
| 883 catch (...) |
| 884 { |
| 885 __os.__set_badbit_and_consider_rethrow(); |
| 886 } |
| 887 #endif // _LIBCPP_NO_EXCEPTIONS |
| 888 return __os; |
| 889 } |
| 890 |
| 891 template<class _CharT, class _Traits> |
| 892 basic_ostream<_CharT, _Traits>& |
| 893 operator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str) |
| 894 { |
| 895 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 896 try |
| 897 { |
| 898 #endif // _LIBCPP_NO_EXCEPTIONS |
| 899 typename basic_ostream<_CharT, _Traits>::sentry __s(__os); |
| 900 if (__s) |
| 901 { |
| 902 typedef ostreambuf_iterator<_CharT, _Traits> _Ip; |
| 903 size_t __len = _Traits::length(__str); |
| 904 if (__pad_and_output(_Ip(__os), |
| 905 __str, |
| 906 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 907 __str + __len : |
| 908 __str, |
| 909 __str + __len, |
| 910 __os, |
| 911 __os.fill()).failed()) |
| 912 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 913 } |
| 914 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 915 } |
| 916 catch (...) |
| 917 { |
| 918 __os.__set_badbit_and_consider_rethrow(); |
| 919 } |
| 920 #endif // _LIBCPP_NO_EXCEPTIONS |
| 921 return __os; |
| 922 } |
| 923 |
| 924 template<class _CharT, class _Traits> |
| 925 basic_ostream<_CharT, _Traits>& |
| 926 operator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn) |
| 927 { |
| 928 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 929 try |
| 930 { |
| 931 #endif // _LIBCPP_NO_EXCEPTIONS |
| 932 typename basic_ostream<_CharT, _Traits>::sentry __s(__os); |
| 933 if (__s) |
| 934 { |
| 935 typedef ostreambuf_iterator<_CharT, _Traits> _Ip; |
| 936 size_t __len = char_traits<char>::length(__strn); |
| 937 const int __bs = 100; |
| 938 _CharT __wbb[__bs]; |
| 939 _CharT* __wb = __wbb; |
| 940 unique_ptr<_CharT, void(*)(void*)> __h(0, free); |
| 941 if (__len > __bs) |
| 942 { |
| 943 __wb = (_CharT*)malloc(__len*sizeof(_CharT)); |
| 944 if (__wb == 0) |
| 945 __throw_bad_alloc(); |
| 946 __h.reset(__wb); |
| 947 } |
| 948 for (_CharT* __p = __wb; *__strn != '\0'; ++__strn, ++__p) |
| 949 *__p = __os.widen(*__strn); |
| 950 if (__pad_and_output(_Ip(__os), |
| 951 __wb, |
| 952 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 953 __wb + __len : |
| 954 __wb, |
| 955 __wb + __len, |
| 956 __os, |
| 957 __os.fill()).failed()) |
| 958 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 959 } |
| 960 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 961 } |
| 962 catch (...) |
| 963 { |
| 964 __os.__set_badbit_and_consider_rethrow(); |
| 965 } |
| 966 #endif // _LIBCPP_NO_EXCEPTIONS |
| 967 return __os; |
| 968 } |
| 969 |
| 970 template<class _Traits> |
| 971 basic_ostream<char, _Traits>& |
| 972 operator<<(basic_ostream<char, _Traits>& __os, const char* __str) |
| 973 { |
| 974 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 975 try |
| 976 { |
| 977 #endif // _LIBCPP_NO_EXCEPTIONS |
| 978 typename basic_ostream<char, _Traits>::sentry __s(__os); |
| 979 if (__s) |
| 980 { |
| 981 typedef ostreambuf_iterator<char, _Traits> _Ip; |
| 982 size_t __len = _Traits::length(__str); |
| 983 if (__pad_and_output(_Ip(__os), |
| 984 __str, |
| 985 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 986 __str + __len : |
| 987 __str, |
| 988 __str + __len, |
| 989 __os, |
| 990 __os.fill()).failed()) |
| 991 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 992 } |
| 993 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 994 } |
| 995 catch (...) |
| 996 { |
| 997 __os.__set_badbit_and_consider_rethrow(); |
| 998 } |
| 999 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1000 return __os; |
| 1001 } |
| 1002 |
| 1003 template<class _Traits> |
| 1004 basic_ostream<char, _Traits>& |
| 1005 operator<<(basic_ostream<char, _Traits>& __os, const signed char* __str) |
| 1006 { |
| 1007 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1008 try |
| 1009 { |
| 1010 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1011 typename basic_ostream<char, _Traits>::sentry __s(__os); |
| 1012 if (__s) |
| 1013 { |
| 1014 typedef ostreambuf_iterator<char, _Traits> _Ip; |
| 1015 size_t __len = _Traits::length((const char*)__str); |
| 1016 if (__pad_and_output(_Ip(__os), |
| 1017 (const char*)__str, |
| 1018 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 1019 (const char*)__str + __len : |
| 1020 (const char*)__str, |
| 1021 (const char*)__str + __len, |
| 1022 __os, |
| 1023 __os.fill()).failed()) |
| 1024 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 1025 } |
| 1026 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1027 } |
| 1028 catch (...) |
| 1029 { |
| 1030 __os.__set_badbit_and_consider_rethrow(); |
| 1031 } |
| 1032 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1033 return __os; |
| 1034 } |
| 1035 |
| 1036 template<class _Traits> |
| 1037 basic_ostream<char, _Traits>& |
| 1038 operator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str) |
| 1039 { |
| 1040 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1041 try |
| 1042 { |
| 1043 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1044 typename basic_ostream<char, _Traits>::sentry __s(__os); |
| 1045 if (__s) |
| 1046 { |
| 1047 typedef ostreambuf_iterator<char, _Traits> _Ip; |
| 1048 size_t __len = _Traits::length((const char*)__str); |
| 1049 if (__pad_and_output(_Ip(__os), |
| 1050 (const char*)__str, |
| 1051 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 1052 (const char*)__str + __len : |
| 1053 (const char*)__str, |
| 1054 (const char*)__str + __len, |
| 1055 __os, |
| 1056 __os.fill()).failed()) |
| 1057 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 1058 } |
| 1059 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1060 } |
| 1061 catch (...) |
| 1062 { |
| 1063 __os.__set_badbit_and_consider_rethrow(); |
| 1064 } |
| 1065 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1066 return __os; |
| 1067 } |
| 1068 |
| 1069 template <class _CharT, class _Traits> |
| 1070 basic_ostream<_CharT, _Traits>& |
| 1071 basic_ostream<_CharT, _Traits>::put(char_type __c) |
| 1072 { |
| 1073 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1074 try |
| 1075 { |
| 1076 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1077 sentry __s(*this); |
| 1078 if (__s) |
| 1079 { |
| 1080 typedef ostreambuf_iterator<_CharT, _Traits> _Op; |
| 1081 _Op __o(*this); |
| 1082 *__o = __c; |
| 1083 if (__o.failed()) |
| 1084 this->setstate(ios_base::badbit); |
| 1085 } |
| 1086 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1087 } |
| 1088 catch (...) |
| 1089 { |
| 1090 this->__set_badbit_and_consider_rethrow(); |
| 1091 } |
| 1092 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1093 return *this; |
| 1094 } |
| 1095 |
| 1096 template <class _CharT, class _Traits> |
| 1097 basic_ostream<_CharT, _Traits>& |
| 1098 basic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n) |
| 1099 { |
| 1100 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1101 try |
| 1102 { |
| 1103 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1104 sentry __sen(*this); |
| 1105 if (__sen && __n) |
| 1106 { |
| 1107 if (this->rdbuf()->sputn(__s, __n) != __n) |
| 1108 this->setstate(ios_base::badbit); |
| 1109 } |
| 1110 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1111 } |
| 1112 catch (...) |
| 1113 { |
| 1114 this->__set_badbit_and_consider_rethrow(); |
| 1115 } |
| 1116 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1117 return *this; |
| 1118 } |
| 1119 |
| 1120 template <class _CharT, class _Traits> |
| 1121 basic_ostream<_CharT, _Traits>& |
| 1122 basic_ostream<_CharT, _Traits>::flush() |
| 1123 { |
| 1124 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1125 try |
| 1126 { |
| 1127 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1128 if (this->rdbuf()) |
| 1129 { |
| 1130 sentry __s(*this); |
| 1131 if (__s) |
| 1132 { |
| 1133 if (this->rdbuf()->pubsync() == -1) |
| 1134 this->setstate(ios_base::badbit); |
| 1135 } |
| 1136 } |
| 1137 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1138 } |
| 1139 catch (...) |
| 1140 { |
| 1141 this->__set_badbit_and_consider_rethrow(); |
| 1142 } |
| 1143 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1144 return *this; |
| 1145 } |
| 1146 |
| 1147 template <class _CharT, class _Traits> |
| 1148 inline _LIBCPP_INLINE_VISIBILITY |
| 1149 typename basic_ostream<_CharT, _Traits>::pos_type |
| 1150 basic_ostream<_CharT, _Traits>::tellp() |
| 1151 { |
| 1152 if (this->fail()) |
| 1153 return pos_type(-1); |
| 1154 return this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); |
| 1155 } |
| 1156 |
| 1157 template <class _CharT, class _Traits> |
| 1158 inline _LIBCPP_INLINE_VISIBILITY |
| 1159 basic_ostream<_CharT, _Traits>& |
| 1160 basic_ostream<_CharT, _Traits>::seekp(pos_type __pos) |
| 1161 { |
| 1162 sentry __s(*this); |
| 1163 if (__s) |
| 1164 { |
| 1165 if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1)) |
| 1166 this->setstate(ios_base::failbit); |
| 1167 } |
| 1168 return *this; |
| 1169 } |
| 1170 |
| 1171 template <class _CharT, class _Traits> |
| 1172 inline _LIBCPP_INLINE_VISIBILITY |
| 1173 basic_ostream<_CharT, _Traits>& |
| 1174 basic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir) |
| 1175 { |
| 1176 sentry __s(*this); |
| 1177 if (__s) |
| 1178 { |
| 1179 if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::out) == pos_type(-
1)) |
| 1180 this->setstate(ios_base::failbit); |
| 1181 } |
| 1182 return *this; |
| 1183 } |
| 1184 |
| 1185 template <class _CharT, class _Traits> |
| 1186 inline _LIBCPP_INLINE_VISIBILITY |
| 1187 basic_ostream<_CharT, _Traits>& |
| 1188 endl(basic_ostream<_CharT, _Traits>& __os) |
| 1189 { |
| 1190 __os.put(__os.widen('\n')); |
| 1191 __os.flush(); |
| 1192 return __os; |
| 1193 } |
| 1194 |
| 1195 template <class _CharT, class _Traits> |
| 1196 inline _LIBCPP_INLINE_VISIBILITY |
| 1197 basic_ostream<_CharT, _Traits>& |
| 1198 ends(basic_ostream<_CharT, _Traits>& __os) |
| 1199 { |
| 1200 __os.put(_CharT()); |
| 1201 return __os; |
| 1202 } |
| 1203 |
| 1204 template <class _CharT, class _Traits> |
| 1205 inline _LIBCPP_INLINE_VISIBILITY |
| 1206 basic_ostream<_CharT, _Traits>& |
| 1207 flush(basic_ostream<_CharT, _Traits>& __os) |
| 1208 { |
| 1209 __os.flush(); |
| 1210 return __os; |
| 1211 } |
| 1212 |
| 1213 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES |
| 1214 |
| 1215 template <class _Stream, class _Tp> |
| 1216 inline _LIBCPP_INLINE_VISIBILITY |
| 1217 typename enable_if |
| 1218 < |
| 1219 !is_lvalue_reference<_Stream>::value && |
| 1220 is_base_of<ios_base, _Stream>::value, |
| 1221 _Stream&& |
| 1222 >::type |
| 1223 operator<<(_Stream&& __os, const _Tp& __x) |
| 1224 { |
| 1225 __os << __x; |
| 1226 return _VSTD::move(__os); |
| 1227 } |
| 1228 |
| 1229 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES |
| 1230 |
| 1231 template<class _CharT, class _Traits, class _Allocator> |
| 1232 basic_ostream<_CharT, _Traits>& |
| 1233 operator<<(basic_ostream<_CharT, _Traits>& __os, |
| 1234 const basic_string<_CharT, _Traits, _Allocator>& __str) |
| 1235 { |
| 1236 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1237 try |
| 1238 { |
| 1239 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1240 typename basic_ostream<_CharT, _Traits>::sentry __s(__os); |
| 1241 if (__s) |
| 1242 { |
| 1243 typedef ostreambuf_iterator<_CharT, _Traits> _Ip; |
| 1244 size_t __len = __str.size(); |
| 1245 if (__pad_and_output(_Ip(__os), |
| 1246 __str.data(), |
| 1247 (__os.flags() & ios_base::adjustfield) == ios_b
ase::left ? |
| 1248 __str.data() + __len : |
| 1249 __str.data(), |
| 1250 __str.data() + __len, |
| 1251 __os, |
| 1252 __os.fill()).failed()) |
| 1253 __os.setstate(ios_base::badbit | ios_base::failbit); |
| 1254 } |
| 1255 #ifndef _LIBCPP_NO_EXCEPTIONS |
| 1256 } |
| 1257 catch (...) |
| 1258 { |
| 1259 __os.__set_badbit_and_consider_rethrow(); |
| 1260 } |
| 1261 #endif // _LIBCPP_NO_EXCEPTIONS |
| 1262 return __os; |
| 1263 } |
| 1264 |
| 1265 template <class _CharT, class _Traits> |
| 1266 inline _LIBCPP_INLINE_VISIBILITY |
| 1267 basic_ostream<_CharT, _Traits>& |
| 1268 operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec) |
| 1269 { |
| 1270 return __os << __ec.category().name() << ':' << __ec.value(); |
| 1271 } |
| 1272 |
| 1273 template<class _CharT, class _Traits, class _Yp> |
| 1274 inline _LIBCPP_INLINE_VISIBILITY |
| 1275 basic_ostream<_CharT, _Traits>& |
| 1276 operator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p) |
| 1277 { |
| 1278 return __os << __p.get(); |
| 1279 } |
| 1280 |
| 1281 template <class _CharT, class _Traits, size_t _Size> |
| 1282 basic_ostream<_CharT, _Traits>& |
| 1283 operator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x) |
| 1284 { |
| 1285 return __os << __x.template to_string<_CharT, _Traits> |
| 1286 (use_facet<ctype<_CharT> >(__os.getloc()).widen('0'), |
| 1287 use_facet<ctype<_CharT> >(__os.getloc()).widen('1')); |
| 1288 } |
| 1289 |
| 1290 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ostream<char>) |
| 1291 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ostream<wchar_t>) |
| 1292 |
| 1293 _LIBCPP_END_NAMESPACE_STD |
| 1294 |
| 1295 #endif // _LIBCPP_OSTREAM |
OLD | NEW |