1// 1999-10-11 bkoz 2 3// Copyright (C) 1999-2015 Free Software Foundation, Inc. 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 8// Free Software Foundation; either version 3, or (at your option) 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 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20 21// 27.5.2 template class basic_streambuf 22 23#include <cstring> // for memset, memcmp 24#include <streambuf> 25#include <sstream> 26#include <ostream> 27#include <testsuite_hooks.h> 28 29// libstdc++/9424 30class Outbuf_2 : public std::streambuf 31{ 32 char buf[1]; 33 34public: 35 Outbuf_2() 36 { 37 setp(buf, buf + 1); 38 } 39 40 int_type overflow(int_type c) 41 { 42 int_type eof = traits_type::eof(); 43 44 if (pptr() < epptr()) 45 { 46 if (traits_type::eq_int_type(c, eof)) 47 return traits_type::not_eof(c); 48 49 *pptr() = traits_type::to_char_type(c); 50 pbump(1); 51 return c; 52 } 53 54 return eof; 55 } 56}; 57 58class Inbuf_2 : public std::streambuf 59{ 60 static const char buf[]; 61 const char* current; 62 int size; 63 64public: 65 Inbuf_2() 66 { 67 current = buf; 68 size = std::strlen(buf); 69 } 70 71 int_type underflow() 72 { 73 if (current < buf + size) 74 return traits_type::to_int_type(*current); 75 return traits_type::eof(); 76 } 77 78 int_type uflow() 79 { 80 if (current < buf + size) 81 return traits_type::to_int_type(*current++); 82 return traits_type::eof(); 83 } 84}; 85 86const char Inbuf_2::buf[] = "Atteivlis"; 87 88void test11() 89{ 90 bool test __attribute__((unused)) = true; 91 92 Inbuf_2 inbuf1; 93 std::istream is(&inbuf1); 94 Outbuf_2 outbuf1; 95 is >> &outbuf1; 96 VERIFY( inbuf1.sgetc() == 't' ); 97 VERIFY( is.good() ); 98} 99 100int main() 101{ 102 test11(); 103 return 0; 104} 105