xref: /netbsd-src/external/apache2/llvm/dist/libcxx/include/strstream (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
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