35 #define _SSTREAM_TCC 1 37 #pragma GCC system_header 39 namespace std _GLIBCXX_VISIBILITY(default)
41 _GLIBCXX_BEGIN_NAMESPACE_VERSION
43 template <
class _CharT,
class _Traits,
class _Alloc>
44 typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
48 int_type __ret = traits_type::eof();
49 if (this->eback() < this->gptr())
53 const bool __testeof = traits_type::eq_int_type(__c, __ret);
56 const bool __testeq = traits_type::eq(traits_type::
60 if (__testeq || __testout)
64 *this->gptr() = traits_type::to_char_type(__c);
71 __ret = traits_type::not_eof(__c);
77 template <
class _CharT,
class _Traits,
class _Alloc>
78 typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
83 if (__builtin_expect(!__testout,
false))
84 return traits_type::eof();
86 const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof());
87 if (__builtin_expect(__testeof,
false))
88 return traits_type::not_eof(__c);
90 const __size_type __capacity = _M_string.capacity();
91 const __size_type __max_size = _M_string.max_size();
92 const bool __testput = this->pptr() < this->epptr();
93 if (__builtin_expect(!__testput && __capacity == __max_size,
false))
94 return traits_type::eof();
98 const char_type __conv = traits_type::to_char_type(__c);
110 const __size_type __opt_len =
std::max(__size_type(2 * __capacity),
112 const __size_type __len =
std::min(__opt_len, __max_size);
116 __tmp.
assign(this->pbase(), this->epptr() - this->pbase());
118 _M_string.swap(__tmp);
119 _M_sync(const_cast<char_type*>(_M_string.data()),
120 this->gptr() - this->eback(), this->pptr() - this->pbase());
123 *this->pptr() = __conv;
128 template <
class _CharT,
class _Traits,
class _Alloc>
129 typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
133 int_type __ret = traits_type::eof();
140 if (this->gptr() < this->egptr())
141 __ret = traits_type::to_int_type(*this->gptr());
146 template <
class _CharT,
class _Traits,
class _Alloc>
147 typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
149 seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode)
151 pos_type __ret = pos_type(off_type(-1));
152 bool __testin = (
ios_base::in & this->_M_mode & __mode) != 0;
153 bool __testout = (
ios_base::out & this->_M_mode & __mode) != 0;
154 const bool __testboth = __testin && __testout && __way !=
ios_base::cur;
160 const char_type* __beg = __testin ? this->eback() : this->pbase();
161 if ((__beg || !__off) && (__testin || __testout || __testboth))
165 off_type __newoffi = __off;
166 off_type __newoffo = __newoffi;
169 __newoffi += this->gptr() - __beg;
170 __newoffo += this->pptr() - __beg;
173 __newoffo = __newoffi += this->egptr() - __beg;
175 if ((__testin || __testboth)
177 && this->egptr() - __beg >= __newoffi)
179 this->setg(this->eback(), this->eback() + __newoffi,
181 __ret = pos_type(__newoffi);
183 if ((__testout || __testboth)
185 && this->egptr() - __beg >= __newoffo)
187 _M_pbump(this->pbase(), this->epptr(), __newoffo);
188 __ret = pos_type(__newoffo);
194 template <
class _CharT,
class _Traits,
class _Alloc>
195 typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
197 seekpos(pos_type __sp, ios_base::openmode __mode)
199 pos_type __ret = pos_type(off_type(-1));
200 const bool __testin = (
ios_base::in & this->_M_mode & __mode) != 0;
201 const bool __testout = (
ios_base::out & this->_M_mode & __mode) != 0;
203 const char_type* __beg = __testin ? this->eback() : this->pbase();
204 if ((__beg || !off_type(__sp)) && (__testin || __testout))
208 const off_type __pos(__sp);
209 const bool __testpos = (0 <= __pos
210 && __pos <= this->egptr() - __beg);
214 this->setg(this->eback(), this->eback() + __pos,
217 _M_pbump(this->pbase(), this->epptr(), __pos);
224 template <
class _CharT,
class _Traits,
class _Alloc>
227 _M_sync(char_type* __base, __size_type __i, __size_type __o)
231 char_type* __endg = __base + _M_string.size();
232 char_type* __endp = __base + _M_string.capacity();
234 if (__base != _M_string.data())
243 this->setg(__base, __base + __i, __endg);
246 _M_pbump(__base, __endp, __o);
251 this->setg(__endg, __endg, __endg);
255 template <
class _CharT,
class _Traits,
class _Alloc>
258 _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off)
260 this->setp(__pbeg, __pend);
261 while (__off > __gnu_cxx::__numeric_traits<int>::__max)
263 this->pbump(__gnu_cxx::__numeric_traits<int>::__max);
264 __off -= __gnu_cxx::__numeric_traits<int>::__max;
271 #if _GLIBCXX_EXTERN_TEMPLATE 277 #ifdef _GLIBCXX_USE_WCHAR_T 285 _GLIBCXX_END_NAMESPACE_VERSION
Controlling output for std::string.
static const seekdir cur
Request a seek relative to the current position within the sequence.
void push_back(_CharT __c)
Append a single character.
virtual int_type underflow()
Fetches more data from the controlled sequence.
ISO C++ entities toplevel namespace is std.
basic_string & assign(const basic_string &__str)
Set value to contents of another string.
Controlling input for std::string.
void reserve(size_type __res_arg=0)
Attempt to preallocate enough memory for specified number of characters.
virtual pos_type seekpos(pos_type __sp, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
_GLIBCXX14_CONSTEXPR const _Tp & max(const _Tp &, const _Tp &)
This does what you think it does.
Controlling input and output for std::string.
The actual work of input and output (for std::string).
virtual int_type overflow(int_type __c=traits_type::eof())
Consumes data from the buffer; writes to the controlled sequence.
static const openmode in
Open for input. Default for ifstream and fstream.
static const openmode out
Open for output. Default for ofstream and fstream.
virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
_GLIBCXX14_CONSTEXPR const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
static const seekdir end
Request a seek relative to the current end of the sequence.
virtual int_type pbackfail(int_type __c=traits_type::eof())
Tries to back up the input sequence.