1*4d6fc14bSjoerg// -*- C++ -*- 2*4d6fc14bSjoerg//===------------------------- streambuf ----------------------------------===// 3*4d6fc14bSjoerg// 4*4d6fc14bSjoerg// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*4d6fc14bSjoerg// See https://llvm.org/LICENSE.txt for license information. 6*4d6fc14bSjoerg// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*4d6fc14bSjoerg// 8*4d6fc14bSjoerg//===----------------------------------------------------------------------===// 9*4d6fc14bSjoerg 10*4d6fc14bSjoerg#ifndef _LIBCPP_STREAMBUF 11*4d6fc14bSjoerg#define _LIBCPP_STREAMBUF 12*4d6fc14bSjoerg 13*4d6fc14bSjoerg/* 14*4d6fc14bSjoerg streambuf synopsis 15*4d6fc14bSjoerg 16*4d6fc14bSjoergnamespace std 17*4d6fc14bSjoerg{ 18*4d6fc14bSjoerg 19*4d6fc14bSjoergtemplate <class charT, class traits = char_traits<charT> > 20*4d6fc14bSjoergclass basic_streambuf 21*4d6fc14bSjoerg{ 22*4d6fc14bSjoergpublic: 23*4d6fc14bSjoerg // types: 24*4d6fc14bSjoerg typedef charT char_type; 25*4d6fc14bSjoerg typedef traits traits_type; 26*4d6fc14bSjoerg typedef typename traits_type::int_type int_type; 27*4d6fc14bSjoerg typedef typename traits_type::pos_type pos_type; 28*4d6fc14bSjoerg typedef typename traits_type::off_type off_type; 29*4d6fc14bSjoerg 30*4d6fc14bSjoerg virtual ~basic_streambuf(); 31*4d6fc14bSjoerg 32*4d6fc14bSjoerg // 27.6.2.2.1 locales: 33*4d6fc14bSjoerg locale pubimbue(const locale& loc); 34*4d6fc14bSjoerg locale getloc() const; 35*4d6fc14bSjoerg 36*4d6fc14bSjoerg // 27.6.2.2.2 buffer and positioning: 37*4d6fc14bSjoerg basic_streambuf* pubsetbuf(char_type* s, streamsize n); 38*4d6fc14bSjoerg pos_type pubseekoff(off_type off, ios_base::seekdir way, 39*4d6fc14bSjoerg ios_base::openmode which = ios_base::in | ios_base::out); 40*4d6fc14bSjoerg pos_type pubseekpos(pos_type sp, 41*4d6fc14bSjoerg ios_base::openmode which = ios_base::in | ios_base::out); 42*4d6fc14bSjoerg int pubsync(); 43*4d6fc14bSjoerg 44*4d6fc14bSjoerg // Get and put areas: 45*4d6fc14bSjoerg // 27.6.2.2.3 Get area: 46*4d6fc14bSjoerg streamsize in_avail(); 47*4d6fc14bSjoerg int_type snextc(); 48*4d6fc14bSjoerg int_type sbumpc(); 49*4d6fc14bSjoerg int_type sgetc(); 50*4d6fc14bSjoerg streamsize sgetn(char_type* s, streamsize n); 51*4d6fc14bSjoerg 52*4d6fc14bSjoerg // 27.6.2.2.4 Putback: 53*4d6fc14bSjoerg int_type sputbackc(char_type c); 54*4d6fc14bSjoerg int_type sungetc(); 55*4d6fc14bSjoerg 56*4d6fc14bSjoerg // 27.6.2.2.5 Put area: 57*4d6fc14bSjoerg int_type sputc(char_type c); 58*4d6fc14bSjoerg streamsize sputn(const char_type* s, streamsize n); 59*4d6fc14bSjoerg 60*4d6fc14bSjoergprotected: 61*4d6fc14bSjoerg basic_streambuf(); 62*4d6fc14bSjoerg basic_streambuf(const basic_streambuf& rhs); 63*4d6fc14bSjoerg basic_streambuf& operator=(const basic_streambuf& rhs); 64*4d6fc14bSjoerg void swap(basic_streambuf& rhs); 65*4d6fc14bSjoerg 66*4d6fc14bSjoerg // 27.6.2.3.2 Get area: 67*4d6fc14bSjoerg char_type* eback() const; 68*4d6fc14bSjoerg char_type* gptr() const; 69*4d6fc14bSjoerg char_type* egptr() const; 70*4d6fc14bSjoerg void gbump(int n); 71*4d6fc14bSjoerg void setg(char_type* gbeg, char_type* gnext, char_type* gend); 72*4d6fc14bSjoerg 73*4d6fc14bSjoerg // 27.6.2.3.3 Put area: 74*4d6fc14bSjoerg char_type* pbase() const; 75*4d6fc14bSjoerg char_type* pptr() const; 76*4d6fc14bSjoerg char_type* epptr() const; 77*4d6fc14bSjoerg void pbump(int n); 78*4d6fc14bSjoerg void setp(char_type* pbeg, char_type* pend); 79*4d6fc14bSjoerg 80*4d6fc14bSjoerg // 27.6.2.4 virtual functions: 81*4d6fc14bSjoerg // 27.6.2.4.1 Locales: 82*4d6fc14bSjoerg virtual void imbue(const locale& loc); 83*4d6fc14bSjoerg 84*4d6fc14bSjoerg // 27.6.2.4.2 Buffer management and positioning: 85*4d6fc14bSjoerg virtual basic_streambuf* setbuf(char_type* s, streamsize n); 86*4d6fc14bSjoerg virtual pos_type seekoff(off_type off, ios_base::seekdir way, 87*4d6fc14bSjoerg ios_base::openmode which = ios_base::in | ios_base::out); 88*4d6fc14bSjoerg virtual pos_type seekpos(pos_type sp, 89*4d6fc14bSjoerg ios_base::openmode which = ios_base::in | ios_base::out); 90*4d6fc14bSjoerg virtual int sync(); 91*4d6fc14bSjoerg 92*4d6fc14bSjoerg // 27.6.2.4.3 Get area: 93*4d6fc14bSjoerg virtual streamsize showmanyc(); 94*4d6fc14bSjoerg virtual streamsize xsgetn(char_type* s, streamsize n); 95*4d6fc14bSjoerg virtual int_type underflow(); 96*4d6fc14bSjoerg virtual int_type uflow(); 97*4d6fc14bSjoerg 98*4d6fc14bSjoerg // 27.6.2.4.4 Putback: 99*4d6fc14bSjoerg virtual int_type pbackfail(int_type c = traits_type::eof()); 100*4d6fc14bSjoerg 101*4d6fc14bSjoerg // 27.6.2.4.5 Put area: 102*4d6fc14bSjoerg virtual streamsize xsputn(const char_type* s, streamsize n); 103*4d6fc14bSjoerg virtual int_type overflow (int_type c = traits_type::eof()); 104*4d6fc14bSjoerg}; 105*4d6fc14bSjoerg 106*4d6fc14bSjoerg} // std 107*4d6fc14bSjoerg 108*4d6fc14bSjoerg*/ 109*4d6fc14bSjoerg 110*4d6fc14bSjoerg#include <__config> 111*4d6fc14bSjoerg#include <iosfwd> 112*4d6fc14bSjoerg#include <ios> 113*4d6fc14bSjoerg 114*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 115*4d6fc14bSjoerg#pragma GCC system_header 116*4d6fc14bSjoerg#endif 117*4d6fc14bSjoerg 118*4d6fc14bSjoerg_LIBCPP_PUSH_MACROS 119*4d6fc14bSjoerg#include <__undef_macros> 120*4d6fc14bSjoerg 121*4d6fc14bSjoerg_LIBCPP_BEGIN_NAMESPACE_STD 122*4d6fc14bSjoerg 123*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 124*4d6fc14bSjoergclass _LIBCPP_TEMPLATE_VIS basic_streambuf 125*4d6fc14bSjoerg{ 126*4d6fc14bSjoergpublic: 127*4d6fc14bSjoerg // types: 128*4d6fc14bSjoerg typedef _CharT char_type; 129*4d6fc14bSjoerg typedef _Traits traits_type; 130*4d6fc14bSjoerg typedef typename traits_type::int_type int_type; 131*4d6fc14bSjoerg typedef typename traits_type::pos_type pos_type; 132*4d6fc14bSjoerg typedef typename traits_type::off_type off_type; 133*4d6fc14bSjoerg 134*4d6fc14bSjoerg static_assert((is_same<_CharT, typename traits_type::char_type>::value), 135*4d6fc14bSjoerg "traits_type::char_type must be the same type as CharT"); 136*4d6fc14bSjoerg 137*4d6fc14bSjoerg virtual ~basic_streambuf(); 138*4d6fc14bSjoerg 139*4d6fc14bSjoerg // 27.6.2.2.1 locales: 140*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 141*4d6fc14bSjoerg locale pubimbue(const locale& __loc) { 142*4d6fc14bSjoerg imbue(__loc); 143*4d6fc14bSjoerg locale __r = __loc_; 144*4d6fc14bSjoerg __loc_ = __loc; 145*4d6fc14bSjoerg return __r; 146*4d6fc14bSjoerg } 147*4d6fc14bSjoerg 148*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 149*4d6fc14bSjoerg locale getloc() const { return __loc_; } 150*4d6fc14bSjoerg 151*4d6fc14bSjoerg // 27.6.2.2.2 buffer and positioning: 152*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 153*4d6fc14bSjoerg basic_streambuf* pubsetbuf(char_type* __s, streamsize __n) 154*4d6fc14bSjoerg { return setbuf(__s, __n); } 155*4d6fc14bSjoerg 156*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 157*4d6fc14bSjoerg pos_type pubseekoff(off_type __off, ios_base::seekdir __way, 158*4d6fc14bSjoerg ios_base::openmode __which = ios_base::in | ios_base::out) 159*4d6fc14bSjoerg { return seekoff(__off, __way, __which); } 160*4d6fc14bSjoerg 161*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 162*4d6fc14bSjoerg pos_type pubseekpos(pos_type __sp, 163*4d6fc14bSjoerg ios_base::openmode __which = ios_base::in | ios_base::out) 164*4d6fc14bSjoerg { return seekpos(__sp, __which); } 165*4d6fc14bSjoerg 166*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 167*4d6fc14bSjoerg int pubsync() { return sync(); } 168*4d6fc14bSjoerg 169*4d6fc14bSjoerg // Get and put areas: 170*4d6fc14bSjoerg // 27.6.2.2.3 Get area: 171*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 172*4d6fc14bSjoerg streamsize in_avail() { 173*4d6fc14bSjoerg if (__ninp_ < __einp_) 174*4d6fc14bSjoerg return static_cast<streamsize>(__einp_ - __ninp_); 175*4d6fc14bSjoerg return showmanyc(); 176*4d6fc14bSjoerg } 177*4d6fc14bSjoerg 178*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 179*4d6fc14bSjoerg int_type snextc() { 180*4d6fc14bSjoerg if (sbumpc() == traits_type::eof()) 181*4d6fc14bSjoerg return traits_type::eof(); 182*4d6fc14bSjoerg return sgetc(); 183*4d6fc14bSjoerg } 184*4d6fc14bSjoerg 185*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 186*4d6fc14bSjoerg int_type sbumpc() { 187*4d6fc14bSjoerg if (__ninp_ == __einp_) 188*4d6fc14bSjoerg return uflow(); 189*4d6fc14bSjoerg return traits_type::to_int_type(*__ninp_++); 190*4d6fc14bSjoerg } 191*4d6fc14bSjoerg 192*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 193*4d6fc14bSjoerg int_type sgetc() { 194*4d6fc14bSjoerg if (__ninp_ == __einp_) 195*4d6fc14bSjoerg return underflow(); 196*4d6fc14bSjoerg return traits_type::to_int_type(*__ninp_); 197*4d6fc14bSjoerg } 198*4d6fc14bSjoerg 199*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 200*4d6fc14bSjoerg streamsize sgetn(char_type* __s, streamsize __n) 201*4d6fc14bSjoerg { return xsgetn(__s, __n); } 202*4d6fc14bSjoerg 203*4d6fc14bSjoerg // 27.6.2.2.4 Putback: 204*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 205*4d6fc14bSjoerg int_type sputbackc(char_type __c) { 206*4d6fc14bSjoerg if (__binp_ == __ninp_ || !traits_type::eq(__c, __ninp_[-1])) 207*4d6fc14bSjoerg return pbackfail(traits_type::to_int_type(__c)); 208*4d6fc14bSjoerg return traits_type::to_int_type(*--__ninp_); 209*4d6fc14bSjoerg } 210*4d6fc14bSjoerg 211*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 212*4d6fc14bSjoerg int_type sungetc() { 213*4d6fc14bSjoerg if (__binp_ == __ninp_) 214*4d6fc14bSjoerg return pbackfail(); 215*4d6fc14bSjoerg return traits_type::to_int_type(*--__ninp_); 216*4d6fc14bSjoerg } 217*4d6fc14bSjoerg 218*4d6fc14bSjoerg // 27.6.2.2.5 Put area: 219*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 220*4d6fc14bSjoerg int_type sputc(char_type __c) { 221*4d6fc14bSjoerg if (__nout_ == __eout_) 222*4d6fc14bSjoerg return overflow(traits_type::to_int_type(__c)); 223*4d6fc14bSjoerg *__nout_++ = __c; 224*4d6fc14bSjoerg return traits_type::to_int_type(__c); 225*4d6fc14bSjoerg } 226*4d6fc14bSjoerg 227*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 228*4d6fc14bSjoerg streamsize sputn(const char_type* __s, streamsize __n) 229*4d6fc14bSjoerg { return xsputn(__s, __n); } 230*4d6fc14bSjoerg 231*4d6fc14bSjoergprotected: 232*4d6fc14bSjoerg basic_streambuf(); 233*4d6fc14bSjoerg basic_streambuf(const basic_streambuf& __rhs); 234*4d6fc14bSjoerg basic_streambuf& operator=(const basic_streambuf& __rhs); 235*4d6fc14bSjoerg void swap(basic_streambuf& __rhs); 236*4d6fc14bSjoerg 237*4d6fc14bSjoerg // 27.6.2.3.2 Get area: 238*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY char_type* eback() const {return __binp_;} 239*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY char_type* gptr() const {return __ninp_;} 240*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY char_type* egptr() const {return __einp_;} 241*4d6fc14bSjoerg 242*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 243*4d6fc14bSjoerg void gbump(int __n) { __ninp_ += __n; } 244*4d6fc14bSjoerg 245*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 246*4d6fc14bSjoerg void setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) { 247*4d6fc14bSjoerg __binp_ = __gbeg; 248*4d6fc14bSjoerg __ninp_ = __gnext; 249*4d6fc14bSjoerg __einp_ = __gend; 250*4d6fc14bSjoerg } 251*4d6fc14bSjoerg 252*4d6fc14bSjoerg // 27.6.2.3.3 Put area: 253*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY char_type* pbase() const {return __bout_;} 254*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY char_type* pptr() const {return __nout_;} 255*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY char_type* epptr() const {return __eout_;} 256*4d6fc14bSjoerg 257*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 258*4d6fc14bSjoerg void pbump(int __n) { __nout_ += __n; } 259*4d6fc14bSjoerg 260*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 261*4d6fc14bSjoerg void __pbump(streamsize __n) { __nout_ += __n; } 262*4d6fc14bSjoerg 263*4d6fc14bSjoerg inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 264*4d6fc14bSjoerg void setp(char_type* __pbeg, char_type* __pend) { 265*4d6fc14bSjoerg __bout_ = __nout_ = __pbeg; 266*4d6fc14bSjoerg __eout_ = __pend; 267*4d6fc14bSjoerg } 268*4d6fc14bSjoerg 269*4d6fc14bSjoerg // 27.6.2.4 virtual functions: 270*4d6fc14bSjoerg // 27.6.2.4.1 Locales: 271*4d6fc14bSjoerg virtual void imbue(const locale& __loc); 272*4d6fc14bSjoerg 273*4d6fc14bSjoerg // 27.6.2.4.2 Buffer management and positioning: 274*4d6fc14bSjoerg virtual basic_streambuf* setbuf(char_type* __s, streamsize __n); 275*4d6fc14bSjoerg virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, 276*4d6fc14bSjoerg ios_base::openmode __which = ios_base::in | ios_base::out); 277*4d6fc14bSjoerg virtual pos_type seekpos(pos_type __sp, 278*4d6fc14bSjoerg ios_base::openmode __which = ios_base::in | ios_base::out); 279*4d6fc14bSjoerg virtual int sync(); 280*4d6fc14bSjoerg 281*4d6fc14bSjoerg // 27.6.2.4.3 Get area: 282*4d6fc14bSjoerg virtual streamsize showmanyc(); 283*4d6fc14bSjoerg virtual streamsize xsgetn(char_type* __s, streamsize __n); 284*4d6fc14bSjoerg virtual int_type underflow(); 285*4d6fc14bSjoerg virtual int_type uflow(); 286*4d6fc14bSjoerg 287*4d6fc14bSjoerg // 27.6.2.4.4 Putback: 288*4d6fc14bSjoerg virtual int_type pbackfail(int_type __c = traits_type::eof()); 289*4d6fc14bSjoerg 290*4d6fc14bSjoerg // 27.6.2.4.5 Put area: 291*4d6fc14bSjoerg virtual streamsize xsputn(const char_type* __s, streamsize __n); 292*4d6fc14bSjoerg virtual int_type overflow(int_type __c = traits_type::eof()); 293*4d6fc14bSjoerg 294*4d6fc14bSjoergprivate: 295*4d6fc14bSjoerg locale __loc_; 296*4d6fc14bSjoerg char_type* __binp_; 297*4d6fc14bSjoerg char_type* __ninp_; 298*4d6fc14bSjoerg char_type* __einp_; 299*4d6fc14bSjoerg char_type* __bout_; 300*4d6fc14bSjoerg char_type* __nout_; 301*4d6fc14bSjoerg char_type* __eout_; 302*4d6fc14bSjoerg}; 303*4d6fc14bSjoerg 304*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 305*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::~basic_streambuf() 306*4d6fc14bSjoerg{ 307*4d6fc14bSjoerg} 308*4d6fc14bSjoerg 309*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 310*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::basic_streambuf() 311*4d6fc14bSjoerg : __binp_(nullptr), 312*4d6fc14bSjoerg __ninp_(nullptr), 313*4d6fc14bSjoerg __einp_(nullptr), 314*4d6fc14bSjoerg __bout_(nullptr), 315*4d6fc14bSjoerg __nout_(nullptr), 316*4d6fc14bSjoerg __eout_(nullptr) 317*4d6fc14bSjoerg{ 318*4d6fc14bSjoerg} 319*4d6fc14bSjoerg 320*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 321*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::basic_streambuf(const basic_streambuf& __sb) 322*4d6fc14bSjoerg : __loc_(__sb.__loc_), 323*4d6fc14bSjoerg __binp_(__sb.__binp_), 324*4d6fc14bSjoerg __ninp_(__sb.__ninp_), 325*4d6fc14bSjoerg __einp_(__sb.__einp_), 326*4d6fc14bSjoerg __bout_(__sb.__bout_), 327*4d6fc14bSjoerg __nout_(__sb.__nout_), 328*4d6fc14bSjoerg __eout_(__sb.__eout_) 329*4d6fc14bSjoerg{ 330*4d6fc14bSjoerg} 331*4d6fc14bSjoerg 332*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 333*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>& 334*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::operator=(const basic_streambuf& __sb) 335*4d6fc14bSjoerg{ 336*4d6fc14bSjoerg __loc_ = __sb.__loc_; 337*4d6fc14bSjoerg __binp_ = __sb.__binp_; 338*4d6fc14bSjoerg __ninp_ = __sb.__ninp_; 339*4d6fc14bSjoerg __einp_ = __sb.__einp_; 340*4d6fc14bSjoerg __bout_ = __sb.__bout_; 341*4d6fc14bSjoerg __nout_ = __sb.__nout_; 342*4d6fc14bSjoerg __eout_ = __sb.__eout_; 343*4d6fc14bSjoerg return *this; 344*4d6fc14bSjoerg} 345*4d6fc14bSjoerg 346*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 347*4d6fc14bSjoergvoid 348*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::swap(basic_streambuf& __sb) 349*4d6fc14bSjoerg{ 350*4d6fc14bSjoerg _VSTD::swap(__loc_, __sb.__loc_); 351*4d6fc14bSjoerg _VSTD::swap(__binp_, __sb.__binp_); 352*4d6fc14bSjoerg _VSTD::swap(__ninp_, __sb.__ninp_); 353*4d6fc14bSjoerg _VSTD::swap(__einp_, __sb.__einp_); 354*4d6fc14bSjoerg _VSTD::swap(__bout_, __sb.__bout_); 355*4d6fc14bSjoerg _VSTD::swap(__nout_, __sb.__nout_); 356*4d6fc14bSjoerg _VSTD::swap(__eout_, __sb.__eout_); 357*4d6fc14bSjoerg} 358*4d6fc14bSjoerg 359*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 360*4d6fc14bSjoergvoid 361*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::imbue(const locale&) 362*4d6fc14bSjoerg{ 363*4d6fc14bSjoerg} 364*4d6fc14bSjoerg 365*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 366*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>* 367*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::setbuf(char_type*, streamsize) 368*4d6fc14bSjoerg{ 369*4d6fc14bSjoerg return this; 370*4d6fc14bSjoerg} 371*4d6fc14bSjoerg 372*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 373*4d6fc14bSjoergtypename basic_streambuf<_CharT, _Traits>::pos_type 374*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::seekoff(off_type, ios_base::seekdir, 375*4d6fc14bSjoerg ios_base::openmode) 376*4d6fc14bSjoerg{ 377*4d6fc14bSjoerg return pos_type(off_type(-1)); 378*4d6fc14bSjoerg} 379*4d6fc14bSjoerg 380*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 381*4d6fc14bSjoergtypename basic_streambuf<_CharT, _Traits>::pos_type 382*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::seekpos(pos_type, ios_base::openmode) 383*4d6fc14bSjoerg{ 384*4d6fc14bSjoerg return pos_type(off_type(-1)); 385*4d6fc14bSjoerg} 386*4d6fc14bSjoerg 387*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 388*4d6fc14bSjoergint 389*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::sync() 390*4d6fc14bSjoerg{ 391*4d6fc14bSjoerg return 0; 392*4d6fc14bSjoerg} 393*4d6fc14bSjoerg 394*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 395*4d6fc14bSjoergstreamsize 396*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::showmanyc() 397*4d6fc14bSjoerg{ 398*4d6fc14bSjoerg return 0; 399*4d6fc14bSjoerg} 400*4d6fc14bSjoerg 401*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 402*4d6fc14bSjoergstreamsize 403*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::xsgetn(char_type* __s, streamsize __n) 404*4d6fc14bSjoerg{ 405*4d6fc14bSjoerg const int_type __eof = traits_type::eof(); 406*4d6fc14bSjoerg int_type __c; 407*4d6fc14bSjoerg streamsize __i = 0; 408*4d6fc14bSjoerg while(__i < __n) 409*4d6fc14bSjoerg { 410*4d6fc14bSjoerg if (__ninp_ < __einp_) 411*4d6fc14bSjoerg { 412*4d6fc14bSjoerg const streamsize __len = _VSTD::min(static_cast<streamsize>(INT_MAX), 413*4d6fc14bSjoerg _VSTD::min(__einp_ - __ninp_, __n - __i)); 414*4d6fc14bSjoerg traits_type::copy(__s, __ninp_, __len); 415*4d6fc14bSjoerg __s += __len; 416*4d6fc14bSjoerg __i += __len; 417*4d6fc14bSjoerg this->gbump(__len); 418*4d6fc14bSjoerg } 419*4d6fc14bSjoerg else if ((__c = uflow()) != __eof) 420*4d6fc14bSjoerg { 421*4d6fc14bSjoerg *__s = traits_type::to_char_type(__c); 422*4d6fc14bSjoerg ++__s; 423*4d6fc14bSjoerg ++__i; 424*4d6fc14bSjoerg } 425*4d6fc14bSjoerg else 426*4d6fc14bSjoerg break; 427*4d6fc14bSjoerg } 428*4d6fc14bSjoerg return __i; 429*4d6fc14bSjoerg} 430*4d6fc14bSjoerg 431*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 432*4d6fc14bSjoergtypename basic_streambuf<_CharT, _Traits>::int_type 433*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::underflow() 434*4d6fc14bSjoerg{ 435*4d6fc14bSjoerg return traits_type::eof(); 436*4d6fc14bSjoerg} 437*4d6fc14bSjoerg 438*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 439*4d6fc14bSjoergtypename basic_streambuf<_CharT, _Traits>::int_type 440*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::uflow() 441*4d6fc14bSjoerg{ 442*4d6fc14bSjoerg if (underflow() == traits_type::eof()) 443*4d6fc14bSjoerg return traits_type::eof(); 444*4d6fc14bSjoerg return traits_type::to_int_type(*__ninp_++); 445*4d6fc14bSjoerg} 446*4d6fc14bSjoerg 447*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 448*4d6fc14bSjoergtypename basic_streambuf<_CharT, _Traits>::int_type 449*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::pbackfail(int_type) 450*4d6fc14bSjoerg{ 451*4d6fc14bSjoerg return traits_type::eof(); 452*4d6fc14bSjoerg} 453*4d6fc14bSjoerg 454*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 455*4d6fc14bSjoergstreamsize 456*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::xsputn(const char_type* __s, streamsize __n) 457*4d6fc14bSjoerg{ 458*4d6fc14bSjoerg streamsize __i = 0; 459*4d6fc14bSjoerg int_type __eof = traits_type::eof(); 460*4d6fc14bSjoerg while( __i < __n) 461*4d6fc14bSjoerg { 462*4d6fc14bSjoerg if (__nout_ >= __eout_) 463*4d6fc14bSjoerg { 464*4d6fc14bSjoerg if (overflow(traits_type::to_int_type(*__s)) == __eof) 465*4d6fc14bSjoerg break; 466*4d6fc14bSjoerg ++__s; 467*4d6fc14bSjoerg ++__i; 468*4d6fc14bSjoerg } 469*4d6fc14bSjoerg else 470*4d6fc14bSjoerg { 471*4d6fc14bSjoerg streamsize __chunk_size = _VSTD::min(__eout_ - __nout_, __n - __i); 472*4d6fc14bSjoerg traits_type::copy(__nout_, __s, __chunk_size); 473*4d6fc14bSjoerg __nout_ += __chunk_size; 474*4d6fc14bSjoerg __s += __chunk_size; 475*4d6fc14bSjoerg __i += __chunk_size; 476*4d6fc14bSjoerg } 477*4d6fc14bSjoerg } 478*4d6fc14bSjoerg return __i; 479*4d6fc14bSjoerg} 480*4d6fc14bSjoerg 481*4d6fc14bSjoergtemplate <class _CharT, class _Traits> 482*4d6fc14bSjoergtypename basic_streambuf<_CharT, _Traits>::int_type 483*4d6fc14bSjoergbasic_streambuf<_CharT, _Traits>::overflow(int_type) 484*4d6fc14bSjoerg{ 485*4d6fc14bSjoerg return traits_type::eof(); 486*4d6fc14bSjoerg} 487*4d6fc14bSjoerg 488*4d6fc14bSjoerg_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_streambuf<char>) 489*4d6fc14bSjoerg_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_streambuf<wchar_t>) 490*4d6fc14bSjoerg 491*4d6fc14bSjoerg_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<char>) 492*4d6fc14bSjoerg_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<wchar_t>) 493*4d6fc14bSjoerg 494*4d6fc14bSjoerg_LIBCPP_END_NAMESPACE_STD 495*4d6fc14bSjoerg 496*4d6fc14bSjoerg_LIBCPP_POP_MACROS 497*4d6fc14bSjoerg 498*4d6fc14bSjoerg#endif // _LIBCPP_STREAMBUF 499