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