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

View File

@@ -0,0 +1,42 @@
[counted.iter.access]
# 24 Iterators library [[iterators]](./#iterators)
## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#counted.iter.access)
### 24.5.7 Counted iterators [[iterators.counted]](iterators.counted#counted.iter.access)
#### 24.5.7.3 Accessors [counted.iter.access]
[🔗](#lib:base,counted_iterator)
`constexpr const I& base() const & noexcept;
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6063)
*Effects*: Equivalent to: return current;
[🔗](#lib:base,counted_iterator_)
`constexpr I base() &&;
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6074)
*Returns*: std::move(current)[.](#2.sentence-1)
[🔗](#lib:count,counted_iterator)
`constexpr iter_difference_t<I> count() const noexcept;
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6085)
*Effects*: Equivalent to: return length;

View File

@@ -0,0 +1,72 @@
[counted.iter.cmp]
# 24 Iterators library [[iterators]](./#iterators)
## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#counted.iter.cmp)
### 24.5.7 Counted iterators [[iterators.counted]](iterators.counted#counted.iter.cmp)
#### 24.5.7.6 Comparisons [counted.iter.cmp]
[🔗](#lib:operator==,counted_iterator)
`template<[common_with](concept.common#concept:common_with "18.4.6Concept common_­with[concept.common]")<I> I2>
friend constexpr bool operator==(
const counted_iterator& x, const counted_iterator<I2>& y);
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6362)
*Preconditions*: x and y refer to
elements of the same sequence ([[counted.iterator]](counted.iterator "24.5.7.1Class template counted_­iterator"))[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6367)
*Effects*: Equivalent to: return x.length == y.length;
[🔗](#lib:operator==,counted_iterator_)
`friend constexpr bool operator==(
const counted_iterator& x, default_sentinel_t) noexcept;
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6379)
*Effects*: Equivalent to: return x.length == 0;
[🔗](#lib:operator%3c=%3e,counted_iterator)
`template<[common_with](concept.common#concept:common_with "18.4.6Concept common_­with[concept.common]")<I> I2>
friend constexpr strong_ordering operator<=>(
const counted_iterator& x, const counted_iterator<I2>& y);
`
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6392)
*Preconditions*: x and y refer to
elements of the same sequence ([[counted.iterator]](counted.iterator "24.5.7.1Class template counted_­iterator"))[.](#4.sentence-1)
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6397)
*Effects*: Equivalent to: return y.length <=> x.length;
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6401)
[*Note [1](#note-1)*:
The argument order in the *Effects*: element is reversed
because length counts down, not up[.](#6.sentence-1)
— *end note*]

View File

@@ -0,0 +1,58 @@
[counted.iter.const]
# 24 Iterators library [[iterators]](./#iterators)
## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#counted.iter.const)
### 24.5.7 Counted iterators [[iterators.counted]](iterators.counted#counted.iter.const)
#### 24.5.7.2 Constructors and conversions [counted.iter.const]
[🔗](#lib:counted_iterator,constructor)
`constexpr counted_iterator(I i, iter_difference_t<I> n);
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6013)
*Hardened preconditions*: n >= 0 is true[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6017)
*Effects*: Initializes current with std::move(i) andlength with n[.](#2.sentence-1)
[🔗](#lib:counted_iterator,constructor_)
`template<class I2>
requires [convertible_to](concept.convertible#concept:convertible_to "18.4.4Concept convertible_­to[concept.convertible]")<const I2&, I>
constexpr counted_iterator(const counted_iterator<I2>& x);
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6031)
*Effects*: Initializes current with x.current andlength with x.length[.](#3.sentence-1)
[🔗](#lib:operator=,counted_iterator)
`template<class I2>
requires [assignable_from](concept.assignable#concept:assignable_from "18.4.8Concept assignable_­from[concept.assignable]")<I&, const I2&>
constexpr counted_iterator& operator=(const counted_iterator<I2>& x);
`
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6045)
*Effects*: Assigns x.current to current andx.length to length[.](#4.sentence-1)
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6050)
*Returns*: *this[.](#5.sentence-1)

View File

@@ -0,0 +1,49 @@
[counted.iter.cust]
# 24 Iterators library [[iterators]](./#iterators)
## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#counted.iter.cust)
### 24.5.7 Counted iterators [[iterators.counted]](iterators.counted#counted.iter.cust)
#### 24.5.7.7 Customizations [counted.iter.cust]
[🔗](#lib:iter_move,counted_iterator)
`friend constexpr decltype(auto)
iter_move(const counted_iterator& i)
noexcept(noexcept(ranges::iter_move(i.current)))
requires [input_iterator](iterator.concept.input#concept:input_iterator "24.3.4.9Concept input_­iterator[iterator.concept.input]")<I>;
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6419)
*Hardened preconditions*: i.length > 0 is true[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6423)
*Effects*: Equivalent to: return ranges::iter_move(i.current);
[🔗](#lib:iter_swap,counted_iterator)
`template<[indirectly_swappable](alg.req.ind.swap#concept:indirectly_swappable "24.3.7.4Concept indirectly_­swappable[alg.req.ind.swap]")<I> I2>
friend constexpr void
iter_swap(const counted_iterator& x, const counted_iterator<I2>& y)
noexcept(noexcept(ranges::iter_swap(x.current, y.current)));
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6437)
*Hardened preconditions*: Both x.length > 0 and y.length > 0 are true[.](#3.sentence-1)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6441)
*Effects*: Equivalent to ranges::iter_swap(x.current, y.current)[.](#4.sentence-1)

View File

@@ -0,0 +1,58 @@
[counted.iter.elem]
# 24 Iterators library [[iterators]](./#iterators)
## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#counted.iter.elem)
### 24.5.7 Counted iterators [[iterators.counted]](iterators.counted#counted.iter.elem)
#### 24.5.7.4 Element access [counted.iter.elem]
[🔗](#lib:operator*,counted_iterator)
`constexpr decltype(auto) operator*();
constexpr decltype(auto) operator*() const
requires [dereferenceable](iterator.synopsis#concept:dereferenceable "24.2Header <iterator>&nbsp;synopsis[iterator.synopsis]")<const I>;
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6100)
*Hardened preconditions*: length > 0 is true[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6104)
*Effects*: Equivalent to: return *current;
[🔗](#lib:operator-%3e,counted_iterator)
`constexpr auto operator->() const noexcept
requires [contiguous_iterator](iterator.concept.contiguous#concept:contiguous_iterator "24.3.4.14Concept contiguous_­iterator[iterator.concept.contiguous]")<I>;
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6116)
*Effects*: Equivalent to: return to_address(current);
[🔗](#lib:operator%5b%5d,counted_iterator)
`constexpr decltype(auto) operator[](iter_difference_t<I> n) const
requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;
`
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6128)
*Hardened preconditions*: n < length is true[.](#4.sentence-1)
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6132)
*Effects*: Equivalent to: return current[n];

View File

@@ -0,0 +1,198 @@
[counted.iter.nav]
# 24 Iterators library [[iterators]](./#iterators)
## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#counted.iter.nav)
### 24.5.7 Counted iterators [[iterators.counted]](iterators.counted#counted.iter.nav)
#### 24.5.7.5 Navigation [counted.iter.nav]
[🔗](#lib:operator++,counted_iterator)
`constexpr counted_iterator& operator++();
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6145)
*Hardened preconditions*: length > 0 is true[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6149)
*Effects*: Equivalent to:++current;--length;return *this;
[🔗](#lib:operator++,counted_iterator_)
`constexpr decltype(auto) operator++(int);
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6165)
*Hardened preconditions*: length > 0 is true[.](#3.sentence-1)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6169)
*Effects*: Equivalent to:--length;try { return current++; }catch(...) { ++length; throw; }
[🔗](#lib:operator++,counted_iterator__)
`constexpr counted_iterator operator++(int)
requires [forward_iterator](iterator.concept.forward#concept:forward_iterator "24.3.4.11Concept forward_­iterator[iterator.concept.forward]")<I>;
`
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6186)
*Effects*: Equivalent to:counted_iterator tmp = *this;++*this;return tmp;
[🔗](#lib:operator--,counted_iterator)
`constexpr counted_iterator& operator--()
requires [bidirectional_iterator](iterator.concept.bidir#concept:bidirectional_iterator "24.3.4.12Concept bidirectional_­iterator[iterator.concept.bidir]")<I>;
`
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6203)
*Effects*: Equivalent to:--current;++length;return *this;
[🔗](#lib:operator--,counted_iterator_)
`constexpr counted_iterator operator--(int)
requires [bidirectional_iterator](iterator.concept.bidir#concept:bidirectional_iterator "24.3.4.12Concept bidirectional_­iterator[iterator.concept.bidir]")<I>;
`
[7](#7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6220)
*Effects*: Equivalent to:counted_iterator tmp = *this;--*this;return tmp;
[🔗](#lib:operator+,counted_iterator)
`constexpr counted_iterator operator+(iter_difference_t<I> n) const
requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;
`
[8](#8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6237)
*Effects*: Equivalent to: return counted_iterator(current + n, length - n);
[🔗](#lib:operator+,counted_iterator_)
`friend constexpr counted_iterator operator+(
iter_difference_t<I> n, const counted_iterator& x)
requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;
`
[9](#9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6250)
*Effects*: Equivalent to: return x + n;
[🔗](#lib:operator+=,counted_iterator)
`constexpr counted_iterator& operator+=(iter_difference_t<I> n)
requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;
`
[10](#10)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6262)
*Hardened preconditions*: n <= length is true[.](#10.sentence-1)
[11](#11)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6266)
*Effects*: Equivalent to:current += n;
length -= n;return *this;
[🔗](#lib:operator-,counted_iterator)
`constexpr counted_iterator operator-(iter_difference_t<I> n) const
requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;
`
[12](#12)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6283)
*Effects*: Equivalent to: return counted_iterator(current - n, length + n);
[🔗](#lib:operator-,counted_iterator_)
`template<[common_with](concept.common#concept:common_with "18.4.6Concept common_­with[concept.common]")<I> I2>
friend constexpr iter_difference_t<I2> operator-(
const counted_iterator& x, const counted_iterator<I2>& y);
`
[13](#13)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6296)
*Preconditions*: x and y refer to elements of the same
sequence ([[counted.iterator]](counted.iterator "24.5.7.1Class template counted_­iterator"))[.](#13.sentence-1)
[14](#14)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6301)
*Effects*: Equivalent to: return y.length - x.length;
[🔗](#lib:operator-,counted_iterator__)
`friend constexpr iter_difference_t<I> operator-(
const counted_iterator& x, default_sentinel_t) noexcept;
`
[15](#15)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6313)
*Effects*: Equivalent to:return -x.length;
[🔗](#lib:operator-,counted_iterator___)
`friend constexpr iter_difference_t<I> operator-(
default_sentinel_t, const counted_iterator& y) noexcept;
`
[16](#16)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6326)
*Effects*: Equivalent to: return y.length;
[🔗](#lib:operator-=,counted_iterator)
`constexpr counted_iterator& operator-=(iter_difference_t<I> n)
requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;
`
[17](#17)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6338)
*Hardened preconditions*: -n <= length is true[.](#17.sentence-1)
[18](#18)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L6342)
*Effects*: Equivalent to:current -= n;
length += n;return *this;

File diff suppressed because one or more lines are too long