177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc. 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk. 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies. 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted, 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice. 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Implementation of the classes in header <strstream>. 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// WARNING: The classes defined in <strstream> are DEPRECATED. This 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// header is defined in section D.7.1 of the C++ standard, and it 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// MAY BE REMOVED in a future standard revision. You should use the 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// header <sstream> instead. 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "stlport_prefix.h" 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <strstream> 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <algorithm> 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <limits> 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// strstreambuf constructor, destructor. 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(streamsize initial_capacity) 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(0), _M_free_fun(0), 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(true), _M_frozen(false), _M_constant(false) { 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t n = (sizeof(streamsize) > sizeof(size_t)) ? __STATIC_CAST(size_t, (min)(__STATIC_CAST(streamsize, (numeric_limits<size_t>::max)()), 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (max)(initial_capacity, streamsize(16)))) 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : __STATIC_CAST(size_t, (max)(initial_capacity, streamsize(16))); 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char* buf = _M_alloc(n); 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (buf) { 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setp(buf, buf + n); 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(buf, buf, buf); 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(__alloc_fn alloc_f, __free_fn free_f) 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(alloc_f), _M_free_fun(free_f), 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(true), _M_frozen(false), _M_constant(false) { 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t n = 16; 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char* buf = _M_alloc(n); 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (buf) { 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setp(buf, buf + n); 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(buf, buf, buf); 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(char* get, streamsize n, char* put) 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(0), _M_free_fun(0), 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(false), _M_frozen(false), _M_constant(false) { 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_setup(get, put, n); 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(signed char* get, streamsize n, signed char* put) 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(0), _M_free_fun(0), 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(false), _M_frozen(false), _M_constant(false) { 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_setup(__REINTERPRET_CAST(char*,get), __REINTERPRET_CAST(char*,put), n); 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(unsigned char* get, streamsize n, 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner unsigned char* put) 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(0), _M_free_fun(0), 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(false), _M_frozen(false), _M_constant(false) { 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_setup(__REINTERPRET_CAST(char*,get), __REINTERPRET_CAST(char*,put), n); 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(const char* get, streamsize n) 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(0), _M_free_fun(0), 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(false), _M_frozen(false), _M_constant(true) { 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_setup(__CONST_CAST(char*,get), 0, n); 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(const signed char* get, streamsize n) 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(0), _M_free_fun(0), 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(false), _M_frozen(false), _M_constant(true) { 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_setup(__REINTERPRET_CAST(char*, __CONST_CAST(signed char*,get)), 0, n); 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::strstreambuf(const unsigned char* get, streamsize n) 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : _M_alloc_fun(0), _M_free_fun(0), 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_dynamic(false), _M_frozen(false), _M_constant(true) { 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_setup(__REINTERPRET_CAST(char*, __CONST_CAST(unsigned char*,get)), 0, n); 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::~strstreambuf() { 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_M_dynamic && !_M_frozen) 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_free(eback()); 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid strstreambuf::freeze(bool frozenflag) { 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_M_dynamic) 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_frozen = frozenflag; 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar* strstreambuf::str() { 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner freeze(true); 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return eback(); 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint strstreambuf::pcount() const { 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return int(pptr() ? pptr() - pbase() : 0); 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::int_type strstreambuf::overflow(int_type c) { 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (c == traits_type::eof()) 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return traits_type::not_eof(c); 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Try to expand the buffer. 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (pptr() == epptr() && _M_dynamic && !_M_frozen && !_M_constant) { 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ptrdiff_t old_size = epptr() - pbase(); 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ptrdiff_t new_size = (max)(2 * old_size, ptrdiff_t(1)); 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char* buf = _M_alloc(new_size); 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (buf) { 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner memcpy(buf, pbase(), old_size); 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char* old_buffer = pbase(); 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool reposition_get = false; 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ptrdiff_t old_get_offset; 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (gptr() != 0) { 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner reposition_get = true; 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner old_get_offset = gptr() - eback(); 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setp(buf, buf + new_size); 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pbump((int)old_size); 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (reposition_get) 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(buf, buf + old_get_offset, buf + (max)(old_get_offset, old_size)); 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_free(old_buffer); 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (pptr() != epptr()) { 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *pptr() = traits_type::to_char_type(c); 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pbump(1); 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return c; 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return traits_type::eof(); 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::int_type strstreambuf::pbackfail(int_type c) { 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (gptr() != eback()) { 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (c == traits_type::eof()) { 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner gbump(-1); 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return traits_type::not_eof(c); 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else if (c == gptr()[-1]) { 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner gbump(-1); 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return c; 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else if (!_M_constant) { 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner gbump(-1); 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *gptr() = traits_type::to_char_type(c); 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return c; 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return traits_type::eof(); 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::int_type strstreambuf::underflow() { 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (gptr() == egptr() && pptr() && pptr() > egptr()) 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(eback(), gptr(), pptr()); 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (gptr() != egptr()) 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return (unsigned char) *gptr(); 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _Traits::eof(); 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_streambuf<char, char_traits<char> >* 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::setbuf(char*, streamsize) { 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return this; 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::pos_type 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::seekoff(off_type off, 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ios_base::seekdir dir, ios_base::openmode mode) { 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool do_get = false; 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool do_put = false; 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if ((mode & (ios_base::in | ios_base::out)) == 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (ios_base::in | ios_base::out) && 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (dir == ios_base::beg || dir == ios_base::end)) 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner do_get = do_put = true; 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else if (mode & ios_base::in) 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner do_get = true; 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else if (mode & ios_base::out) 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner do_put = true; 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // !gptr() is here because, according to D.7.1 paragraph 4, the seekable 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // area is undefined if there is no get area. 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if ((!do_get && !do_put) || (do_put && !pptr()) || !gptr()) 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return pos_type(off_type(-1)); 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char* seeklow = eback(); 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char* seekhigh = epptr() ? epptr() : egptr(); 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner off_type newoff; 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner switch(dir) { 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case ios_base::beg: 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner newoff = 0; 21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case ios_base::end: 22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner newoff = seekhigh - seeklow; 22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case ios_base::cur: 22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner newoff = do_put ? pptr() - seeklow : gptr() - seeklow; 22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner default: 22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return pos_type(off_type(-1)); 22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner off += newoff; 23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (off < 0 || off > seekhigh - seeklow) 23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return pos_type(off_type(-1)); 23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (do_put) { 23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (seeklow + __STATIC_CAST(ptrdiff_t, off) < pbase()) { 23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setp(seeklow, epptr()); 23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pbump((int)off); 23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else { 23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setp(pbase(), epptr()); 24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pbump((int)(off - (pbase() - seeklow))); 24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (do_get) { 24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (off <= egptr() - seeklow) 24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(seeklow, seeklow + __STATIC_CAST(ptrdiff_t, off), egptr()); 24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else if (off <= pptr() - seeklow) 24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(seeklow, seeklow + __STATIC_CAST(ptrdiff_t, off), pptr()); 24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else 24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(seeklow, seeklow + __STATIC_CAST(ptrdiff_t, off), epptr()); 25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return pos_type(newoff); 25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::pos_type 25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf::seekpos(pos_type pos, ios_base::openmode mode) { 25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return seekoff(pos - pos_type(off_type(0)), ios_base::beg, mode); 25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar* strstreambuf::_M_alloc(size_t n) { 26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_M_alloc_fun) 26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __STATIC_CAST(char*,_M_alloc_fun(n)); 26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else 26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return new char[n]; 26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid strstreambuf::_M_free(char* p) { 26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (p) { 27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (_M_free_fun) 27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_free_fun(p); 27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else 27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner delete[] p; 27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid strstreambuf::_M_setup(char* get, char* put, streamsize n) { 27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (get) { 27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t N = n > 0 ? size_t(n) : n == 0 ? strlen(get) : size_t(INT_MAX); 28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (put) { 28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(get, get, get + N); 28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setp(put, put + N); 28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner else { 28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner setg(get, get, get + N); 28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Class istrstream 29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneristrstream::istrstream(char* s) 29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_istream<char, char_traits<char> >(0), _M_buf(s, 0) { 29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner this->init(&_M_buf); 29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneristrstream::istrstream(const char* s) 30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_istream<char, char_traits<char> >(0), _M_buf(s, 0) { 30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner this->init(&_M_buf); 30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneristrstream::istrstream(char* s, streamsize n) 30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_istream<char, char_traits<char> >(0), _M_buf(s, n) { 30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner this->init(&_M_buf); 30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneristrstream::istrstream(const char* s, streamsize n) 31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_istream<char, char_traits<char> >(0), _M_buf(s, n) { 31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner this->init(&_M_buf); 31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneristrstream::~istrstream() {} 31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf* istrstream::rdbuf() const { 31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __CONST_CAST(strstreambuf*,&_M_buf); 31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar* istrstream::str() { return _M_buf.str(); } 32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Class ostrstream 32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerostrstream::ostrstream() 32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_ostream<char, char_traits<char> >(0), _M_buf() { 32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner basic_ios<char, char_traits<char> >::init(&_M_buf); 32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerostrstream::ostrstream(char* s, int n, ios_base::openmode mode) 33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_ostream<char, char_traits<char> >(0), 33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_buf(s, n, mode & ios_base::app ? s + strlen(s) : s) { 33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner basic_ios<char, char_traits<char> >::init(&_M_buf); 33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerostrstream::~ostrstream() {} 33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf* ostrstream::rdbuf() const { 33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __CONST_CAST(strstreambuf*,&_M_buf); 34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid ostrstream::freeze(bool freezeflag) { 34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_buf.freeze(freezeflag); 34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar* ostrstream::str() { 34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _M_buf.str(); 34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint ostrstream::pcount() const { 35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _M_buf.pcount(); 35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Class strstream 35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstream::strstream() 35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_iostream<char, char_traits<char> >(0), _M_buf() { 36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner basic_ios<char, char_traits<char> >::init(&_M_buf); 36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstream::strstream(char* s, int n, ios_base::openmode mode) 36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner : basic_iostream<char, char_traits<char> >(0), 36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_buf(s, n, mode & ios_base::app ? s + strlen(s) : s) { 36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner basic_ios<char, char_traits<char> >::init(&_M_buf); 36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstream::~strstream() {} 37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstrstreambuf* strstream::rdbuf() const { 37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __CONST_CAST(strstreambuf*,&_M_buf); 37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid strstream::freeze(bool freezeflag) { 37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_buf.freeze(freezeflag); 37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint strstream::pcount() const { 38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _M_buf.pcount(); 38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerchar* strstream::str() { 38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _M_buf.str(); 38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables: 39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++ 39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End: 392