1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <istream> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// basic_istream<charT,traits>& seekg(pos_type pos); 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <istream> 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert> 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertemplate <class CharT> 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerstruct testbuf 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner : public std::basic_streambuf<CharT> 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::basic_string<CharT> string_type; 22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::basic_streambuf<CharT> base; 23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerprivate: 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner string_type str_; 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerpublic: 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner testbuf() {} 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner testbuf(const string_type& str) 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner : str_(str) 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner base::setg(const_cast<CharT*>(str_.data()), 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const_cast<CharT*>(str_.data()), 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const_cast<CharT*>(str_.data()) + str_.size()); 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner CharT* eback() const {return base::eback();} 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner CharT* gptr() const {return base::gptr();} 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner CharT* egptr() const {return base::egptr();} 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerprotected: 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typename base::pos_type seekpos(typename base::pos_type sp, 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::ios_base::openmode which) 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(which == std::ios_base::in); 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner return sp; 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}; 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner testbuf<char> sb(" 123456789"); 52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::istream is(&sb); 53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner is.seekg(5); 54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(is.good()); 55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner is.seekg(-1); 56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(is.fail()); 57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner testbuf<wchar_t> sb(L" 123456789"); 60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::wistream is(&sb); 61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner is.seekg(5); 62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(is.good()); 63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner is.seekg(-1); 64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(is.fail()); 65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 67