This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

226
cppdraft/stringbuf/cons.md Normal file
View File

@@ -0,0 +1,226 @@
[stringbuf.cons]
# 31 Input/output library [[input.output]](./#input.output)
## 31.8 String-based streams [[string.streams]](string.streams#stringbuf.cons)
### 31.8.2 Class template basic_stringbuf [[stringbuf]](stringbuf#cons)
#### 31.8.2.2 Constructors [stringbuf.cons]
[🔗](#lib:basic_stringbuf,constructor)
`explicit basic_stringbuf(ios_base::openmode which);
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8150)
*Effects*: Initializes the base class withbasic_streambuf() ([[streambuf.cons]](streambuf.cons "31.6.3.2Constructors")), and*mode* with which[.](#1.sentence-1)
It isimplementation-defined
whether the sequence pointers
(eback(), gptr(), egptr(),pbase(), pptr(), epptr())
are initialized to null pointers[.](#1.sentence-2)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8163)
*Postconditions*: str().empty() is true[.](#2.sentence-1)
[🔗](#lib:basic_stringbuf,constructor_)
`explicit basic_stringbuf(
const basic_string<charT, traits, Allocator>& s,
ios_base::openmode which = ios_base::in | ios_base::out);
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8176)
*Effects*: Initializes the base class withbasic_streambuf() ([[streambuf.cons]](streambuf.cons "31.6.3.2Constructors")),*mode* with which, and*buf* with s,
then calls *init-buf-ptrs*()[.](#3.sentence-1)
[🔗](#lib:basic_stringbuf,constructor__)
`basic_stringbuf(ios_base::openmode which, const Allocator& a);
`
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8191)
*Effects*: Initializes the base class withbasic_streambuf() ([[streambuf.cons]](streambuf.cons "31.6.3.2Constructors")),*mode* with which, and*buf* with a,
then calls *init-buf-ptrs*()[.](#4.sentence-1)
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8199)
*Postconditions*: str().empty() is true[.](#5.sentence-1)
[🔗](#lib:basic_stringbuf,constructor___)
`explicit basic_stringbuf(
basic_string<charT, traits, Allocator>&& s,
ios_base::openmode which = ios_base::in | ios_base::out);
`
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8212)
*Effects*: Initializes the base class with basic_streambuf() ([[streambuf.cons]](streambuf.cons "31.6.3.2Constructors")),*mode* with which, and*buf* with std::move(s),
then calls *init-buf-ptrs*()[.](#6.sentence-1)
[🔗](#lib:basic_stringbuf,constructor____)
`template<class SAlloc>
basic_stringbuf(
const basic_string<charT, traits, SAlloc>& s,
ios_base::openmode which, const Allocator& a);
`
[7](#7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8229)
*Effects*: Initializes the base class with basic_streambuf() ([[streambuf.cons]](streambuf.cons "31.6.3.2Constructors")),*mode* with which, and*buf* with {s,a},
then calls *init-buf-ptrs*()[.](#7.sentence-1)
[🔗](#lib:basic_stringbuf,constructor_____)
`template<class SAlloc>
explicit basic_stringbuf(
const basic_string<charT, traits, SAlloc>& s,
ios_base::openmode which = ios_base::in | ios_base::out);
`
[8](#8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8246)
*Constraints*: is_same_v<SAlloc, Allocator> is false[.](#8.sentence-1)
[9](#9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8250)
*Effects*: Initializes the base class with basic_streambuf() ([[streambuf.cons]](streambuf.cons "31.6.3.2Constructors")),*mode* with which, and*buf* with s,
then calls *init-buf-ptrs*()[.](#9.sentence-1)
[🔗](#lib:basic_stringbuf,constructor______)
`template<class T>
explicit basic_stringbuf(const T& t, ios_base::openmode which = ios_base::in | ios_base::out);
template<class T>
basic_stringbuf(const T& t, const Allocator& a);
template<class T>
basic_stringbuf(const T& t, ios_base::openmode which, const Allocator& a);
`
[10](#10)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8269)
Let which be ios_base::in | ios_base::out for the overload with no parameter which, anda be Allocator() for the overload with no parameter a[.](#10.sentence-1)
[11](#11)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8274)
*Constraints*: is_convertible_v<const T&, basic_string_view<charT, traits>> is true[.](#11.sentence-1)
[12](#12)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8279)
*Effects*: Creates a variable sv as if bybasic_string_view<charT, traits> sv = t,
then value-initializes the base class,
initializes *mode* with which, and
direct-non-list-initializes *buf* with sv, a,
then calls *init-buf-ptrs*()[.](#12.sentence-1)
[🔗](#lib:basic_stringbuf,constructor_______)
`basic_stringbuf(basic_stringbuf&& rhs);
basic_stringbuf(basic_stringbuf&& rhs, const Allocator& a);
`
[13](#13)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8296)
*Effects*: Copy constructs the base class from rhs and
initializes *mode* with rhs.mode[.](#13.sentence-1)
In the first form buf is initialized
from std::move(rhs).str()[.](#13.sentence-2)
In the second form *buf* is initialized
from {std::move(rhs).str(), a}[.](#13.sentence-3)
It isimplementation-defined whether the sequence pointers in *this (eback(), gptr(), egptr(),pbase(), pptr(), epptr()) obtain
the values which rhs had[.](#13.sentence-4)
[14](#14)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L8311)
*Postconditions*: Let rhs_p refer to the state ofrhs just prior to this construction and let rhs_a refer to the state of rhs just after this construction[.](#14.sentence-1)
- [(14.1)](#14.1)
str() == rhs_p.str()
- [(14.2)](#14.2)
gptr() - eback() == rhs_p.gptr() - rhs_p.eback()
- [(14.3)](#14.3)
egptr() - eback() == rhs_p.egptr() - rhs_p.eback()
- [(14.4)](#14.4)
pptr() - pbase() == rhs_p.pptr() - rhs_p.pbase()
- [(14.5)](#14.5)
epptr() - pbase() == rhs_p.epptr() - rhs_p.pbase()
- [(14.6)](#14.6)
if (eback()) eback() != rhs_a.eback()
- [(14.7)](#14.7)
if (gptr()) gptr() != rhs_a.gptr()
- [(14.8)](#14.8)
if (egptr()) egptr() != rhs_a.egptr()
- [(14.9)](#14.9)
if (pbase()) pbase() != rhs_a.pbase()
- [(14.10)](#14.10)
if (pptr()) pptr() != rhs_a.pptr()
- [(14.11)](#14.11)
if (epptr()) epptr() != rhs_a.epptr()
- [(14.12)](#14.12)
getloc() == rhs_p.getloc()
- [(14.13)](#14.13)
rhs is empty but usable,
as if std::move(rhs).str() was called.