1*4d6fc14bSjoerg// -*- C++ -*- 2*4d6fc14bSjoerg//===--------------------------- strstream --------------------------------===// 3*4d6fc14bSjoerg// 4*4d6fc14bSjoerg// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*4d6fc14bSjoerg// See https://llvm.org/LICENSE.txt for license information. 6*4d6fc14bSjoerg// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*4d6fc14bSjoerg// 8*4d6fc14bSjoerg//===----------------------------------------------------------------------===// 9*4d6fc14bSjoerg 10*4d6fc14bSjoerg#ifndef _LIBCPP_STRSTREAM 11*4d6fc14bSjoerg#define _LIBCPP_STRSTREAM 12*4d6fc14bSjoerg 13*4d6fc14bSjoerg/* 14*4d6fc14bSjoerg strstream synopsis 15*4d6fc14bSjoerg 16*4d6fc14bSjoergclass strstreambuf 17*4d6fc14bSjoerg : public basic_streambuf<char> 18*4d6fc14bSjoerg{ 19*4d6fc14bSjoergpublic: 20*4d6fc14bSjoerg explicit strstreambuf(streamsize alsize_arg = 0); // before C++20 21*4d6fc14bSjoerg strstreambuf() : strstreambuf(0) {} // C++20 22*4d6fc14bSjoerg explicit strstreambuf(streamsize alsize_arg); // C++20 23*4d6fc14bSjoerg 24*4d6fc14bSjoerg strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*)); 25*4d6fc14bSjoerg strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = nullptr); 26*4d6fc14bSjoerg strstreambuf(const char* gnext_arg, streamsize n); 27*4d6fc14bSjoerg 28*4d6fc14bSjoerg strstreambuf(signed char* gnext_arg, streamsize n, signed char* pbeg_arg = nullptr); 29*4d6fc14bSjoerg strstreambuf(const signed char* gnext_arg, streamsize n); 30*4d6fc14bSjoerg strstreambuf(unsigned char* gnext_arg, streamsize n, unsigned char* pbeg_arg = nullptr); 31*4d6fc14bSjoerg strstreambuf(const unsigned char* gnext_arg, streamsize n); 32*4d6fc14bSjoerg 33*4d6fc14bSjoerg strstreambuf(strstreambuf&& rhs); 34*4d6fc14bSjoerg strstreambuf& operator=(strstreambuf&& rhs); 35*4d6fc14bSjoerg 36*4d6fc14bSjoerg virtual ~strstreambuf(); 37*4d6fc14bSjoerg 38*4d6fc14bSjoerg void swap(strstreambuf& rhs); 39*4d6fc14bSjoerg 40*4d6fc14bSjoerg void freeze(bool freezefl = true); 41*4d6fc14bSjoerg char* str(); 42*4d6fc14bSjoerg int pcount() const; 43*4d6fc14bSjoerg 44*4d6fc14bSjoergprotected: 45*4d6fc14bSjoerg virtual int_type overflow (int_type c = EOF); 46*4d6fc14bSjoerg virtual int_type pbackfail(int_type c = EOF); 47*4d6fc14bSjoerg virtual int_type underflow(); 48*4d6fc14bSjoerg virtual pos_type seekoff(off_type off, ios_base::seekdir way, 49*4d6fc14bSjoerg ios_base::openmode which = ios_base::in | ios_base::out); 50*4d6fc14bSjoerg virtual pos_type seekpos(pos_type sp, 51*4d6fc14bSjoerg ios_base::openmode which = ios_base::in | ios_base::out); 52*4d6fc14bSjoerg virtual streambuf* setbuf(char* s, streamsize n); 53*4d6fc14bSjoerg 54*4d6fc14bSjoergprivate: 55*4d6fc14bSjoerg typedef T1 strstate; // exposition only 56*4d6fc14bSjoerg static const strstate allocated; // exposition only 57*4d6fc14bSjoerg static const strstate constant; // exposition only 58*4d6fc14bSjoerg static const strstate dynamic; // exposition only 59*4d6fc14bSjoerg static const strstate frozen; // exposition only 60*4d6fc14bSjoerg strstate strmode; // exposition only 61*4d6fc14bSjoerg streamsize alsize; // exposition only 62*4d6fc14bSjoerg void* (*palloc)(size_t); // exposition only 63*4d6fc14bSjoerg void (*pfree)(void*); // exposition only 64*4d6fc14bSjoerg}; 65*4d6fc14bSjoerg 66*4d6fc14bSjoergclass istrstream 67*4d6fc14bSjoerg : public basic_istream<char> 68*4d6fc14bSjoerg{ 69*4d6fc14bSjoergpublic: 70*4d6fc14bSjoerg explicit istrstream(const char* s); 71*4d6fc14bSjoerg explicit istrstream(char* s); 72*4d6fc14bSjoerg istrstream(const char* s, streamsize n); 73*4d6fc14bSjoerg istrstream(char* s, streamsize n); 74*4d6fc14bSjoerg 75*4d6fc14bSjoerg virtual ~istrstream(); 76*4d6fc14bSjoerg 77*4d6fc14bSjoerg strstreambuf* rdbuf() const; 78*4d6fc14bSjoerg char *str(); 79*4d6fc14bSjoerg 80*4d6fc14bSjoergprivate: 81*4d6fc14bSjoerg strstreambuf sb; // exposition only 82*4d6fc14bSjoerg}; 83*4d6fc14bSjoerg 84*4d6fc14bSjoergclass ostrstream 85*4d6fc14bSjoerg : public basic_ostream<char> 86*4d6fc14bSjoerg{ 87*4d6fc14bSjoergpublic: 88*4d6fc14bSjoerg ostrstream(); 89*4d6fc14bSjoerg ostrstream(char* s, int n, ios_base::openmode mode = ios_base::out); 90*4d6fc14bSjoerg 91*4d6fc14bSjoerg virtual ~ostrstream(); 92*4d6fc14bSjoerg 93*4d6fc14bSjoerg strstreambuf* rdbuf() const; 94*4d6fc14bSjoerg void freeze(bool freezefl = true); 95*4d6fc14bSjoerg char* str(); 96*4d6fc14bSjoerg int pcount() const; 97*4d6fc14bSjoerg 98*4d6fc14bSjoergprivate: 99*4d6fc14bSjoerg strstreambuf sb; // exposition only 100*4d6fc14bSjoerg}; 101*4d6fc14bSjoerg 102*4d6fc14bSjoergclass strstream 103*4d6fc14bSjoerg : public basic_iostream<char> 104*4d6fc14bSjoerg{ 105*4d6fc14bSjoergpublic: 106*4d6fc14bSjoerg // Types 107*4d6fc14bSjoerg typedef char char_type; 108*4d6fc14bSjoerg typedef char_traits<char>::int_type int_type; 109*4d6fc14bSjoerg typedef char_traits<char>::pos_type pos_type; 110*4d6fc14bSjoerg typedef char_traits<char>::off_type off_type; 111*4d6fc14bSjoerg 112*4d6fc14bSjoerg // constructors/destructor 113*4d6fc14bSjoerg strstream(); 114*4d6fc14bSjoerg strstream(char* s, int n, ios_base::openmode mode = ios_base::in | ios_base::out); 115*4d6fc14bSjoerg 116*4d6fc14bSjoerg virtual ~strstream(); 117*4d6fc14bSjoerg 118*4d6fc14bSjoerg // Members: 119*4d6fc14bSjoerg strstreambuf* rdbuf() const; 120*4d6fc14bSjoerg void freeze(bool freezefl = true); 121*4d6fc14bSjoerg int pcount() const; 122*4d6fc14bSjoerg char* str(); 123*4d6fc14bSjoerg 124*4d6fc14bSjoergprivate: 125*4d6fc14bSjoerg strstreambuf sb; // exposition only 126*4d6fc14bSjoerg}; 127*4d6fc14bSjoerg 128*4d6fc14bSjoerg} // std 129*4d6fc14bSjoerg 130*4d6fc14bSjoerg*/ 131*4d6fc14bSjoerg 132*4d6fc14bSjoerg#include <__config> 133*4d6fc14bSjoerg#include <ostream> 134*4d6fc14bSjoerg#include <istream> 135*4d6fc14bSjoerg 136*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 137*4d6fc14bSjoerg#pragma GCC system_header 138*4d6fc14bSjoerg#endif 139*4d6fc14bSjoerg 140*4d6fc14bSjoerg_LIBCPP_BEGIN_NAMESPACE_STD 141*4d6fc14bSjoerg 142*4d6fc14bSjoergclass _LIBCPP_TYPE_VIS strstreambuf 143*4d6fc14bSjoerg : public streambuf 144*4d6fc14bSjoerg{ 145*4d6fc14bSjoergpublic: 146*4d6fc14bSjoerg#ifndef _LIBCPP_CXX03_LANG 147*4d6fc14bSjoerg strstreambuf() : strstreambuf(0) {} 148*4d6fc14bSjoerg explicit strstreambuf(streamsize __alsize); 149*4d6fc14bSjoerg#else 150*4d6fc14bSjoerg explicit strstreambuf(streamsize __alsize = 0); 151*4d6fc14bSjoerg#endif 152*4d6fc14bSjoerg strstreambuf(void* (*__palloc)(size_t), void (*__pfree)(void*)); 153*4d6fc14bSjoerg strstreambuf(char* __gnext, streamsize __n, char* __pbeg = nullptr); 154*4d6fc14bSjoerg strstreambuf(const char* __gnext, streamsize __n); 155*4d6fc14bSjoerg 156*4d6fc14bSjoerg strstreambuf(signed char* __gnext, streamsize __n, signed char* __pbeg = nullptr); 157*4d6fc14bSjoerg strstreambuf(const signed char* __gnext, streamsize __n); 158*4d6fc14bSjoerg strstreambuf(unsigned char* __gnext, streamsize __n, unsigned char* __pbeg = nullptr); 159*4d6fc14bSjoerg strstreambuf(const unsigned char* __gnext, streamsize __n); 160*4d6fc14bSjoerg 161*4d6fc14bSjoerg#ifndef _LIBCPP_CXX03_LANG 162*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 163*4d6fc14bSjoerg strstreambuf(strstreambuf&& __rhs); 164*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 165*4d6fc14bSjoerg strstreambuf& operator=(strstreambuf&& __rhs); 166*4d6fc14bSjoerg#endif // _LIBCPP_CXX03_LANG 167*4d6fc14bSjoerg 168*4d6fc14bSjoerg virtual ~strstreambuf(); 169*4d6fc14bSjoerg 170*4d6fc14bSjoerg void swap(strstreambuf& __rhs); 171*4d6fc14bSjoerg 172*4d6fc14bSjoerg void freeze(bool __freezefl = true); 173*4d6fc14bSjoerg char* str(); 174*4d6fc14bSjoerg int pcount() const; 175*4d6fc14bSjoerg 176*4d6fc14bSjoergprotected: 177*4d6fc14bSjoerg virtual int_type overflow (int_type __c = EOF); 178*4d6fc14bSjoerg virtual int_type pbackfail(int_type __c = EOF); 179*4d6fc14bSjoerg virtual int_type underflow(); 180*4d6fc14bSjoerg virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, 181*4d6fc14bSjoerg ios_base::openmode __which = ios_base::in | ios_base::out); 182*4d6fc14bSjoerg virtual pos_type seekpos(pos_type __sp, 183*4d6fc14bSjoerg ios_base::openmode __which = ios_base::in | ios_base::out); 184*4d6fc14bSjoerg 185*4d6fc14bSjoergprivate: 186*4d6fc14bSjoerg typedef unsigned __mode_type; 187*4d6fc14bSjoerg static const __mode_type __allocated = 0x01; 188*4d6fc14bSjoerg static const __mode_type __constant = 0x02; 189*4d6fc14bSjoerg static const __mode_type __dynamic = 0x04; 190*4d6fc14bSjoerg static const __mode_type __frozen = 0x08; 191*4d6fc14bSjoerg static const streamsize __default_alsize = 4096; 192*4d6fc14bSjoerg 193*4d6fc14bSjoerg __mode_type __strmode_; 194*4d6fc14bSjoerg streamsize __alsize_; 195*4d6fc14bSjoerg void* (*__palloc_)(size_t); 196*4d6fc14bSjoerg void (*__pfree_)(void*); 197*4d6fc14bSjoerg 198*4d6fc14bSjoerg void __init(char* __gnext, streamsize __n, char* __pbeg); 199*4d6fc14bSjoerg}; 200*4d6fc14bSjoerg 201*4d6fc14bSjoerg#ifndef _LIBCPP_CXX03_LANG 202*4d6fc14bSjoerg 203*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY 204*4d6fc14bSjoergstrstreambuf::strstreambuf(strstreambuf&& __rhs) 205*4d6fc14bSjoerg : streambuf(__rhs), 206*4d6fc14bSjoerg __strmode_(__rhs.__strmode_), 207*4d6fc14bSjoerg __alsize_(__rhs.__alsize_), 208*4d6fc14bSjoerg __palloc_(__rhs.__palloc_), 209*4d6fc14bSjoerg __pfree_(__rhs.__pfree_) 210*4d6fc14bSjoerg{ 211*4d6fc14bSjoerg __rhs.setg(nullptr, nullptr, nullptr); 212*4d6fc14bSjoerg __rhs.setp(nullptr, nullptr); 213*4d6fc14bSjoerg} 214*4d6fc14bSjoerg 215*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY 216*4d6fc14bSjoergstrstreambuf& 217*4d6fc14bSjoergstrstreambuf::operator=(strstreambuf&& __rhs) 218*4d6fc14bSjoerg{ 219*4d6fc14bSjoerg if (eback() && (__strmode_ & __allocated) != 0 && (__strmode_ & __frozen) == 0) 220*4d6fc14bSjoerg { 221*4d6fc14bSjoerg if (__pfree_) 222*4d6fc14bSjoerg __pfree_(eback()); 223*4d6fc14bSjoerg else 224*4d6fc14bSjoerg delete [] eback(); 225*4d6fc14bSjoerg } 226*4d6fc14bSjoerg streambuf::operator=(__rhs); 227*4d6fc14bSjoerg __strmode_ = __rhs.__strmode_; 228*4d6fc14bSjoerg __alsize_ = __rhs.__alsize_; 229*4d6fc14bSjoerg __palloc_ = __rhs.__palloc_; 230*4d6fc14bSjoerg __pfree_ = __rhs.__pfree_; 231*4d6fc14bSjoerg __rhs.setg(nullptr, nullptr, nullptr); 232*4d6fc14bSjoerg __rhs.setp(nullptr, nullptr); 233*4d6fc14bSjoerg return *this; 234*4d6fc14bSjoerg} 235*4d6fc14bSjoerg 236*4d6fc14bSjoerg#endif // _LIBCPP_CXX03_LANG 237*4d6fc14bSjoerg 238*4d6fc14bSjoergclass _LIBCPP_TYPE_VIS istrstream 239*4d6fc14bSjoerg : public istream 240*4d6fc14bSjoerg{ 241*4d6fc14bSjoergpublic: 242*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 243*4d6fc14bSjoerg explicit istrstream(const char* __s) 244*4d6fc14bSjoerg : istream(&__sb_), __sb_(__s, 0) {} 245*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 246*4d6fc14bSjoerg explicit istrstream(char* __s) 247*4d6fc14bSjoerg : istream(&__sb_), __sb_(__s, 0) {} 248*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 249*4d6fc14bSjoerg istrstream(const char* __s, streamsize __n) 250*4d6fc14bSjoerg : istream(&__sb_), __sb_(__s, __n) {} 251*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 252*4d6fc14bSjoerg istrstream(char* __s, streamsize __n) 253*4d6fc14bSjoerg : istream(&__sb_), __sb_(__s, __n) {} 254*4d6fc14bSjoerg 255*4d6fc14bSjoerg#ifndef _LIBCPP_CXX03_LANG 256*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 257*4d6fc14bSjoerg istrstream(istrstream&& __rhs) 258*4d6fc14bSjoerg : istream(_VSTD::move(__rhs)), 259*4d6fc14bSjoerg __sb_(_VSTD::move(__rhs.__sb_)) 260*4d6fc14bSjoerg { 261*4d6fc14bSjoerg istream::set_rdbuf(&__sb_); 262*4d6fc14bSjoerg } 263*4d6fc14bSjoerg 264*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 265*4d6fc14bSjoerg istrstream& operator=(istrstream&& __rhs) 266*4d6fc14bSjoerg { 267*4d6fc14bSjoerg istream::operator=(_VSTD::move(__rhs)); 268*4d6fc14bSjoerg __sb_ = _VSTD::move(__rhs.__sb_); 269*4d6fc14bSjoerg return *this; 270*4d6fc14bSjoerg } 271*4d6fc14bSjoerg#endif // _LIBCPP_CXX03_LANG 272*4d6fc14bSjoerg 273*4d6fc14bSjoerg virtual ~istrstream(); 274*4d6fc14bSjoerg 275*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 276*4d6fc14bSjoerg void swap(istrstream& __rhs) 277*4d6fc14bSjoerg { 278*4d6fc14bSjoerg istream::swap(__rhs); 279*4d6fc14bSjoerg __sb_.swap(__rhs.__sb_); 280*4d6fc14bSjoerg } 281*4d6fc14bSjoerg 282*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 283*4d6fc14bSjoerg strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 284*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 285*4d6fc14bSjoerg char *str() {return __sb_.str();} 286*4d6fc14bSjoerg 287*4d6fc14bSjoergprivate: 288*4d6fc14bSjoerg strstreambuf __sb_; 289*4d6fc14bSjoerg}; 290*4d6fc14bSjoerg 291*4d6fc14bSjoergclass _LIBCPP_TYPE_VIS ostrstream 292*4d6fc14bSjoerg : public ostream 293*4d6fc14bSjoerg{ 294*4d6fc14bSjoergpublic: 295*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 296*4d6fc14bSjoerg ostrstream() 297*4d6fc14bSjoerg : ostream(&__sb_) {} 298*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 299*4d6fc14bSjoerg ostrstream(char* __s, int __n, ios_base::openmode __mode = ios_base::out) 300*4d6fc14bSjoerg : ostream(&__sb_), 301*4d6fc14bSjoerg __sb_(__s, __n, __s + (__mode & ios::app ? _VSTD::strlen(__s) : 0)) 302*4d6fc14bSjoerg {} 303*4d6fc14bSjoerg 304*4d6fc14bSjoerg#ifndef _LIBCPP_CXX03_LANG 305*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 306*4d6fc14bSjoerg ostrstream(ostrstream&& __rhs) 307*4d6fc14bSjoerg : ostream(_VSTD::move(__rhs)), 308*4d6fc14bSjoerg __sb_(_VSTD::move(__rhs.__sb_)) 309*4d6fc14bSjoerg { 310*4d6fc14bSjoerg ostream::set_rdbuf(&__sb_); 311*4d6fc14bSjoerg } 312*4d6fc14bSjoerg 313*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 314*4d6fc14bSjoerg ostrstream& operator=(ostrstream&& __rhs) 315*4d6fc14bSjoerg { 316*4d6fc14bSjoerg ostream::operator=(_VSTD::move(__rhs)); 317*4d6fc14bSjoerg __sb_ = _VSTD::move(__rhs.__sb_); 318*4d6fc14bSjoerg return *this; 319*4d6fc14bSjoerg } 320*4d6fc14bSjoerg#endif // _LIBCPP_CXX03_LANG 321*4d6fc14bSjoerg 322*4d6fc14bSjoerg virtual ~ostrstream(); 323*4d6fc14bSjoerg 324*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 325*4d6fc14bSjoerg void swap(ostrstream& __rhs) 326*4d6fc14bSjoerg { 327*4d6fc14bSjoerg ostream::swap(__rhs); 328*4d6fc14bSjoerg __sb_.swap(__rhs.__sb_); 329*4d6fc14bSjoerg } 330*4d6fc14bSjoerg 331*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 332*4d6fc14bSjoerg strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 333*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 334*4d6fc14bSjoerg void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);} 335*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 336*4d6fc14bSjoerg char* str() {return __sb_.str();} 337*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 338*4d6fc14bSjoerg int pcount() const {return __sb_.pcount();} 339*4d6fc14bSjoerg 340*4d6fc14bSjoergprivate: 341*4d6fc14bSjoerg strstreambuf __sb_; // exposition only 342*4d6fc14bSjoerg}; 343*4d6fc14bSjoerg 344*4d6fc14bSjoergclass _LIBCPP_TYPE_VIS strstream 345*4d6fc14bSjoerg : public iostream 346*4d6fc14bSjoerg{ 347*4d6fc14bSjoergpublic: 348*4d6fc14bSjoerg // Types 349*4d6fc14bSjoerg typedef char char_type; 350*4d6fc14bSjoerg typedef char_traits<char>::int_type int_type; 351*4d6fc14bSjoerg typedef char_traits<char>::pos_type pos_type; 352*4d6fc14bSjoerg typedef char_traits<char>::off_type off_type; 353*4d6fc14bSjoerg 354*4d6fc14bSjoerg // constructors/destructor 355*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 356*4d6fc14bSjoerg strstream() 357*4d6fc14bSjoerg : iostream(&__sb_) {} 358*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 359*4d6fc14bSjoerg strstream(char* __s, int __n, ios_base::openmode __mode = ios_base::in | ios_base::out) 360*4d6fc14bSjoerg : iostream(&__sb_), 361*4d6fc14bSjoerg __sb_(__s, __n, __s + (__mode & ios::app ? _VSTD::strlen(__s) : 0)) 362*4d6fc14bSjoerg {} 363*4d6fc14bSjoerg 364*4d6fc14bSjoerg#ifndef _LIBCPP_CXX03_LANG 365*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 366*4d6fc14bSjoerg strstream(strstream&& __rhs) 367*4d6fc14bSjoerg : iostream(_VSTD::move(__rhs)), 368*4d6fc14bSjoerg __sb_(_VSTD::move(__rhs.__sb_)) 369*4d6fc14bSjoerg { 370*4d6fc14bSjoerg iostream::set_rdbuf(&__sb_); 371*4d6fc14bSjoerg } 372*4d6fc14bSjoerg 373*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 374*4d6fc14bSjoerg strstream& operator=(strstream&& __rhs) 375*4d6fc14bSjoerg { 376*4d6fc14bSjoerg iostream::operator=(_VSTD::move(__rhs)); 377*4d6fc14bSjoerg __sb_ = _VSTD::move(__rhs.__sb_); 378*4d6fc14bSjoerg return *this; 379*4d6fc14bSjoerg } 380*4d6fc14bSjoerg#endif // _LIBCPP_CXX03_LANG 381*4d6fc14bSjoerg 382*4d6fc14bSjoerg virtual ~strstream(); 383*4d6fc14bSjoerg 384*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 385*4d6fc14bSjoerg void swap(strstream& __rhs) 386*4d6fc14bSjoerg { 387*4d6fc14bSjoerg iostream::swap(__rhs); 388*4d6fc14bSjoerg __sb_.swap(__rhs.__sb_); 389*4d6fc14bSjoerg } 390*4d6fc14bSjoerg 391*4d6fc14bSjoerg // Members: 392*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 393*4d6fc14bSjoerg strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 394*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 395*4d6fc14bSjoerg void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);} 396*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 397*4d6fc14bSjoerg int pcount() const {return __sb_.pcount();} 398*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 399*4d6fc14bSjoerg char* str() {return __sb_.str();} 400*4d6fc14bSjoerg 401*4d6fc14bSjoergprivate: 402*4d6fc14bSjoerg strstreambuf __sb_; // exposition only 403*4d6fc14bSjoerg}; 404*4d6fc14bSjoerg 405*4d6fc14bSjoerg_LIBCPP_END_NAMESPACE_STD 406*4d6fc14bSjoerg 407*4d6fc14bSjoerg#endif // _LIBCPP_STRSTREAM 408