| Index: third_party/libcxx/include/strstream
|
| ===================================================================
|
| --- third_party/libcxx/include/strstream (revision 0)
|
| +++ third_party/libcxx/include/strstream (revision 0)
|
| @@ -0,0 +1,400 @@
|
| +// -*- C++ -*-
|
| +//===--------------------------- strstream --------------------------------===//
|
| +//
|
| +// The LLVM Compiler Infrastructure
|
| +//
|
| +// This file is dual licensed under the MIT and the University of Illinois Open
|
| +// Source Licenses. See LICENSE.TXT for details.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +
|
| +#ifndef _LIBCPP_STRSTREAM
|
| +#define _LIBCPP_STRSTREAM
|
| +
|
| +/*
|
| + strstream synopsis
|
| +
|
| +class strstreambuf
|
| + : public basic_streambuf<char>
|
| +{
|
| +public:
|
| + explicit strstreambuf(streamsize alsize_arg = 0);
|
| + strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*));
|
| + strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = 0);
|
| + strstreambuf(const char* gnext_arg, streamsize n);
|
| +
|
| + strstreambuf(signed char* gnext_arg, streamsize n, signed char* pbeg_arg = 0);
|
| + strstreambuf(const signed char* gnext_arg, streamsize n);
|
| + strstreambuf(unsigned char* gnext_arg, streamsize n, unsigned char* pbeg_arg = 0);
|
| + 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
|
| + : public basic_istream<char>
|
| +{
|
| +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
|
| + : public basic_ostream<char>
|
| +{
|
| +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
|
| + : public basic_iostream<char>
|
| +{
|
| +public:
|
| + // Types
|
| + typedef char char_type;
|
| + typedef char_traits<char>::int_type int_type;
|
| + typedef char_traits<char>::pos_type pos_type;
|
| + typedef char_traits<char>::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 <__config>
|
| +#include <ostream>
|
| +#include <istream>
|
| +
|
| +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
| +#pragma GCC system_header
|
| +#endif
|
| +
|
| +_LIBCPP_BEGIN_NAMESPACE_STD
|
| +
|
| +class _LIBCPP_TYPE_VIS strstreambuf
|
| + : public streambuf
|
| +{
|
| +public:
|
| + explicit strstreambuf(streamsize __alsize = 0);
|
| + strstreambuf(void* (*__palloc)(size_t), void (*__pfree)(void*));
|
| + strstreambuf(char* __gnext, streamsize __n, char* __pbeg = 0);
|
| + strstreambuf(const char* __gnext, streamsize __n);
|
| +
|
| + strstreambuf(signed char* __gnext, streamsize __n, signed char* __pbeg = 0);
|
| + strstreambuf(const signed char* __gnext, streamsize __n);
|
| + strstreambuf(unsigned char* __gnext, streamsize __n, unsigned char* __pbeg = 0);
|
| + strstreambuf(const unsigned char* __gnext, streamsize __n);
|
| +
|
| +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstreambuf(strstreambuf&& __rhs);
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstreambuf& operator=(strstreambuf&& __rhs);
|
| +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| +
|
| + 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);
|
| +
|
| +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);
|
| +};
|
| +
|
| +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| +
|
| +inline _LIBCPP_INLINE_VISIBILITY
|
| +strstreambuf::strstreambuf(strstreambuf&& __rhs)
|
| + : streambuf(__rhs),
|
| + __strmode_(__rhs.__strmode_),
|
| + __alsize_(__rhs.__alsize_),
|
| + __palloc_(__rhs.__palloc_),
|
| + __pfree_(__rhs.__pfree_)
|
| +{
|
| + __rhs.setg(nullptr, nullptr, nullptr);
|
| + __rhs.setp(nullptr, nullptr);
|
| +}
|
| +
|
| +inline _LIBCPP_INLINE_VISIBILITY
|
| +strstreambuf&
|
| +strstreambuf::operator=(strstreambuf&& __rhs)
|
| +{
|
| + if (eback() && (__strmode_ & __allocated) != 0 && (__strmode_ & __frozen) == 0)
|
| + {
|
| + if (__pfree_)
|
| + __pfree_(eback());
|
| + else
|
| + delete [] eback();
|
| + }
|
| + streambuf::operator=(__rhs);
|
| + __strmode_ = __rhs.__strmode_;
|
| + __alsize_ = __rhs.__alsize_;
|
| + __palloc_ = __rhs.__palloc_;
|
| + __pfree_ = __rhs.__pfree_;
|
| + __rhs.setg(nullptr, nullptr, nullptr);
|
| + __rhs.setp(nullptr, nullptr);
|
| + return *this;
|
| +}
|
| +
|
| +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| +
|
| +class _LIBCPP_TYPE_VIS istrstream
|
| + : public istream
|
| +{
|
| +public:
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + explicit istrstream(const char* __s)
|
| + : istream(&__sb_), __sb_(__s, 0) {}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + explicit istrstream(char* __s)
|
| + : istream(&__sb_), __sb_(__s, 0) {}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + istrstream(const char* __s, streamsize __n)
|
| + : istream(&__sb_), __sb_(__s, __n) {}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + istrstream(char* __s, streamsize __n)
|
| + : istream(&__sb_), __sb_(__s, __n) {}
|
| +
|
| +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + istrstream(istrstream&& __rhs)
|
| + : istream(_VSTD::move(__rhs)),
|
| + __sb_(_VSTD::move(__rhs.__sb_))
|
| + {
|
| + istream::set_rdbuf(&__sb_);
|
| + }
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + istrstream& operator=(istrstream&& __rhs)
|
| + {
|
| + istream::operator=(_VSTD::move(__rhs));
|
| + __sb_ = _VSTD::move(__rhs.__sb_);
|
| + return *this;
|
| + }
|
| +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| +
|
| + virtual ~istrstream();
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + void swap(istrstream& __rhs)
|
| + {
|
| + istream::swap(__rhs);
|
| + __sb_.swap(__rhs.__sb_);
|
| + }
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + char *str() {return __sb_.str();}
|
| +
|
| +private:
|
| + strstreambuf __sb_;
|
| +};
|
| +
|
| +class _LIBCPP_TYPE_VIS ostrstream
|
| + : public ostream
|
| +{
|
| +public:
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + ostrstream()
|
| + : ostream(&__sb_) {}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + ostrstream(char* __s, int __n, ios_base::openmode __mode = ios_base::out)
|
| + : ostream(&__sb_),
|
| + __sb_(__s, __n, __s + (__mode & ios::app ? strlen(__s) : 0))
|
| + {}
|
| +
|
| +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + ostrstream(ostrstream&& __rhs)
|
| + : ostream(_VSTD::move(__rhs)),
|
| + __sb_(_VSTD::move(__rhs.__sb_))
|
| + {
|
| + ostream::set_rdbuf(&__sb_);
|
| + }
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + ostrstream& operator=(ostrstream&& __rhs)
|
| + {
|
| + ostream::operator=(_VSTD::move(__rhs));
|
| + __sb_ = _VSTD::move(__rhs.__sb_);
|
| + return *this;
|
| + }
|
| +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| +
|
| + virtual ~ostrstream();
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + void swap(ostrstream& __rhs)
|
| + {
|
| + ostream::swap(__rhs);
|
| + __sb_.swap(__rhs.__sb_);
|
| + }
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + char* str() {return __sb_.str();}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + int pcount() const {return __sb_.pcount();}
|
| +
|
| +private:
|
| + strstreambuf __sb_; // exposition only
|
| +};
|
| +
|
| +class _LIBCPP_TYPE_VIS strstream
|
| + : public iostream
|
| +{
|
| +public:
|
| + // Types
|
| + typedef char char_type;
|
| + typedef char_traits<char>::int_type int_type;
|
| + typedef char_traits<char>::pos_type pos_type;
|
| + typedef char_traits<char>::off_type off_type;
|
| +
|
| + // constructors/destructor
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstream()
|
| + : iostream(&__sb_) {}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstream(char* __s, int __n, ios_base::openmode __mode = ios_base::in | ios_base::out)
|
| + : iostream(&__sb_),
|
| + __sb_(__s, __n, __s + (__mode & ios::app ? strlen(__s) : 0))
|
| + {}
|
| +
|
| +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstream(strstream&& __rhs)
|
| + : iostream(_VSTD::move(__rhs)),
|
| + __sb_(_VSTD::move(__rhs.__sb_))
|
| + {
|
| + iostream::set_rdbuf(&__sb_);
|
| + }
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstream& operator=(strstream&& __rhs)
|
| + {
|
| + iostream::operator=(_VSTD::move(__rhs));
|
| + __sb_ = _VSTD::move(__rhs.__sb_);
|
| + return *this;
|
| + }
|
| +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
| +
|
| + virtual ~strstream();
|
| +
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + void swap(strstream& __rhs)
|
| + {
|
| + iostream::swap(__rhs);
|
| + __sb_.swap(__rhs.__sb_);
|
| + }
|
| +
|
| + // Members:
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + strstreambuf* rdbuf() const {return const_cast<strstreambuf*>(&__sb_);}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + void freeze(bool __freezefl = true) {__sb_.freeze(__freezefl);}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + int pcount() const {return __sb_.pcount();}
|
| + _LIBCPP_INLINE_VISIBILITY
|
| + char* str() {return __sb_.str();}
|
| +
|
| +private:
|
| + strstreambuf __sb_; // exposition only
|
| +};
|
| +
|
| +_LIBCPP_END_NAMESPACE_STD
|
| +
|
| +#endif // _LIBCPP_STRSTREAM
|
|
|