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