]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/src/c++98/streambuf.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / src / c++98 / streambuf.cc
CommitLineData
6dd0a9c3 1// Stream buffer classes -*- C++ -*-
2
fbd26352 3// Copyright (C) 2004-2019 Free Software Foundation, Inc.
6dd0a9c3 4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
6bc9506f 8// Free Software Foundation; either version 3, or (at your option)
6dd0a9c3 9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
6bc9506f 16// Under Section 7 of GPL version 3, you are granted additional
17// permissions described in the GCC Runtime Library Exception, version
18// 3.1, as published by the Free Software Foundation.
6dd0a9c3 19
6bc9506f 20// You should have received a copy of the GNU General Public License and
21// a copy of the GCC Runtime Library Exception along with this program;
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23// <http://www.gnu.org/licenses/>.
6dd0a9c3 24
25//
26// ISO C++ 14882: 27.5 Stream buffers
27//
28
29#include <streambuf>
30
2948dd21 31namespace std _GLIBCXX_VISIBILITY(default)
32{
33_GLIBCXX_BEGIN_NAMESPACE_VERSION
1069247d 34
6dd0a9c3 35 template<>
36 streamsize
c22bf199 37 __copy_streambufs_eof(basic_streambuf<char>* __sbin,
38 basic_streambuf<char>* __sbout, bool& __ineof)
6dd0a9c3 39 {
40 typedef basic_streambuf<char>::traits_type traits_type;
41 streamsize __ret = 0;
c22bf199 42 __ineof = true;
6dd0a9c3 43 traits_type::int_type __c = __sbin->sgetc();
44 while (!traits_type::eq_int_type(__c, traits_type::eof()))
45 {
2321daa7 46 const streamsize __n = __sbin->egptr() - __sbin->gptr();
6dd0a9c3 47 if (__n > 1)
48 {
2321daa7 49 const streamsize __wrote = __sbout->sputn(__sbin->gptr(), __n);
5affa0ef 50 __sbin->__safe_gbump(__wrote);
6dd0a9c3 51 __ret += __wrote;
52 if (__wrote < __n)
c22bf199 53 {
54 __ineof = false;
55 break;
56 }
6dd0a9c3 57 __c = __sbin->underflow();
58 }
59 else
60 {
61 __c = __sbout->sputc(traits_type::to_char_type(__c));
62 if (traits_type::eq_int_type(__c, traits_type::eof()))
c22bf199 63 {
64 __ineof = false;
65 break;
66 }
6dd0a9c3 67 ++__ret;
68 __c = __sbin->snextc();
69 }
70 }
71 return __ret;
72 }
73
74#ifdef _GLIBCXX_USE_WCHAR_T
75 template<>
76 streamsize
c22bf199 77 __copy_streambufs_eof(basic_streambuf<wchar_t>* __sbin,
78 basic_streambuf<wchar_t>* __sbout, bool& __ineof)
6dd0a9c3 79 {
80 typedef basic_streambuf<wchar_t>::traits_type traits_type;
81 streamsize __ret = 0;
c22bf199 82 __ineof = true;
6dd0a9c3 83 traits_type::int_type __c = __sbin->sgetc();
84 while (!traits_type::eq_int_type(__c, traits_type::eof()))
85 {
2321daa7 86 const streamsize __n = __sbin->egptr() - __sbin->gptr();
6dd0a9c3 87 if (__n > 1)
88 {
2321daa7 89 const streamsize __wrote = __sbout->sputn(__sbin->gptr(), __n);
5affa0ef 90 __sbin->__safe_gbump(__wrote);
6dd0a9c3 91 __ret += __wrote;
92 if (__wrote < __n)
c22bf199 93 {
94 __ineof = false;
95 break;
96 }
6dd0a9c3 97 __c = __sbin->underflow();
98 }
99 else
100 {
101 __c = __sbout->sputc(traits_type::to_char_type(__c));
102 if (traits_type::eq_int_type(__c, traits_type::eof()))
c22bf199 103 {
104 __ineof = false;
105 break;
106 }
6dd0a9c3 107 ++__ret;
108 __c = __sbin->snextc();
109 }
110 }
111 return __ret;
112 }
113#endif
1069247d 114
2948dd21 115_GLIBCXX_END_NAMESPACE_VERSION
116} // namespace