1227825Stheraven// -*- C++ -*- 2227825Stheraven//===------------------------- streambuf ----------------------------------===// 3227825Stheraven// 4227825Stheraven// The LLVM Compiler Infrastructure 5227825Stheraven// 6227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open 7227825Stheraven// Source Licenses. See LICENSE.TXT for details. 8227825Stheraven// 9227825Stheraven//===----------------------------------------------------------------------===// 10227825Stheraven 11227825Stheraven#ifndef _LIBCPP_STEAMBUF 12227825Stheraven#define _LIBCPP_STEAMBUF 13227825Stheraven 14227825Stheraven/* 15227825Stheraven streambuf synopsis 16227825Stheraven 17227825Stheravennamespace std 18227825Stheraven{ 19227825Stheraven 20227825Stheraventemplate <class charT, class traits = char_traits<charT> > 21227825Stheravenclass basic_streambuf 22227825Stheraven{ 23227825Stheravenpublic: 24227825Stheraven // types: 25227825Stheraven typedef charT char_type; 26227825Stheraven typedef traits traits_type; 27227825Stheraven typedef typename traits_type::int_type int_type; 28227825Stheraven typedef typename traits_type::pos_type pos_type; 29227825Stheraven typedef typename traits_type::off_type off_type; 30227825Stheraven 31227825Stheraven virtual ~basic_streambuf(); 32227825Stheraven 33227825Stheraven // 27.6.2.2.1 locales: 34227825Stheraven locale pubimbue(const locale& loc); 35227825Stheraven locale getloc() const; 36227825Stheraven 37227825Stheraven // 27.6.2.2.2 buffer and positioning: 38227825Stheraven basic_streambuf* pubsetbuf(char_type* s, streamsize n); 39227825Stheraven pos_type pubseekoff(off_type off, ios_base::seekdir way, 40227825Stheraven ios_base::openmode which = ios_base::in | ios_base::out); 41227825Stheraven pos_type pubseekpos(pos_type sp, 42227825Stheraven ios_base::openmode which = ios_base::in | ios_base::out); 43227825Stheraven int pubsync(); 44227825Stheraven 45227825Stheraven // Get and put areas: 46227825Stheraven // 27.6.2.2.3 Get area: 47227825Stheraven streamsize in_avail(); 48227825Stheraven int_type snextc(); 49227825Stheraven int_type sbumpc(); 50227825Stheraven int_type sgetc(); 51227825Stheraven streamsize sgetn(char_type* s, streamsize n); 52227825Stheraven 53227825Stheraven // 27.6.2.2.4 Putback: 54227825Stheraven int_type sputbackc(char_type c); 55227825Stheraven int_type sungetc(); 56227825Stheraven 57227825Stheraven // 27.6.2.2.5 Put area: 58227825Stheraven int_type sputc(char_type c); 59227825Stheraven streamsize sputn(const char_type* s, streamsize n); 60227825Stheraven 61227825Stheravenprotected: 62227825Stheraven basic_streambuf(); 63227825Stheraven basic_streambuf(const basic_streambuf& rhs); 64227825Stheraven basic_streambuf& operator=(const basic_streambuf& rhs); 65227825Stheraven void swap(basic_streambuf& rhs); 66227825Stheraven 67227825Stheraven // 27.6.2.3.2 Get area: 68227825Stheraven char_type* eback() const; 69227825Stheraven char_type* gptr() const; 70227825Stheraven char_type* egptr() const; 71227825Stheraven void gbump(int n); 72227825Stheraven void setg(char_type* gbeg, char_type* gnext, char_type* gend); 73227825Stheraven 74227825Stheraven // 27.6.2.3.3 Put area: 75227825Stheraven char_type* pbase() const; 76227825Stheraven char_type* pptr() const; 77227825Stheraven char_type* epptr() const; 78227825Stheraven void pbump(int n); 79227825Stheraven void setp(char_type* pbeg, char_type* pend); 80227825Stheraven 81227825Stheraven // 27.6.2.4 virtual functions: 82227825Stheraven // 27.6.2.4.1 Locales: 83227825Stheraven virtual void imbue(const locale& loc); 84227825Stheraven 85227825Stheraven // 27.6.2.4.2 Buffer management and positioning: 86227825Stheraven virtual basic_streambuf* setbuf(char_type* s, streamsize n); 87227825Stheraven virtual pos_type seekoff(off_type off, ios_base::seekdir way, 88227825Stheraven ios_base::openmode which = ios_base::in | ios_base::out); 89227825Stheraven virtual pos_type seekpos(pos_type sp, 90227825Stheraven ios_base::openmode which = ios_base::in | ios_base::out); 91227825Stheraven virtual int sync(); 92227825Stheraven 93227825Stheraven // 27.6.2.4.3 Get area: 94227825Stheraven virtual streamsize showmanyc(); 95227825Stheraven virtual streamsize xsgetn(char_type* s, streamsize n); 96227825Stheraven virtual int_type underflow(); 97227825Stheraven virtual int_type uflow(); 98227825Stheraven 99227825Stheraven // 27.6.2.4.4 Putback: 100227825Stheraven virtual int_type pbackfail(int_type c = traits_type::eof()); 101227825Stheraven 102227825Stheraven // 27.6.2.4.5 Put area: 103227825Stheraven virtual streamsize xsputn(const char_type* s, streamsize n); 104227825Stheraven virtual int_type overflow (int_type c = traits_type::eof()); 105227825Stheraven}; 106227825Stheraven 107227825Stheraven} // std 108227825Stheraven 109227825Stheraven*/ 110227825Stheraven 111227825Stheraven#include <__config> 112227825Stheraven#include <iosfwd> 113227825Stheraven#include <ios> 114227825Stheraven 115227825Stheraven#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 116227825Stheraven#pragma GCC system_header 117227825Stheraven#endif 118227825Stheraven 119227825Stheraven_LIBCPP_BEGIN_NAMESPACE_STD 120227825Stheraven 121227825Stheraventemplate <class _CharT, class _Traits> 122261272Sdimclass _LIBCPP_TYPE_VIS_ONLY basic_streambuf 123227825Stheraven{ 124227825Stheravenpublic: 125227825Stheraven // types: 126227825Stheraven typedef _CharT char_type; 127227825Stheraven typedef _Traits traits_type; 128227825Stheraven typedef typename traits_type::int_type int_type; 129227825Stheraven typedef typename traits_type::pos_type pos_type; 130227825Stheraven typedef typename traits_type::off_type off_type; 131227825Stheraven 132227825Stheraven virtual ~basic_streambuf(); 133227825Stheraven 134227825Stheraven // 27.6.2.2.1 locales: 135227825Stheraven locale pubimbue(const locale& __loc); 136227825Stheraven locale getloc() const; 137227825Stheraven 138227825Stheraven // 27.6.2.2.2 buffer and positioning: 139227825Stheraven basic_streambuf* pubsetbuf(char_type* __s, streamsize __n); 140227825Stheraven pos_type pubseekoff(off_type __off, ios_base::seekdir __way, 141227825Stheraven ios_base::openmode __which = ios_base::in | ios_base::out); 142227825Stheraven pos_type pubseekpos(pos_type __sp, 143227825Stheraven ios_base::openmode __which = ios_base::in | ios_base::out); 144227825Stheraven int pubsync(); 145227825Stheraven 146227825Stheraven // Get and put areas: 147227825Stheraven // 27.6.2.2.3 Get area: 148227825Stheraven streamsize in_avail(); 149227825Stheraven int_type snextc(); 150227825Stheraven int_type sbumpc(); 151227825Stheraven int_type sgetc(); 152227825Stheraven streamsize sgetn(char_type* __s, streamsize __n); 153227825Stheraven 154227825Stheraven // 27.6.2.2.4 Putback: 155227825Stheraven int_type sputbackc(char_type __c); 156227825Stheraven int_type sungetc(); 157227825Stheraven 158227825Stheraven // 27.6.2.2.5 Put area: 159227825Stheraven int_type sputc(char_type __c); 160227825Stheraven streamsize sputn(const char_type* __s, streamsize __n); 161227825Stheraven 162227825Stheravenprotected: 163227825Stheraven basic_streambuf(); 164227825Stheraven basic_streambuf(const basic_streambuf& __rhs); 165227825Stheraven basic_streambuf& operator=(const basic_streambuf& __rhs); 166227825Stheraven void swap(basic_streambuf& __rhs); 167227825Stheraven 168227825Stheraven // 27.6.2.3.2 Get area: 169227825Stheraven _LIBCPP_ALWAYS_INLINE char_type* eback() const {return __binp_;} 170227825Stheraven _LIBCPP_ALWAYS_INLINE char_type* gptr() const {return __ninp_;} 171227825Stheraven _LIBCPP_ALWAYS_INLINE char_type* egptr() const {return __einp_;} 172227825Stheraven void gbump(int __n); 173227825Stheraven void setg(char_type* __gbeg, char_type* __gnext, char_type* __gend); 174227825Stheraven 175227825Stheraven // 27.6.2.3.3 Put area: 176227825Stheraven _LIBCPP_ALWAYS_INLINE char_type* pbase() const {return __bout_;} 177227825Stheraven _LIBCPP_ALWAYS_INLINE char_type* pptr() const {return __nout_;} 178227825Stheraven _LIBCPP_ALWAYS_INLINE char_type* epptr() const {return __eout_;} 179227825Stheraven void pbump(int __n); 180227825Stheraven void setp(char_type* __pbeg, char_type* __pend); 181227825Stheraven 182227825Stheraven // 27.6.2.4 virtual functions: 183227825Stheraven // 27.6.2.4.1 Locales: 184227825Stheraven virtual void imbue(const locale& __loc); 185227825Stheraven 186227825Stheraven // 27.6.2.4.2 Buffer management and positioning: 187227825Stheraven virtual basic_streambuf* setbuf(char_type* __s, streamsize __n); 188227825Stheraven virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, 189227825Stheraven ios_base::openmode __which = ios_base::in | ios_base::out); 190227825Stheraven virtual pos_type seekpos(pos_type __sp, 191227825Stheraven ios_base::openmode __which = ios_base::in | ios_base::out); 192227825Stheraven virtual int sync(); 193227825Stheraven 194227825Stheraven // 27.6.2.4.3 Get area: 195227825Stheraven virtual streamsize showmanyc(); 196227825Stheraven virtual streamsize xsgetn(char_type* __s, streamsize __n); 197227825Stheraven virtual int_type underflow(); 198227825Stheraven virtual int_type uflow(); 199227825Stheraven 200227825Stheraven // 27.6.2.4.4 Putback: 201227825Stheraven virtual int_type pbackfail(int_type __c = traits_type::eof()); 202227825Stheraven 203227825Stheraven // 27.6.2.4.5 Put area: 204227825Stheraven virtual streamsize xsputn(const char_type* __s, streamsize __n); 205227825Stheraven virtual int_type overflow(int_type __c = traits_type::eof()); 206227825Stheraven 207227825Stheravenprivate: 208227825Stheraven locale __loc_; 209227825Stheraven char_type* __binp_; 210227825Stheraven char_type* __ninp_; 211227825Stheraven char_type* __einp_; 212227825Stheraven char_type* __bout_; 213227825Stheraven char_type* __nout_; 214227825Stheraven char_type* __eout_; 215227825Stheraven}; 216227825Stheraven 217227825Stheraventemplate <class _CharT, class _Traits> 218227825Stheravenbasic_streambuf<_CharT, _Traits>::~basic_streambuf() 219227825Stheraven{ 220227825Stheraven} 221227825Stheraven 222227825Stheraventemplate <class _CharT, class _Traits> 223227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 224227825Stheravenlocale 225227825Stheravenbasic_streambuf<_CharT, _Traits>::pubimbue(const locale& __loc) 226227825Stheraven{ 227227825Stheraven imbue(__loc); 228227825Stheraven locale __r = __loc_; 229227825Stheraven __loc_ = __loc; 230227825Stheraven return __r; 231227825Stheraven} 232227825Stheraven 233227825Stheraventemplate <class _CharT, class _Traits> 234227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 235227825Stheravenlocale 236227825Stheravenbasic_streambuf<_CharT, _Traits>::getloc() const 237227825Stheraven{ 238227825Stheraven return __loc_; 239227825Stheraven} 240227825Stheraven 241227825Stheraventemplate <class _CharT, class _Traits> 242227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 243227825Stheravenbasic_streambuf<_CharT, _Traits>* 244227825Stheravenbasic_streambuf<_CharT, _Traits>::pubsetbuf(char_type* __s, streamsize __n) 245227825Stheraven{ 246227825Stheraven return setbuf(__s, __n); 247227825Stheraven} 248227825Stheraven 249227825Stheraventemplate <class _CharT, class _Traits> 250227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 251227825Stheraventypename basic_streambuf<_CharT, _Traits>::pos_type 252227825Stheravenbasic_streambuf<_CharT, _Traits>::pubseekoff(off_type __off, 253227825Stheraven ios_base::seekdir __way, 254227825Stheraven ios_base::openmode __which) 255227825Stheraven{ 256227825Stheraven return seekoff(__off, __way, __which); 257227825Stheraven} 258227825Stheraven 259227825Stheraventemplate <class _CharT, class _Traits> 260227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 261227825Stheraventypename basic_streambuf<_CharT, _Traits>::pos_type 262227825Stheravenbasic_streambuf<_CharT, _Traits>::pubseekpos(pos_type __sp, 263227825Stheraven ios_base::openmode __which) 264227825Stheraven{ 265227825Stheraven return seekpos(__sp, __which); 266227825Stheraven} 267227825Stheraven 268227825Stheraventemplate <class _CharT, class _Traits> 269227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 270227825Stheravenint 271227825Stheravenbasic_streambuf<_CharT, _Traits>::pubsync() 272227825Stheraven{ 273227825Stheraven return sync(); 274227825Stheraven} 275227825Stheraven 276227825Stheraventemplate <class _CharT, class _Traits> 277227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 278227825Stheravenstreamsize 279227825Stheravenbasic_streambuf<_CharT, _Traits>::in_avail() 280227825Stheraven{ 281227825Stheraven if (__ninp_ < __einp_) 282227825Stheraven return static_cast<streamsize>(__einp_ - __ninp_); 283227825Stheraven return showmanyc(); 284227825Stheraven} 285227825Stheraven 286227825Stheraventemplate <class _CharT, class _Traits> 287227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 288227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 289227825Stheravenbasic_streambuf<_CharT, _Traits>::snextc() 290227825Stheraven{ 291227825Stheraven if (sbumpc() == traits_type::eof()) 292227825Stheraven return traits_type::eof(); 293227825Stheraven return sgetc(); 294227825Stheraven} 295227825Stheraven 296227825Stheraventemplate <class _CharT, class _Traits> 297227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 298227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 299227825Stheravenbasic_streambuf<_CharT, _Traits>::sbumpc() 300227825Stheraven{ 301227825Stheraven if (__ninp_ == __einp_) 302227825Stheraven return uflow(); 303227825Stheraven return traits_type::to_int_type(*__ninp_++); 304227825Stheraven} 305227825Stheraven 306227825Stheraventemplate <class _CharT, class _Traits> 307227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 308227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 309227825Stheravenbasic_streambuf<_CharT, _Traits>::sgetc() 310227825Stheraven{ 311227825Stheraven if (__ninp_ == __einp_) 312227825Stheraven return underflow(); 313227825Stheraven return traits_type::to_int_type(*__ninp_); 314227825Stheraven} 315227825Stheraven 316227825Stheraventemplate <class _CharT, class _Traits> 317227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 318227825Stheravenstreamsize 319227825Stheravenbasic_streambuf<_CharT, _Traits>::sgetn(char_type* __s, streamsize __n) 320227825Stheraven{ 321227825Stheraven return xsgetn(__s, __n); 322227825Stheraven} 323227825Stheraven 324227825Stheraventemplate <class _CharT, class _Traits> 325227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 326227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 327227825Stheravenbasic_streambuf<_CharT, _Traits>::sputbackc(char_type __c) 328227825Stheraven{ 329227825Stheraven if (__binp_ == __ninp_ || !traits_type::eq(__c, __ninp_[-1])) 330227825Stheraven return pbackfail(traits_type::to_int_type(__c)); 331227825Stheraven return traits_type::to_int_type(*--__ninp_); 332227825Stheraven} 333227825Stheraven 334227825Stheraventemplate <class _CharT, class _Traits> 335227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 336227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 337227825Stheravenbasic_streambuf<_CharT, _Traits>::sungetc() 338227825Stheraven{ 339227825Stheraven if (__binp_ == __ninp_) 340227825Stheraven return pbackfail(); 341227825Stheraven return traits_type::to_int_type(*--__ninp_); 342227825Stheraven} 343227825Stheraven 344227825Stheraventemplate <class _CharT, class _Traits> 345227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 346227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 347227825Stheravenbasic_streambuf<_CharT, _Traits>::sputc(char_type __c) 348227825Stheraven{ 349227825Stheraven if (__nout_ == __eout_) 350227825Stheraven return overflow(traits_type::to_int_type(__c)); 351227825Stheraven *__nout_++ = __c; 352227825Stheraven return traits_type::to_int_type(__c); 353227825Stheraven} 354227825Stheraven 355227825Stheraventemplate <class _CharT, class _Traits> 356227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 357227825Stheravenstreamsize 358227825Stheravenbasic_streambuf<_CharT, _Traits>::sputn(const char_type* __s, streamsize __n) 359227825Stheraven{ 360227825Stheraven return xsputn(__s, __n); 361227825Stheraven} 362227825Stheraven 363227825Stheraventemplate <class _CharT, class _Traits> 364227825Stheravenbasic_streambuf<_CharT, _Traits>::basic_streambuf() 365227825Stheraven : __binp_(0), 366227825Stheraven __ninp_(0), 367227825Stheraven __einp_(0), 368227825Stheraven __bout_(0), 369227825Stheraven __nout_(0), 370227825Stheraven __eout_(0) 371227825Stheraven{ 372227825Stheraven} 373227825Stheraven 374227825Stheraventemplate <class _CharT, class _Traits> 375227825Stheravenbasic_streambuf<_CharT, _Traits>::basic_streambuf(const basic_streambuf& __sb) 376227825Stheraven : __loc_(__sb.__loc_), 377227825Stheraven __binp_(__sb.__binp_), 378227825Stheraven __ninp_(__sb.__ninp_), 379227825Stheraven __einp_(__sb.__einp_), 380227825Stheraven __bout_(__sb.__bout_), 381227825Stheraven __nout_(__sb.__nout_), 382227825Stheraven __eout_(__sb.__eout_) 383227825Stheraven{ 384227825Stheraven} 385227825Stheraven 386227825Stheraventemplate <class _CharT, class _Traits> 387227825Stheravenbasic_streambuf<_CharT, _Traits>& 388227825Stheravenbasic_streambuf<_CharT, _Traits>::operator=(const basic_streambuf& __sb) 389227825Stheraven{ 390227825Stheraven __loc_ = __sb.__loc_; 391227825Stheraven __binp_ = __sb.__binp_; 392227825Stheraven __ninp_ = __sb.__ninp_; 393227825Stheraven __einp_ = __sb.__einp_; 394227825Stheraven __bout_ = __sb.__bout_; 395227825Stheraven __nout_ = __sb.__nout_; 396227825Stheraven __eout_ = __sb.__eout_; 397227825Stheraven return *this; 398227825Stheraven} 399227825Stheraven 400227825Stheraventemplate <class _CharT, class _Traits> 401227825Stheravenvoid 402227825Stheravenbasic_streambuf<_CharT, _Traits>::swap(basic_streambuf& __sb) 403227825Stheraven{ 404227825Stheraven _VSTD::swap(__loc_, __sb.__loc_); 405227825Stheraven _VSTD::swap(__binp_, __sb.__binp_); 406227825Stheraven _VSTD::swap(__ninp_, __sb.__ninp_); 407227825Stheraven _VSTD::swap(__einp_, __sb.__einp_); 408227825Stheraven _VSTD::swap(__bout_, __sb.__bout_); 409227825Stheraven _VSTD::swap(__nout_, __sb.__nout_); 410227825Stheraven _VSTD::swap(__eout_, __sb.__eout_); 411227825Stheraven} 412227825Stheraven 413227825Stheraventemplate <class _CharT, class _Traits> 414227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 415227825Stheravenvoid 416227825Stheravenbasic_streambuf<_CharT, _Traits>::gbump(int __n) 417227825Stheraven{ 418227825Stheraven __ninp_ += __n; 419227825Stheraven} 420227825Stheraven 421227825Stheraventemplate <class _CharT, class _Traits> 422227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 423227825Stheravenvoid 424227825Stheravenbasic_streambuf<_CharT, _Traits>::setg(char_type* __gbeg, char_type* __gnext, 425227825Stheraven char_type* __gend) 426227825Stheraven{ 427227825Stheraven __binp_ = __gbeg; 428227825Stheraven __ninp_ = __gnext; 429227825Stheraven __einp_ = __gend; 430227825Stheraven} 431227825Stheraven 432227825Stheraventemplate <class _CharT, class _Traits> 433227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 434227825Stheravenvoid 435227825Stheravenbasic_streambuf<_CharT, _Traits>::pbump(int __n) 436227825Stheraven{ 437227825Stheraven __nout_ += __n; 438227825Stheraven} 439227825Stheraven 440227825Stheraventemplate <class _CharT, class _Traits> 441227825Stheraveninline _LIBCPP_INLINE_VISIBILITY 442227825Stheravenvoid 443227825Stheravenbasic_streambuf<_CharT, _Traits>::setp(char_type* __pbeg, char_type* __pend) 444227825Stheraven{ 445227825Stheraven __bout_ = __nout_ = __pbeg; 446227825Stheraven __eout_ = __pend; 447227825Stheraven} 448227825Stheraven 449227825Stheraventemplate <class _CharT, class _Traits> 450227825Stheravenvoid 451227825Stheravenbasic_streambuf<_CharT, _Traits>::imbue(const locale&) 452227825Stheraven{ 453227825Stheraven} 454227825Stheraven 455227825Stheraventemplate <class _CharT, class _Traits> 456227825Stheravenbasic_streambuf<_CharT, _Traits>* 457227825Stheravenbasic_streambuf<_CharT, _Traits>::setbuf(char_type*, streamsize) 458227825Stheraven{ 459227825Stheraven return this; 460227825Stheraven} 461227825Stheraven 462227825Stheraventemplate <class _CharT, class _Traits> 463227825Stheraventypename basic_streambuf<_CharT, _Traits>::pos_type 464232924Stheravenbasic_streambuf<_CharT, _Traits>::seekoff(off_type, ios_base::seekdir, 465232924Stheraven ios_base::openmode) 466227825Stheraven{ 467227825Stheraven return pos_type(off_type(-1)); 468227825Stheraven} 469227825Stheraven 470227825Stheraventemplate <class _CharT, class _Traits> 471227825Stheraventypename basic_streambuf<_CharT, _Traits>::pos_type 472232924Stheravenbasic_streambuf<_CharT, _Traits>::seekpos(pos_type, ios_base::openmode) 473227825Stheraven{ 474227825Stheraven return pos_type(off_type(-1)); 475227825Stheraven} 476227825Stheraven 477227825Stheraventemplate <class _CharT, class _Traits> 478227825Stheravenint 479227825Stheravenbasic_streambuf<_CharT, _Traits>::sync() 480227825Stheraven{ 481227825Stheraven return 0; 482227825Stheraven} 483227825Stheraven 484227825Stheraventemplate <class _CharT, class _Traits> 485227825Stheravenstreamsize 486227825Stheravenbasic_streambuf<_CharT, _Traits>::showmanyc() 487227825Stheraven{ 488227825Stheraven return 0; 489227825Stheraven} 490227825Stheraven 491227825Stheraventemplate <class _CharT, class _Traits> 492227825Stheravenstreamsize 493227825Stheravenbasic_streambuf<_CharT, _Traits>::xsgetn(char_type* __s, streamsize __n) 494227825Stheraven{ 495227825Stheraven const int_type __eof = traits_type::eof(); 496227825Stheraven int_type __c; 497227825Stheraven streamsize __i = 0; 498227825Stheraven for (;__i < __n; ++__i, ++__s) 499227825Stheraven { 500227825Stheraven if (__ninp_ < __einp_) 501227825Stheraven *__s = *__ninp_++; 502227825Stheraven else if ((__c = uflow()) != __eof) 503227825Stheraven *__s = traits_type::to_char_type(__c); 504227825Stheraven else 505227825Stheraven break; 506227825Stheraven } 507227825Stheraven return __i; 508227825Stheraven} 509227825Stheraven 510227825Stheraventemplate <class _CharT, class _Traits> 511227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 512227825Stheravenbasic_streambuf<_CharT, _Traits>::underflow() 513227825Stheraven{ 514227825Stheraven return traits_type::eof(); 515227825Stheraven} 516227825Stheraven 517227825Stheraventemplate <class _CharT, class _Traits> 518227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 519227825Stheravenbasic_streambuf<_CharT, _Traits>::uflow() 520227825Stheraven{ 521227825Stheraven if (underflow() == traits_type::eof()) 522227825Stheraven return traits_type::eof(); 523227825Stheraven return traits_type::to_int_type(*__ninp_++); 524227825Stheraven} 525227825Stheraven 526227825Stheraventemplate <class _CharT, class _Traits> 527227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 528227825Stheravenbasic_streambuf<_CharT, _Traits>::pbackfail(int_type) 529227825Stheraven{ 530227825Stheraven return traits_type::eof(); 531227825Stheraven} 532227825Stheraven 533227825Stheraventemplate <class _CharT, class _Traits> 534227825Stheravenstreamsize 535227825Stheravenbasic_streambuf<_CharT, _Traits>::xsputn(const char_type* __s, streamsize __n) 536227825Stheraven{ 537227825Stheraven streamsize __i = 0; 538227825Stheraven int_type __eof = traits_type::eof(); 539288943Sdim while( __i < __n) 540227825Stheraven { 541288943Sdim if (__nout_ >= __eout_) 542288943Sdim { 543288943Sdim if (overflow(traits_type::to_int_type(*__s)) == __eof) 544288943Sdim break; 545288943Sdim ++__s; 546288943Sdim ++__i; 547288943Sdim } 548288943Sdim else 549288943Sdim { 550288943Sdim streamsize __chunk_size = _VSTD::min(__eout_ - __nout_, __n - __i); 551288943Sdim traits_type::copy(__nout_, __s, __chunk_size); 552288943Sdim __nout_ += __chunk_size; 553288943Sdim __s += __chunk_size; 554288943Sdim __i += __chunk_size; 555288943Sdim } 556227825Stheraven } 557227825Stheraven return __i; 558227825Stheraven} 559227825Stheraven 560227825Stheraventemplate <class _CharT, class _Traits> 561227825Stheraventypename basic_streambuf<_CharT, _Traits>::int_type 562232924Stheravenbasic_streambuf<_CharT, _Traits>::overflow(int_type) 563227825Stheraven{ 564227825Stheraven return traits_type::eof(); 565227825Stheraven} 566227825Stheraven 567261272Sdim_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_streambuf<char>) 568261272Sdim_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_streambuf<wchar_t>) 569227825Stheraven 570261272Sdim_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ios<char>) 571261272Sdim_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ios<wchar_t>) 572227825Stheraven 573227825Stheraven_LIBCPP_END_NAMESPACE_STD 574227825Stheraven 575227825Stheraven#endif // _LIBCPP_STEAMBUF 576