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