// -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef _LIBCPP___CXX03_STRSTREAM #define _LIBCPP___CXX03_STRSTREAM /* strstream synopsis class strstreambuf // Removed in C++26 : public basic_streambuf { public: explicit strstreambuf(streamsize alsize_arg = 0); // before C++20 strstreambuf() : strstreambuf(0) {} // C++20 explicit strstreambuf(streamsize alsize_arg); // C++20 strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*)); strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = nullptr); strstreambuf(const char* gnext_arg, streamsize n); strstreambuf(signed char* gnext_arg, streamsize n, signed char* pbeg_arg = nullptr); strstreambuf(const signed char* gnext_arg, streamsize n); strstreambuf(unsigned char* gnext_arg, streamsize n, unsigned char* pbeg_arg = nullptr); strstreambuf(const unsigned char* gnext_arg, streamsize n); strstreambuf(strstreambuf&& rhs); strstreambuf& operator=(strstreambuf&& rhs); virtual ~strstreambuf(); void swap(strstreambuf& rhs); void freeze(bool freezefl = true); char* str(); int pcount() const; protected: virtual int_type overflow (int_type c = EOF); virtual int_type pbackfail(int_type c = EOF); virtual int_type underflow(); virtual pos_type seekoff(off_type off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out); virtual pos_type seekpos(pos_type sp, ios_base::openmode which = ios_base::in | ios_base::out); virtual streambuf* setbuf(char* s, streamsize n); private: typedef T1 strstate; // exposition only static const strstate allocated; // exposition only static const strstate constant; // exposition only static const strstate dynamic; // exposition only static const strstate frozen; // exposition only strstate strmode; // exposition only streamsize alsize; // exposition only void* (*palloc)(size_t); // exposition only void (*pfree)(void*); // exposition only }; class istrstream // Removed in C++26 : public basic_istream { public: explicit istrstream(const char* s); explicit istrstream(char* s); istrstream(const char* s, streamsize n); istrstream(char* s, streamsize n); virtual ~istrstream(); strstreambuf* rdbuf() const; char *str(); private: strstreambuf sb; // exposition only }; class ostrstream // Removed in C++26 : public basic_ostream { public: ostrstream(); ostrstream(char* s, int n, ios_base::openmode mode = ios_base::out); virtual ~ostrstream(); strstreambuf* rdbuf() const; void freeze(bool freezefl = true); char* str(); int pcount() const; private: strstreambuf sb; // exposition only }; class strstream // Removed in C++26 : public basic_iostream { public: // Types typedef char char_type; typedef char_traits::int_type int_type; typedef char_traits::pos_type pos_type; typedef char_traits::off_type off_type; // constructors/destructor strstream(); strstream(char* s, int n, ios_base::openmode mode = ios_base::in | ios_base::out); virtual ~strstream(); // Members: strstreambuf* rdbuf() const; void freeze(bool freezefl = true); int pcount() const; char* str(); private: strstreambuf sb; // exposition only }; } // std */ #include <__cxx03/__config> #include <__cxx03/istream> #include <__cxx03/ostream> #include <__cxx03/version> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header #endif _LIBCPP_PUSH_MACROS # include <__cxx03/__undef_macros> _LIBCPP_BEGIN_NAMESPACE_STD class _LIBCPP_DEPRECATED _LIBCPP_EXPORTED_FROM_ABI strstreambuf : public streambuf { public: explicit strstreambuf(streamsize __alsize = 0); strstreambuf(void* (*__palloc)(size_t), void (*__pfree)(void*)); strstreambuf(char* __gnext, streamsize __n, char* __pbeg = nullptr); strstreambuf(const char* __gnext, streamsize __n); strstreambuf(signed char* __gnext, streamsize __n, signed char* __pbeg = nullptr); strstreambuf(const signed char* __gnext, streamsize __n); strstreambuf(unsigned char* __gnext, streamsize __n, unsigned char* __pbeg = nullptr); strstreambuf(const unsigned char* __gnext, streamsize __n); ~strstreambuf() override; void swap(strstreambuf& __rhs); void freeze(bool __freezefl = true); char* str(); int pcount() const; protected: int_type overflow(int_type __c = EOF) override; int_type pbackfail(int_type __c = EOF) override; int_type underflow() override; pos_type seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __which = ios_base::in | ios_base::out) override; pos_type seekpos(pos_type __sp, ios_base::openmode __which = ios_base::in | ios_base::out) override; private: typedef unsigned __mode_type; static const __mode_type __allocated = 0x01; static const __mode_type __constant = 0x02; static const __mode_type __dynamic = 0x04; static const __mode_type __frozen = 0x08; static const streamsize __default_alsize = 4096; __mode_type __strmode_; streamsize __alsize_; void* (*__palloc_)(size_t); void (*__pfree_)(void*); void __init(char* __gnext, streamsize __n, char* __pbeg); }; class _LIBCPP_DEPRECATED _LIBCPP_EXPORTED_FROM_ABI istrstream : public istream { public: _LIBCPP_HIDE_FROM_ABI explicit istrstream(const char* __s) : istream(&__sb_), __sb_(__s, 0) {} _LIBCPP_HIDE_FROM_ABI explicit istrstream(char* __s) : istream(&__sb_), __sb_(__s, 0) {} _LIBCPP_HIDE_FROM_ABI istrstream(const char* __s, streamsize __n) : istream(&__sb_), __sb_(__s, __n) {} _LIBCPP_HIDE_FROM_ABI istrstream(char* __s, streamsize __n) : istream(&__sb_), __sb_(__s, __n) {} ~istrstream() override; _LIBCPP_HIDE_FROM_ABI void swap(istrstream& __rhs) { istream::swap(__rhs); __sb_.swap(__rhs.__sb_); } _LIBCPP_HIDE_FROM_ABI strstreambuf* rdbuf() const { return const_cast(&__sb_); } _LIBCPP_HIDE_FROM_ABI char* str() { return __sb_.str(); } private: strstreambuf __sb_; }; class _LIBCPP_DEPRECATED _LIBCPP_EXPORTED_FROM_ABI ostrstream : public ostream { public: _LIBCPP_HIDE_FROM_ABI ostrstream() : ostream(&__sb_) {} _LIBCPP_HIDE_FROM_ABI ostrstream(char* __s, int __n, ios_base::openmode __mode = ios_base::out) : ostream(&__sb_), __sb_(__s, __n, __s + (__mode & ios::app ? std::strlen(__s) : 0)) {} ~ostrstream() override; _LIBCPP_HIDE_FROM_ABI void swap(ostrstream& __rhs) { ostream::swap(__rhs); __sb_.swap(__rhs.__sb_); } _LIBCPP_HIDE_FROM_ABI strstreambuf* rdbuf() const { return const_cast(&__sb_); } _LIBCPP_HIDE_FROM_ABI void freeze(bool __freezefl = true) { __sb_.freeze(__freezefl); } _LIBCPP_HIDE_FROM_ABI char* str() { return __sb_.str(); } _LIBCPP_HIDE_FROM_ABI int pcount() const { return __sb_.pcount(); } private: strstreambuf __sb_; // exposition only }; class _LIBCPP_DEPRECATED _LIBCPP_EXPORTED_FROM_ABI strstream : public iostream { public: // Types typedef char char_type; typedef char_traits::int_type int_type; typedef char_traits::pos_type pos_type; typedef char_traits::off_type off_type; // constructors/destructor _LIBCPP_HIDE_FROM_ABI strstream() : iostream(&__sb_) {} _LIBCPP_HIDE_FROM_ABI strstream(char* __s, int __n, ios_base::openmode __mode = ios_base::in | ios_base::out) : iostream(&__sb_), __sb_(__s, __n, __s + (__mode & ios::app ? std::strlen(__s) : 0)) {} ~strstream() override; _LIBCPP_HIDE_FROM_ABI void swap(strstream& __rhs) { iostream::swap(__rhs); __sb_.swap(__rhs.__sb_); } // Members: _LIBCPP_HIDE_FROM_ABI strstreambuf* rdbuf() const { return const_cast(&__sb_); } _LIBCPP_HIDE_FROM_ABI void freeze(bool __freezefl = true) { __sb_.freeze(__freezefl); } _LIBCPP_HIDE_FROM_ABI int pcount() const { return __sb_.pcount(); } _LIBCPP_HIDE_FROM_ABI char* str() { return __sb_.str(); } private: strstreambuf __sb_; // exposition only }; _LIBCPP_END_NAMESPACE_STD _LIBCPP_POP_MACROS #endif // _LIBCPP___CXX03_STRSTREAM