17a984708SDavid Chisnall// -*- C++ -*- 27a984708SDavid Chisnall//===--------------------------- strstream --------------------------------===// 37a984708SDavid Chisnall// 47a984708SDavid Chisnall// The LLVM Compiler Infrastructure 57a984708SDavid Chisnall// 67a984708SDavid Chisnall// This file is dual licensed under the MIT and the University of Illinois Open 77a984708SDavid Chisnall// Source Licenses. See LICENSE.TXT for details. 87a984708SDavid Chisnall// 97a984708SDavid Chisnall//===----------------------------------------------------------------------===// 107a984708SDavid Chisnall 117a984708SDavid Chisnall#ifndef _LIBCPP_STRSTREAM 127a984708SDavid Chisnall#define _LIBCPP_STRSTREAM 137a984708SDavid Chisnall 147a984708SDavid Chisnall/* 157a984708SDavid Chisnall strstream synopsis 167a984708SDavid Chisnall 177a984708SDavid Chisnallclass strstreambuf 187a984708SDavid Chisnall : public basic_streambuf<char> 197a984708SDavid Chisnall{ 207a984708SDavid Chisnallpublic: 217a984708SDavid Chisnall explicit strstreambuf(streamsize alsize_arg = 0); 227a984708SDavid Chisnall strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*)); 237a984708SDavid Chisnall strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = 0); 247a984708SDavid Chisnall strstreambuf(const char* gnext_arg, streamsize n); 257a984708SDavid Chisnall 267a984708SDavid Chisnall strstreambuf(signed char* gnext_arg, streamsize n, signed char* pbeg_arg = 0); 277a984708SDavid Chisnall strstreambuf(const signed char* gnext_arg, streamsize n); 287a984708SDavid Chisnall strstreambuf(unsigned char* gnext_arg, streamsize n, unsigned char* pbeg_arg = 0); 297a984708SDavid Chisnall strstreambuf(const unsigned char* gnext_arg, streamsize n); 307a984708SDavid Chisnall 317a984708SDavid Chisnall strstreambuf(strstreambuf&& rhs); 327a984708SDavid Chisnall strstreambuf& operator=(strstreambuf&& rhs); 337a984708SDavid Chisnall 347a984708SDavid Chisnall virtual ~strstreambuf(); 357a984708SDavid Chisnall 367a984708SDavid Chisnall void swap(strstreambuf& rhs); 377a984708SDavid Chisnall 387a984708SDavid Chisnall void freeze(bool freezefl = true); 397a984708SDavid Chisnall char* str(); 407a984708SDavid Chisnall int pcount() const; 417a984708SDavid Chisnall 427a984708SDavid Chisnallprotected: 437a984708SDavid Chisnall virtual int_type overflow (int_type c = EOF); 447a984708SDavid Chisnall virtual int_type pbackfail(int_type c = EOF); 457a984708SDavid Chisnall virtual int_type underflow(); 467a984708SDavid Chisnall virtual pos_type seekoff(off_type off, ios_base::seekdir way, 477a984708SDavid Chisnall ios_base::openmode which = ios_base::in | ios_base::out); 487a984708SDavid Chisnall virtual pos_type seekpos(pos_type sp, 497a984708SDavid Chisnall ios_base::openmode which = ios_base::in | ios_base::out); 507a984708SDavid Chisnall virtual streambuf* setbuf(char* s, streamsize n); 517a984708SDavid Chisnall 527a984708SDavid Chisnallprivate: 537a984708SDavid Chisnall typedef T1 strstate; // exposition only 547a984708SDavid Chisnall static const strstate allocated; // exposition only 557a984708SDavid Chisnall static const strstate constant; // exposition only 567a984708SDavid Chisnall static const strstate dynamic; // exposition only 577a984708SDavid Chisnall static const strstate frozen; // exposition only 587a984708SDavid Chisnall strstate strmode; // exposition only 597a984708SDavid Chisnall streamsize alsize; // exposition only 607a984708SDavid Chisnall void* (*palloc)(size_t); // exposition only 617a984708SDavid Chisnall void (*pfree)(void*); // exposition only 627a984708SDavid Chisnall}; 637a984708SDavid Chisnall 647a984708SDavid Chisnallclass istrstream 657a984708SDavid Chisnall : public basic_istream<char> 667a984708SDavid Chisnall{ 677a984708SDavid Chisnallpublic: 687a984708SDavid Chisnall explicit istrstream(const char* s); 697a984708SDavid Chisnall explicit istrstream(char* s); 707a984708SDavid Chisnall istrstream(const char* s, streamsize n); 717a984708SDavid Chisnall istrstream(char* s, streamsize n); 727a984708SDavid Chisnall 737a984708SDavid Chisnall virtual ~istrstream(); 747a984708SDavid Chisnall 757a984708SDavid Chisnall strstreambuf* rdbuf() const; 767a984708SDavid Chisnall char *str(); 777a984708SDavid Chisnall 787a984708SDavid Chisnallprivate: 797a984708SDavid Chisnall strstreambuf sb; // exposition only 807a984708SDavid Chisnall}; 817a984708SDavid Chisnall 827a984708SDavid Chisnallclass ostrstream 837a984708SDavid Chisnall : public basic_ostream<char> 847a984708SDavid Chisnall{ 857a984708SDavid Chisnallpublic: 867a984708SDavid Chisnall ostrstream(); 877a984708SDavid Chisnall ostrstream(char* s, int n, ios_base::openmode mode = ios_base::out); 887a984708SDavid Chisnall 897a984708SDavid Chisnall virtual ~ostrstream(); 907a984708SDavid Chisnall 917a984708SDavid Chisnall strstreambuf* rdbuf() const; 927a984708SDavid Chisnall void freeze(bool freezefl = true); 937a984708SDavid Chisnall char* str(); 947a984708SDavid Chisnall int pcount() const; 957a984708SDavid Chisnall 967a984708SDavid Chisnallprivate: 977a984708SDavid Chisnall strstreambuf sb; // exposition only 987a984708SDavid Chisnall}; 997a984708SDavid Chisnall 1007a984708SDavid Chisnallclass strstream 1017a984708SDavid Chisnall : public basic_iostream<char> 1027a984708SDavid Chisnall{ 1037a984708SDavid Chisnallpublic: 1047a984708SDavid Chisnall // Types 1057a984708SDavid Chisnall typedef char char_type; 1067a984708SDavid Chisnall typedef char_traits<char>::int_type int_type; 1077a984708SDavid Chisnall typedef char_traits<char>::pos_type pos_type; 1087a984708SDavid Chisnall typedef char_traits<char>::off_type off_type; 1097a984708SDavid Chisnall 1107a984708SDavid Chisnall // constructors/destructor 1117a984708SDavid Chisnall strstream(); 1127a984708SDavid Chisnall strstream(char* s, int n, ios_base::openmode mode = ios_base::in | ios_base::out); 1137a984708SDavid Chisnall 1147a984708SDavid Chisnall virtual ~strstream(); 1157a984708SDavid Chisnall 1167a984708SDavid Chisnall // Members: 1177a984708SDavid Chisnall strstreambuf* rdbuf() const; 1187a984708SDavid Chisnall void freeze(bool freezefl = true); 1197a984708SDavid Chisnall int pcount() const; 1207a984708SDavid Chisnall char* str(); 1217a984708SDavid Chisnall 1227a984708SDavid Chisnallprivate: 1237a984708SDavid Chisnall strstreambuf sb; // exposition only 1247a984708SDavid Chisnall}; 1257a984708SDavid Chisnall 1267a984708SDavid Chisnall} // std 1277a984708SDavid Chisnall 1287a984708SDavid Chisnall*/ 1297a984708SDavid Chisnall 1307a984708SDavid Chisnall#include <__config> 1317a984708SDavid Chisnall#include <ostream> 1327a984708SDavid Chisnall#include <istream> 1337a984708SDavid Chisnall 1347a984708SDavid Chisnall#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1357a984708SDavid Chisnall#pragma GCC system_header 1367a984708SDavid Chisnall#endif 1377a984708SDavid Chisnall 1387a984708SDavid Chisnall_LIBCPP_BEGIN_NAMESPACE_STD 1397a984708SDavid Chisnall 1401bf9f7c1SDimitry Andricclass _LIBCPP_TYPE_VIS strstreambuf 1417a984708SDavid Chisnall : public streambuf 1427a984708SDavid Chisnall{ 1437a984708SDavid Chisnallpublic: 1447a984708SDavid Chisnall explicit strstreambuf(streamsize __alsize = 0); 1457a984708SDavid Chisnall strstreambuf(void* (*__palloc)(size_t), void (*__pfree)(void*)); 1467a984708SDavid Chisnall strstreambuf(char* __gnext, streamsize __n, char* __pbeg = 0); 1477a984708SDavid Chisnall strstreambuf(const char* __gnext, streamsize __n); 1487a984708SDavid Chisnall 1497a984708SDavid Chisnall strstreambuf(signed char* __gnext, streamsize __n, signed char* __pbeg = 0); 1507a984708SDavid Chisnall strstreambuf(const signed char* __gnext, streamsize __n); 1517a984708SDavid Chisnall strstreambuf(unsigned char* __gnext, streamsize __n, unsigned char* __pbeg = 0); 1527a984708SDavid Chisnall strstreambuf(const unsigned char* __gnext, streamsize __n); 1537a984708SDavid Chisnall 154*540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 1557a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 1567a984708SDavid Chisnall strstreambuf(strstreambuf&& __rhs); 1577a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 1587a984708SDavid Chisnall strstreambuf& operator=(strstreambuf&& __rhs); 159*540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 1607a984708SDavid Chisnall 1617a984708SDavid Chisnall virtual ~strstreambuf(); 1627a984708SDavid Chisnall 1637a984708SDavid Chisnall void swap(strstreambuf& __rhs); 1647a984708SDavid Chisnall 1657a984708SDavid Chisnall void freeze(bool __freezefl = true); 1667a984708SDavid Chisnall char* str(); 1677a984708SDavid Chisnall int pcount() const; 1687a984708SDavid Chisnall 1697a984708SDavid Chisnallprotected: 1707a984708SDavid Chisnall virtual int_type overflow (int_type __c = EOF); 1717a984708SDavid Chisnall virtual int_type pbackfail(int_type __c = EOF); 1727a984708SDavid Chisnall virtual int_type underflow(); 1737a984708SDavid Chisnall virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, 1747a984708SDavid Chisnall ios_base::openmode __which = ios_base::in | ios_base::out); 1757a984708SDavid Chisnall virtual pos_type seekpos(pos_type __sp, 1767a984708SDavid Chisnall ios_base::openmode __which = ios_base::in | ios_base::out); 1777a984708SDavid Chisnall 1787a984708SDavid Chisnallprivate: 1797a984708SDavid Chisnall typedef unsigned __mode_type; 1807a984708SDavid Chisnall static const __mode_type __allocated = 0x01; 1817a984708SDavid Chisnall static const __mode_type __constant = 0x02; 1827a984708SDavid Chisnall static const __mode_type __dynamic = 0x04; 1837a984708SDavid Chisnall static const __mode_type __frozen = 0x08; 1847a984708SDavid Chisnall static const streamsize __default_alsize = 4096; 1857a984708SDavid Chisnall 1867a984708SDavid Chisnall __mode_type __strmode_; 1877a984708SDavid Chisnall streamsize __alsize_; 1887a984708SDavid Chisnall void* (*__palloc_)(size_t); 1897a984708SDavid Chisnall void (*__pfree_)(void*); 1907a984708SDavid Chisnall 1917a984708SDavid Chisnall void __init(char* __gnext, streamsize __n, char* __pbeg); 1927a984708SDavid Chisnall}; 1937a984708SDavid Chisnall 194*540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 1957a984708SDavid Chisnall 1967a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 1977a984708SDavid Chisnallstrstreambuf::strstreambuf(strstreambuf&& __rhs) 1987a984708SDavid Chisnall : streambuf(__rhs), 1997a984708SDavid Chisnall __strmode_(__rhs.__strmode_), 2007a984708SDavid Chisnall __alsize_(__rhs.__alsize_), 2017a984708SDavid Chisnall __palloc_(__rhs.__palloc_), 2027a984708SDavid Chisnall __pfree_(__rhs.__pfree_) 2037a984708SDavid Chisnall{ 2047a984708SDavid Chisnall __rhs.setg(nullptr, nullptr, nullptr); 2057a984708SDavid Chisnall __rhs.setp(nullptr, nullptr); 2067a984708SDavid Chisnall} 2077a984708SDavid Chisnall 2087a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY 2097a984708SDavid Chisnallstrstreambuf& 2107a984708SDavid Chisnallstrstreambuf::operator=(strstreambuf&& __rhs) 2117a984708SDavid Chisnall{ 2127a984708SDavid Chisnall if (eback() && (__strmode_ & __allocated) != 0 && (__strmode_ & __frozen) == 0) 2137a984708SDavid Chisnall { 2147a984708SDavid Chisnall if (__pfree_) 2157a984708SDavid Chisnall __pfree_(eback()); 2167a984708SDavid Chisnall else 2177a984708SDavid Chisnall delete [] eback(); 2187a984708SDavid Chisnall } 2197a984708SDavid Chisnall streambuf::operator=(__rhs); 2207a984708SDavid Chisnall __strmode_ = __rhs.__strmode_; 2217a984708SDavid Chisnall __alsize_ = __rhs.__alsize_; 2227a984708SDavid Chisnall __palloc_ = __rhs.__palloc_; 2237a984708SDavid Chisnall __pfree_ = __rhs.__pfree_; 2247a984708SDavid Chisnall __rhs.setg(nullptr, nullptr, nullptr); 2257a984708SDavid Chisnall __rhs.setp(nullptr, nullptr); 2267a984708SDavid Chisnall return *this; 2277a984708SDavid Chisnall} 2287a984708SDavid Chisnall 229*540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 2307a984708SDavid Chisnall 2311bf9f7c1SDimitry Andricclass _LIBCPP_TYPE_VIS istrstream 2327a984708SDavid Chisnall : public istream 2337a984708SDavid Chisnall{ 2347a984708SDavid Chisnallpublic: 2357a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2367a984708SDavid Chisnall explicit istrstream(const char* __s) 2377a984708SDavid Chisnall : istream(&__sb_), __sb_(__s, 0) {} 2387a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2397a984708SDavid Chisnall explicit istrstream(char* __s) 2407a984708SDavid Chisnall : istream(&__sb_), __sb_(__s, 0) {} 2417a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2427a984708SDavid Chisnall istrstream(const char* __s, streamsize __n) 2437a984708SDavid Chisnall : istream(&__sb_), __sb_(__s, __n) {} 2447a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2457a984708SDavid Chisnall istrstream(char* __s, streamsize __n) 2467a984708SDavid Chisnall : istream(&__sb_), __sb_(__s, __n) {} 2477a984708SDavid Chisnall 248*540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 2497a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2507a984708SDavid Chisnall istrstream(istrstream&& __rhs) 2517a984708SDavid Chisnall : istream(_VSTD::move(__rhs)), 2527a984708SDavid Chisnall __sb_(_VSTD::move(__rhs.__sb_)) 2537a984708SDavid Chisnall { 2547a984708SDavid Chisnall istream::set_rdbuf(&__sb_); 2557a984708SDavid Chisnall } 2567a984708SDavid Chisnall 2577a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2587a984708SDavid Chisnall istrstream& operator=(istrstream&& __rhs) 2597a984708SDavid Chisnall { 2607a984708SDavid Chisnall istream::operator=(_VSTD::move(__rhs)); 2617a984708SDavid Chisnall __sb_ = _VSTD::move(__rhs.__sb_); 2627a984708SDavid Chisnall return *this; 2637a984708SDavid Chisnall } 264*540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 2657a984708SDavid Chisnall 2667a984708SDavid Chisnall virtual ~istrstream(); 2677a984708SDavid Chisnall 2687a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2697a984708SDavid Chisnall void swap(istrstream& __rhs) 2707a984708SDavid Chisnall { 2717a984708SDavid Chisnall istream::swap(__rhs); 2727a984708SDavid Chisnall __sb_.swap(__rhs.__sb_); 2737a984708SDavid Chisnall } 2747a984708SDavid Chisnall 2757a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2767a984708SDavid Chisnall strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 2777a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2787a984708SDavid Chisnall char *str() {return __sb_.str();} 2797a984708SDavid Chisnall 2807a984708SDavid Chisnallprivate: 2817a984708SDavid Chisnall strstreambuf __sb_; 2827a984708SDavid Chisnall}; 2837a984708SDavid Chisnall 2841bf9f7c1SDimitry Andricclass _LIBCPP_TYPE_VIS ostrstream 2857a984708SDavid Chisnall : public ostream 2867a984708SDavid Chisnall{ 2877a984708SDavid Chisnallpublic: 2887a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2897a984708SDavid Chisnall ostrstream() 2907a984708SDavid Chisnall : ostream(&__sb_) {} 2917a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2927a984708SDavid Chisnall ostrstream(char* __s, int __n, ios_base::openmode __mode = ios_base::out) 2937a984708SDavid Chisnall : ostream(&__sb_), 2947a984708SDavid Chisnall __sb_(__s, __n, __s + (__mode & ios::app ? strlen(__s) : 0)) 2957a984708SDavid Chisnall {} 2967a984708SDavid Chisnall 297*540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 2987a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 2997a984708SDavid Chisnall ostrstream(ostrstream&& __rhs) 3007a984708SDavid Chisnall : ostream(_VSTD::move(__rhs)), 3017a984708SDavid Chisnall __sb_(_VSTD::move(__rhs.__sb_)) 3027a984708SDavid Chisnall { 3037a984708SDavid Chisnall ostream::set_rdbuf(&__sb_); 3047a984708SDavid Chisnall } 3057a984708SDavid Chisnall 3067a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3077a984708SDavid Chisnall ostrstream& operator=(ostrstream&& __rhs) 3087a984708SDavid Chisnall { 3097a984708SDavid Chisnall ostream::operator=(_VSTD::move(__rhs)); 3107a984708SDavid Chisnall __sb_ = _VSTD::move(__rhs.__sb_); 3117a984708SDavid Chisnall return *this; 3127a984708SDavid Chisnall } 313*540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 3147a984708SDavid Chisnall 3157a984708SDavid Chisnall virtual ~ostrstream(); 3167a984708SDavid Chisnall 3177a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3187a984708SDavid Chisnall void swap(ostrstream& __rhs) 3197a984708SDavid Chisnall { 3207a984708SDavid Chisnall ostream::swap(__rhs); 3217a984708SDavid Chisnall __sb_.swap(__rhs.__sb_); 3227a984708SDavid Chisnall } 3237a984708SDavid Chisnall 3247a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3257a984708SDavid Chisnall strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 3267a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3277a984708SDavid Chisnall void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);} 3287a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3297a984708SDavid Chisnall char* str() {return __sb_.str();} 3307a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3317a984708SDavid Chisnall int pcount() const {return __sb_.pcount();} 3327a984708SDavid Chisnall 3337a984708SDavid Chisnallprivate: 3347a984708SDavid Chisnall strstreambuf __sb_; // exposition only 3357a984708SDavid Chisnall}; 3367a984708SDavid Chisnall 3371bf9f7c1SDimitry Andricclass _LIBCPP_TYPE_VIS strstream 3387a984708SDavid Chisnall : public iostream 3397a984708SDavid Chisnall{ 3407a984708SDavid Chisnallpublic: 3417a984708SDavid Chisnall // Types 3427a984708SDavid Chisnall typedef char char_type; 3437a984708SDavid Chisnall typedef char_traits<char>::int_type int_type; 3447a984708SDavid Chisnall typedef char_traits<char>::pos_type pos_type; 3457a984708SDavid Chisnall typedef char_traits<char>::off_type off_type; 3467a984708SDavid Chisnall 3477a984708SDavid Chisnall // constructors/destructor 3487a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3497a984708SDavid Chisnall strstream() 3507a984708SDavid Chisnall : iostream(&__sb_) {} 3517a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3527a984708SDavid Chisnall strstream(char* __s, int __n, ios_base::openmode __mode = ios_base::in | ios_base::out) 3537a984708SDavid Chisnall : iostream(&__sb_), 3547a984708SDavid Chisnall __sb_(__s, __n, __s + (__mode & ios::app ? strlen(__s) : 0)) 3557a984708SDavid Chisnall {} 3567a984708SDavid Chisnall 357*540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG 3587a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3597a984708SDavid Chisnall strstream(strstream&& __rhs) 3607a984708SDavid Chisnall : iostream(_VSTD::move(__rhs)), 3617a984708SDavid Chisnall __sb_(_VSTD::move(__rhs.__sb_)) 3627a984708SDavid Chisnall { 3637a984708SDavid Chisnall iostream::set_rdbuf(&__sb_); 3647a984708SDavid Chisnall } 3657a984708SDavid Chisnall 3667a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3677a984708SDavid Chisnall strstream& operator=(strstream&& __rhs) 3687a984708SDavid Chisnall { 3697a984708SDavid Chisnall iostream::operator=(_VSTD::move(__rhs)); 3707a984708SDavid Chisnall __sb_ = _VSTD::move(__rhs.__sb_); 3717a984708SDavid Chisnall return *this; 3727a984708SDavid Chisnall } 373*540d2a8bSDimitry Andric#endif // _LIBCPP_CXX03_LANG 3747a984708SDavid Chisnall 3757a984708SDavid Chisnall virtual ~strstream(); 3767a984708SDavid Chisnall 3777a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3787a984708SDavid Chisnall void swap(strstream& __rhs) 3797a984708SDavid Chisnall { 3807a984708SDavid Chisnall iostream::swap(__rhs); 3817a984708SDavid Chisnall __sb_.swap(__rhs.__sb_); 3827a984708SDavid Chisnall } 3837a984708SDavid Chisnall 3847a984708SDavid Chisnall // Members: 3857a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3867a984708SDavid Chisnall strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);} 3877a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3887a984708SDavid Chisnall void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);} 3897a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3907a984708SDavid Chisnall int pcount() const {return __sb_.pcount();} 3917a984708SDavid Chisnall _LIBCPP_INLINE_VISIBILITY 3927a984708SDavid Chisnall char* str() {return __sb_.str();} 3937a984708SDavid Chisnall 3947a984708SDavid Chisnallprivate: 3957a984708SDavid Chisnall strstreambuf __sb_; // exposition only 3967a984708SDavid Chisnall}; 3977a984708SDavid Chisnall 3987a984708SDavid Chisnall_LIBCPP_END_NAMESPACE_STD 3997a984708SDavid Chisnall 4007a984708SDavid Chisnall#endif // _LIBCPP_STRSTREAM 401