1// 1999-10-11 bkoz 2 3// Copyright (C) 1999, 2000, 2001, 2002, 2003 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 2, 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 COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// As a special exception, you may use this file as part of a free software 22// library without restriction. Specifically, if other files instantiate 23// templates or use macros or inline functions from this file, or you compile 24// this file and link it with other files to produce an executable, this 25// file does not by itself cause the resulting executable to be covered by 26// the GNU General Public License. This exception does not however 27// invalidate any other reasons why the executable file might be covered by 28// the GNU General Public License. 29 30// 27.5.2 template class basic_streambuf 31 32#include <streambuf> 33#include <testsuite_hooks.h> 34 35class testbuf : public std::streambuf 36{ 37public: 38 39 // Typedefs: 40 typedef std::streambuf::traits_type traits_type; 41 typedef std::streambuf::char_type char_type; 42 43 testbuf(): std::streambuf() 44 { } 45 46 bool 47 check_pointers() 48 { 49 bool test __attribute__((unused)) = true; 50 VERIFY( this->eback() == NULL ); 51 VERIFY( this->gptr() == NULL ); 52 VERIFY( this->egptr() == NULL ); 53 VERIFY( this->pbase() == NULL ); 54 VERIFY( this->pptr() == NULL ); 55 VERIFY( this->epptr() == NULL ); 56 return test; 57 } 58 59 int_type 60 pub_uflow() 61 { return (this->uflow()); } 62 63 int_type 64 pub_overflow(int_type __c = traits_type::eof()) 65 { return (this->overflow(__c)); } 66 67 int_type 68 pub_pbackfail(int_type __c) 69 { return (this->pbackfail(__c)); } 70 71 void 72 pub_setg(char* beg, char* cur, char *end) 73 { this->setg(beg, cur, end); } 74 75 void 76 pub_setp(char* beg, char* end) 77 { this->setp(beg, end); } 78 79protected: 80 int_type 81 underflow() 82 { 83 int_type __retval = traits_type::eof(); 84 if (this->gptr() < this->egptr()) 85 __retval = traits_type::not_eof(0); 86 return __retval; 87 } 88}; 89 90void test01() 91{ 92 typedef testbuf::traits_type traits_type; 93 typedef testbuf::int_type int_type; 94 95 bool test __attribute__((unused)) = true; 96 char lit01[52]; 97 strcpy(lit01, "chicago underground trio/possible cube on delmark"); 98 testbuf buf01; 99 100 // 27.5.2.3.1 get area 101 // 27.5.2.2.3 get area 102 // 27.5.2.4.3 get area 103 int i01 = 3; 104 buf01.pub_setg(lit01, lit01, (lit01 + i01)); 105 VERIFY( i01 == buf01.in_avail() ); 106 107 VERIFY( buf01.pub_uflow() == lit01[0] ); 108 VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[1]) ); 109 VERIFY( buf01.pub_uflow() == lit01[1] ); 110 VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[2]) ); 111 VERIFY( buf01.pub_uflow() == lit01[2] ); 112 VERIFY( buf01.sgetc() == traits_type::eof() ); 113} 114 115int main() 116{ 117 test01(); 118 return 0; 119} 120