13e519524SHoward Hinnant// -*- C++ -*- 2eb8650a7SLouis Dionne//===----------------------------------------------------------------------===// 33e519524SHoward Hinnant// 457b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 557b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 657b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 73e519524SHoward Hinnant// 83e519524SHoward Hinnant//===----------------------------------------------------------------------===// 93e519524SHoward Hinnant 103e519524SHoward Hinnant#ifndef _LIBCPP_STRSTREAM 113e519524SHoward Hinnant#define _LIBCPP_STRSTREAM 123e519524SHoward Hinnant 133e519524SHoward Hinnant/* 143e519524SHoward Hinnant strstream synopsis 153e519524SHoward Hinnant 163e519524SHoward Hinnantclass strstreambuf 173e519524SHoward Hinnant : public basic_streambuf<char> 183e519524SHoward Hinnant{ 193e519524SHoward Hinnantpublic: 20a11f8b1aSMarek Kurdej explicit strstreambuf(streamsize alsize_arg = 0); // before C++20 21a11f8b1aSMarek Kurdej strstreambuf() : strstreambuf(0) {} // C++20 22a11f8b1aSMarek Kurdej explicit strstreambuf(streamsize alsize_arg); // C++20 23a11f8b1aSMarek Kurdej 243e519524SHoward Hinnant strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*)); 25527a7fdfSBruce Mitchener strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = nullptr); 263e519524SHoward Hinnant strstreambuf(const char* gnext_arg, streamsize n); 273e519524SHoward Hinnant 28527a7fdfSBruce Mitchener strstreambuf(signed char* gnext_arg, streamsize n, signed char* pbeg_arg = nullptr); 293e519524SHoward Hinnant strstreambuf(const signed char* gnext_arg, streamsize n); 30527a7fdfSBruce Mitchener strstreambuf(unsigned char* gnext_arg, streamsize n, unsigned char* pbeg_arg = nullptr); 313e519524SHoward Hinnant strstreambuf(const unsigned char* gnext_arg, streamsize n); 323e519524SHoward Hinnant 333e519524SHoward Hinnant strstreambuf(strstreambuf&& rhs); 343e519524SHoward Hinnant strstreambuf& operator=(strstreambuf&& rhs); 353e519524SHoward Hinnant 363e519524SHoward Hinnant virtual ~strstreambuf(); 373e519524SHoward Hinnant 383e519524SHoward Hinnant void swap(strstreambuf& rhs); 393e519524SHoward Hinnant 403e519524SHoward Hinnant void freeze(bool freezefl = true); 413e519524SHoward Hinnant char* str(); 423e519524SHoward Hinnant int pcount() const; 433e519524SHoward Hinnant 443e519524SHoward Hinnantprotected: 453e519524SHoward Hinnant virtual int_type overflow (int_type c = EOF); 463e519524SHoward Hinnant virtual int_type pbackfail(int_type c = EOF); 473e519524SHoward Hinnant virtual int_type underflow(); 483e519524SHoward Hinnant virtual pos_type seekoff(off_type off, ios_base::seekdir way, 493e519524SHoward Hinnant ios_base::openmode which = ios_base::in | ios_base::out); 503e519524SHoward Hinnant virtual pos_type seekpos(pos_type sp, 513e519524SHoward Hinnant ios_base::openmode which = ios_base::in | ios_base::out); 523e519524SHoward Hinnant virtual streambuf* setbuf(char* s, streamsize n); 533e519524SHoward Hinnant 543e519524SHoward Hinnantprivate: 553e519524SHoward Hinnant typedef T1 strstate; // exposition only 563e519524SHoward Hinnant static const strstate allocated; // exposition only 573e519524SHoward Hinnant static const strstate constant; // exposition only 583e519524SHoward Hinnant static const strstate dynamic; // exposition only 593e519524SHoward Hinnant static const strstate frozen; // exposition only 603e519524SHoward Hinnant strstate strmode; // exposition only 613e519524SHoward Hinnant streamsize alsize; // exposition only 623e519524SHoward Hinnant void* (*palloc)(size_t); // exposition only 633e519524SHoward Hinnant void (*pfree)(void*); // exposition only 643e519524SHoward Hinnant}; 653e519524SHoward Hinnant 663e519524SHoward Hinnantclass istrstream 673e519524SHoward Hinnant : public basic_istream<char> 683e519524SHoward Hinnant{ 693e519524SHoward Hinnantpublic: 703e519524SHoward Hinnant explicit istrstream(const char* s); 713e519524SHoward Hinnant explicit istrstream(char* s); 723e519524SHoward Hinnant istrstream(const char* s, streamsize n); 733e519524SHoward Hinnant istrstream(char* s, streamsize n); 743e519524SHoward Hinnant 753e519524SHoward Hinnant virtual ~istrstream(); 763e519524SHoward Hinnant 773e519524SHoward Hinnant strstreambuf* rdbuf() const; 783e519524SHoward Hinnant char *str(); 793e519524SHoward Hinnant 803e519524SHoward Hinnantprivate: 813e519524SHoward Hinnant strstreambuf sb; // exposition only 823e519524SHoward Hinnant}; 833e519524SHoward Hinnant 843e519524SHoward Hinnantclass ostrstream 853e519524SHoward Hinnant : public basic_ostream<char> 863e519524SHoward Hinnant{ 873e519524SHoward Hinnantpublic: 883e519524SHoward Hinnant ostrstream(); 893e519524SHoward Hinnant ostrstream(char* s, int n, ios_base::openmode mode = ios_base::out); 903e519524SHoward Hinnant 913e519524SHoward Hinnant virtual ~ostrstream(); 923e519524SHoward Hinnant 933e519524SHoward Hinnant strstreambuf* rdbuf() const; 943e519524SHoward Hinnant void freeze(bool freezefl = true); 953e519524SHoward Hinnant char* str(); 963e519524SHoward Hinnant int pcount() const; 973e519524SHoward Hinnant 983e519524SHoward Hinnantprivate: 993e519524SHoward Hinnant strstreambuf sb; // exposition only 1003e519524SHoward Hinnant}; 1013e519524SHoward Hinnant 1023e519524SHoward Hinnantclass strstream 1033e519524SHoward Hinnant : public basic_iostream<char> 1043e519524SHoward Hinnant{ 1053e519524SHoward Hinnantpublic: 1063e519524SHoward Hinnant // Types 1073e519524SHoward Hinnant typedef char char_type; 1083e519524SHoward Hinnant typedef char_traits<char>::int_type int_type; 1093e519524SHoward Hinnant typedef char_traits<char>::pos_type pos_type; 1103e519524SHoward Hinnant typedef char_traits<char>::off_type off_type; 1113e519524SHoward Hinnant 1123e519524SHoward Hinnant // constructors/destructor 1133e519524SHoward Hinnant strstream(); 1143e519524SHoward Hinnant strstream(char* s, int n, ios_base::openmode mode = ios_base::in | ios_base::out); 1153e519524SHoward Hinnant 1163e519524SHoward Hinnant virtual ~strstream(); 1173e519524SHoward Hinnant 1183e519524SHoward Hinnant // Members: 1193e519524SHoward Hinnant strstreambuf* rdbuf() const; 1203e519524SHoward Hinnant void freeze(bool freezefl = true); 1213e519524SHoward Hinnant int pcount() const; 1223e519524SHoward Hinnant char* str(); 1233e519524SHoward Hinnant 1243e519524SHoward Hinnantprivate: 1253e519524SHoward Hinnant strstreambuf sb; // exposition only 1263e519524SHoward Hinnant}; 1273e519524SHoward Hinnant 1283e519524SHoward Hinnant} // std 1293e519524SHoward Hinnant 1303e519524SHoward Hinnant*/ 1313e519524SHoward Hinnant 132385cc25aSLouis Dionne#include <__assert> // all public C++ headers provide the assertion handler 1333e519524SHoward Hinnant#include <__config> 1343e519524SHoward Hinnant#include <istream> 135bfbd73f8SArthur O'Dwyer#include <ostream> 136bd6e6846SMark de Wever#include <version> 1373e519524SHoward Hinnant 138073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1393e519524SHoward Hinnant# pragma GCC system_header 140073458b1SHoward Hinnant#endif 1413e519524SHoward Hinnant 1423e519524SHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 1433e519524SHoward Hinnant 1446e41256fSHoward Hinnantclass _LIBCPP_TYPE_VIS strstreambuf 1453e519524SHoward Hinnant : public streambuf 1463e519524SHoward Hinnant{ 1473e519524SHoward Hinnantpublic: 148a11f8b1aSMarek Kurdej#ifndef _LIBCPP_CXX03_LANG 149a11f8b1aSMarek Kurdej strstreambuf() : strstreambuf(0) {} 150a11f8b1aSMarek Kurdej explicit strstreambuf(streamsize __alsize); 151a11f8b1aSMarek Kurdej#else 1523e519524SHoward Hinnant explicit strstreambuf(streamsize __alsize = 0); 153a11f8b1aSMarek Kurdej#endif 1543e519524SHoward Hinnant strstreambuf(void* (*__palloc)(size_t), void (*__pfree)(void*)); 155527a7fdfSBruce Mitchener strstreambuf(char* __gnext, streamsize __n, char* __pbeg = nullptr); 1563e519524SHoward Hinnant strstreambuf(const char* __gnext, streamsize __n); 1573e519524SHoward Hinnant 158527a7fdfSBruce Mitchener strstreambuf(signed char* __gnext, streamsize __n, signed char* __pbeg = nullptr); 1593e519524SHoward Hinnant strstreambuf(const signed char* __gnext, streamsize __n); 160527a7fdfSBruce Mitchener strstreambuf(unsigned char* __gnext, streamsize __n, unsigned char* __pbeg = nullptr); 1613e519524SHoward Hinnant strstreambuf(const unsigned char* __gnext, streamsize __n); 1623e519524SHoward Hinnant 163f0aca21eSEric Fiselier#ifndef _LIBCPP_CXX03_LANG 16411af28bdSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 1653e519524SHoward Hinnant strstreambuf(strstreambuf&& __rhs); 16611af28bdSHoward Hinnant _LIBCPP_INLINE_VISIBILITY 1673e519524SHoward Hinnant strstreambuf& operator=(strstreambuf&& __rhs); 168f0aca21eSEric Fiselier#endif // _LIBCPP_CXX03_LANG 1693e519524SHoward Hinnant 1703e519524SHoward Hinnant virtual ~strstreambuf(); 1713e519524SHoward Hinnant 1723e519524SHoward Hinnant void swap(strstreambuf& __rhs); 1733e519524SHoward Hinnant 1743e519524SHoward Hinnant void freeze(bool __freezefl = true); 1753e519524SHoward Hinnant char* str(); 1763e519524SHoward Hinnant int pcount() const; 1773e519524SHoward Hinnant 1783e519524SHoward Hinnantprotected: 1793e519524SHoward Hinnant virtual int_type overflow (int_type __c = EOF); 1803e519524SHoward Hinnant virtual int_type pbackfail(int_type __c = EOF); 1813e519524SHoward Hinnant virtual int_type underflow(); 1823e519524SHoward Hinnant virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, 1833e519524SHoward Hinnant ios_base::openmode __which = ios_base::in | ios_base::out); 1843e519524SHoward Hinnant virtual pos_type seekpos(pos_type __sp, 1853e519524SHoward Hinnant ios_base::openmode __which = ios_base::in | ios_base::out); 1863e519524SHoward Hinnant 1873e519524SHoward Hinnantprivate: 1883e519524SHoward Hinnant typedef unsigned __mode_type; 1893e519524SHoward Hinnant static const __mode_type __allocated = 0x01; 1903e519524SHoward Hinnant static const __mode_type __constant = 0x02; 1913e519524SHoward Hinnant static const __mode_type __dynamic = 0x04; 1923e519524SHoward Hinnant static const __mode_type __frozen = 0x08; 1933e519524SHoward Hinnant static const streamsize __default_alsize = 4096; 1943e519524SHoward Hinnant 1953e519524SHoward Hinnant __mode_type __strmode_; 1963e519524SHoward Hinnant streamsize __alsize_; 1973e519524SHoward Hinnant void* (*__palloc_)(size_t); 1983e519524SHoward Hinnant void (*__pfree_)(void*); 1993e519524SHoward Hinnant 2003e519524SHoward Hinnant void __init(char* __gnext, streamsize __n, char* __pbeg); 2013e519524SHoward Hinnant}; 2023e519524SHoward Hinnant 203f0aca21eSEric Fiselier#ifndef _LIBCPP_CXX03_LANG 20411af28bdSHoward Hinnant 20511af28bdSHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 20611af28bdSHoward Hinnantstrstreambuf::strstreambuf(strstreambuf&& __rhs) 20711af28bdSHoward Hinnant : streambuf(__rhs), 20811af28bdSHoward Hinnant __strmode_(__rhs.__strmode_), 20911af28bdSHoward Hinnant __alsize_(__rhs.__alsize_), 21011af28bdSHoward Hinnant __palloc_(__rhs.__palloc_), 21111af28bdSHoward Hinnant __pfree_(__rhs.__pfree_) 21211af28bdSHoward Hinnant{ 21311af28bdSHoward Hinnant __rhs.setg(nullptr, nullptr, nullptr); 21411af28bdSHoward Hinnant __rhs.setp(nullptr, nullptr); 21511af28bdSHoward Hinnant} 21611af28bdSHoward Hinnant 21711af28bdSHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 21811af28bdSHoward Hinnantstrstreambuf& 21911af28bdSHoward Hinnantstrstreambuf::operator=(strstreambuf&& __rhs) 22011af28bdSHoward Hinnant{ 22111af28bdSHoward Hinnant if (eback() && (__strmode_ & __allocated) != 0 && (__strmode_ & __frozen) == 0) 22211af28bdSHoward Hinnant { 22311af28bdSHoward Hinnant if (__pfree_) 22411af28bdSHoward Hinnant __pfree_(eback()); 22511af28bdSHoward Hinnant else 22611af28bdSHoward Hinnant delete [] eback(); 22711af28bdSHoward Hinnant } 22811af28bdSHoward Hinnant streambuf::operator=(__rhs); 22911af28bdSHoward Hinnant __strmode_ = __rhs.__strmode_; 23011af28bdSHoward Hinnant __alsize_ = __rhs.__alsize_; 23111af28bdSHoward Hinnant __palloc_ = __rhs.__palloc_; 23211af28bdSHoward Hinnant __pfree_ = __rhs.__pfree_; 23311af28bdSHoward Hinnant __rhs.setg(nullptr, nullptr, nullptr); 23411af28bdSHoward Hinnant __rhs.setp(nullptr, nullptr); 23511af28bdSHoward Hinnant return *this; 23611af28bdSHoward Hinnant} 23711af28bdSHoward Hinnant 238f0aca21eSEric Fiselier#endif // _LIBCPP_CXX03_LANG 23911af28bdSHoward Hinnant 2406e41256fSHoward Hinnantclass _LIBCPP_TYPE_VIS istrstream 2413e519524SHoward Hinnant : public istream 2423e519524SHoward Hinnant{ 2433e519524SHoward Hinnantpublic: 244e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2453e519524SHoward Hinnant explicit istrstream(const char* __s) 2463e519524SHoward Hinnant : istream(&__sb_), __sb_(__s, 0) {} 247e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2483e519524SHoward Hinnant explicit istrstream(char* __s) 2493e519524SHoward Hinnant : istream(&__sb_), __sb_(__s, 0) {} 250e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2513e519524SHoward Hinnant istrstream(const char* __s, streamsize __n) 2523e519524SHoward Hinnant : istream(&__sb_), __sb_(__s, __n) {} 253e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2543e519524SHoward Hinnant istrstream(char* __s, streamsize __n) 2553e519524SHoward Hinnant : istream(&__sb_), __sb_(__s, __n) {} 2563e519524SHoward Hinnant 257f0aca21eSEric Fiselier#ifndef _LIBCPP_CXX03_LANG 258e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2593e519524SHoward Hinnant istrstream(istrstream&& __rhs) 260ce48a113SHoward Hinnant : istream(_VSTD::move(__rhs)), 261ce48a113SHoward Hinnant __sb_(_VSTD::move(__rhs.__sb_)) 2623e519524SHoward Hinnant { 2633e519524SHoward Hinnant istream::set_rdbuf(&__sb_); 2643e519524SHoward Hinnant } 2653e519524SHoward Hinnant 266e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2673e519524SHoward Hinnant istrstream& operator=(istrstream&& __rhs) 2683e519524SHoward Hinnant { 269ce48a113SHoward Hinnant __sb_ = _VSTD::move(__rhs.__sb_); 270*26ac9cbfSNikolas Klauser istream::operator=(_VSTD::move(__rhs)); 2713e519524SHoward Hinnant return *this; 2723e519524SHoward Hinnant } 273f0aca21eSEric Fiselier#endif // _LIBCPP_CXX03_LANG 2743e519524SHoward Hinnant 2753e519524SHoward Hinnant virtual ~istrstream(); 2763e519524SHoward Hinnant 277e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2783e519524SHoward Hinnant void swap(istrstream& __rhs) 2793e519524SHoward Hinnant { 2803e519524SHoward Hinnant istream::swap(__rhs); 2813e519524SHoward Hinnant __sb_.swap(__rhs.__sb_); 2823e519524SHoward Hinnant } 2833e519524SHoward Hinnant 284e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2853e519524SHoward Hinnant strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 286e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2873e519524SHoward Hinnant char *str() {return __sb_.str();} 2883e519524SHoward Hinnant 2893e519524SHoward Hinnantprivate: 2903e519524SHoward Hinnant strstreambuf __sb_; 2913e519524SHoward Hinnant}; 2923e519524SHoward Hinnant 2936e41256fSHoward Hinnantclass _LIBCPP_TYPE_VIS ostrstream 2943e519524SHoward Hinnant : public ostream 2953e519524SHoward Hinnant{ 2963e519524SHoward Hinnantpublic: 297e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2983e519524SHoward Hinnant ostrstream() 2993e519524SHoward Hinnant : ostream(&__sb_) {} 300e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3013e519524SHoward Hinnant ostrstream(char* __s, int __n, ios_base::openmode __mode = ios_base::out) 3023e519524SHoward Hinnant : ostream(&__sb_), 3033696227cSArthur O'Dwyer __sb_(__s, __n, __s + (__mode & ios::app ? _VSTD::strlen(__s) : 0)) 3043e519524SHoward Hinnant {} 3053e519524SHoward Hinnant 306f0aca21eSEric Fiselier#ifndef _LIBCPP_CXX03_LANG 307e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3083e519524SHoward Hinnant ostrstream(ostrstream&& __rhs) 309ce48a113SHoward Hinnant : ostream(_VSTD::move(__rhs)), 310ce48a113SHoward Hinnant __sb_(_VSTD::move(__rhs.__sb_)) 3113e519524SHoward Hinnant { 3123e519524SHoward Hinnant ostream::set_rdbuf(&__sb_); 3133e519524SHoward Hinnant } 3143e519524SHoward Hinnant 315e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3163e519524SHoward Hinnant ostrstream& operator=(ostrstream&& __rhs) 3173e519524SHoward Hinnant { 318ce48a113SHoward Hinnant __sb_ = _VSTD::move(__rhs.__sb_); 319*26ac9cbfSNikolas Klauser ostream::operator=(_VSTD::move(__rhs)); 3203e519524SHoward Hinnant return *this; 3213e519524SHoward Hinnant } 322f0aca21eSEric Fiselier#endif // _LIBCPP_CXX03_LANG 3233e519524SHoward Hinnant 3243e519524SHoward Hinnant virtual ~ostrstream(); 3253e519524SHoward Hinnant 326e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3273e519524SHoward Hinnant void swap(ostrstream& __rhs) 3283e519524SHoward Hinnant { 3293e519524SHoward Hinnant ostream::swap(__rhs); 3303e519524SHoward Hinnant __sb_.swap(__rhs.__sb_); 3313e519524SHoward Hinnant } 3323e519524SHoward Hinnant 333e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3343e519524SHoward Hinnant strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 335e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3363e519524SHoward Hinnant void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);} 337e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3383e519524SHoward Hinnant char* str() {return __sb_.str();} 339e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3403e519524SHoward Hinnant int pcount() const {return __sb_.pcount();} 3413e519524SHoward Hinnant 3423e519524SHoward Hinnantprivate: 3433e519524SHoward Hinnant strstreambuf __sb_; // exposition only 3443e519524SHoward Hinnant}; 3453e519524SHoward Hinnant 3466e41256fSHoward Hinnantclass _LIBCPP_TYPE_VIS strstream 3473e519524SHoward Hinnant : public iostream 3483e519524SHoward Hinnant{ 3493e519524SHoward Hinnantpublic: 3503e519524SHoward Hinnant // Types 3513e519524SHoward Hinnant typedef char char_type; 3523e519524SHoward Hinnant typedef char_traits<char>::int_type int_type; 3533e519524SHoward Hinnant typedef char_traits<char>::pos_type pos_type; 3543e519524SHoward Hinnant typedef char_traits<char>::off_type off_type; 3553e519524SHoward Hinnant 3563e519524SHoward Hinnant // constructors/destructor 357e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3583e519524SHoward Hinnant strstream() 3593e519524SHoward Hinnant : iostream(&__sb_) {} 360e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3613e519524SHoward Hinnant strstream(char* __s, int __n, ios_base::openmode __mode = ios_base::in | ios_base::out) 3623e519524SHoward Hinnant : iostream(&__sb_), 3633696227cSArthur O'Dwyer __sb_(__s, __n, __s + (__mode & ios::app ? _VSTD::strlen(__s) : 0)) 3643e519524SHoward Hinnant {} 3653e519524SHoward Hinnant 366f0aca21eSEric Fiselier#ifndef _LIBCPP_CXX03_LANG 367e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3683e519524SHoward Hinnant strstream(strstream&& __rhs) 369ce48a113SHoward Hinnant : iostream(_VSTD::move(__rhs)), 370ce48a113SHoward Hinnant __sb_(_VSTD::move(__rhs.__sb_)) 3713e519524SHoward Hinnant { 3723e519524SHoward Hinnant iostream::set_rdbuf(&__sb_); 3733e519524SHoward Hinnant } 3743e519524SHoward Hinnant 375e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3763e519524SHoward Hinnant strstream& operator=(strstream&& __rhs) 3773e519524SHoward Hinnant { 378ce48a113SHoward Hinnant __sb_ = _VSTD::move(__rhs.__sb_); 379*26ac9cbfSNikolas Klauser iostream::operator=(_VSTD::move(__rhs)); 3803e519524SHoward Hinnant return *this; 3813e519524SHoward Hinnant } 382f0aca21eSEric Fiselier#endif // _LIBCPP_CXX03_LANG 3833e519524SHoward Hinnant 3843e519524SHoward Hinnant virtual ~strstream(); 3853e519524SHoward Hinnant 386e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3873e519524SHoward Hinnant void swap(strstream& __rhs) 3883e519524SHoward Hinnant { 3893e519524SHoward Hinnant iostream::swap(__rhs); 3903e519524SHoward Hinnant __sb_.swap(__rhs.__sb_); 3913e519524SHoward Hinnant } 3923e519524SHoward Hinnant 3933e519524SHoward Hinnant // Members: 394e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3953e519524SHoward Hinnant strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 396e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3973e519524SHoward Hinnant void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);} 398e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3993e519524SHoward Hinnant int pcount() const {return __sb_.pcount();} 400e0601335SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 4013e519524SHoward Hinnant char* str() {return __sb_.str();} 4023e519524SHoward Hinnant 4033e519524SHoward Hinnantprivate: 4043e519524SHoward Hinnant strstreambuf __sb_; // exposition only 4053e519524SHoward Hinnant}; 4063e519524SHoward Hinnant 4073e519524SHoward Hinnant_LIBCPP_END_NAMESPACE_STD 4083e519524SHoward Hinnant 4093e519524SHoward Hinnant#endif // _LIBCPP_STRSTREAM 410