From Jason Turner

[range.chunk.outer.iter]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpxgoaleuq/{from.md → to.md} +101 -0
tmp/tmpxgoaleuq/{from.md → to.md} RENAMED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Class `chunk_view::outer-iterator` <a id="range.chunk.outer.iter">[[range.chunk.outer.iter]]</a>
2
+
3
+ ``` cpp
4
+ namespace std::ranges {
5
+ template<view V>
6
+ requires input_range<V>
7
+ class chunk_view<V>::outer-iterator {
8
+ chunk_view* parent_; // exposition only
9
+
10
+ constexpr explicit outer-iterator(chunk_view& parent); // exposition only
11
+
12
+ public:
13
+ using iterator_concept = input_iterator_tag;
14
+ using difference_type = range_difference_t<V>;
15
+
16
+ // [range.chunk.outer.value], class chunk_view::outer-iterator::value_type
17
+ struct value_type;
18
+
19
+ outer-iterator(outer-iterator&&) = default;
20
+ outer-iterator& operator=(outer-iterator&&) = default;
21
+
22
+ constexpr value_type operator*() const;
23
+ constexpr outer-iterator& operator++();
24
+ constexpr void operator++(int);
25
+
26
+ friend constexpr bool operator==(const outer-iterator& x, default_sentinel_t);
27
+
28
+ friend constexpr difference_type operator-(default_sentinel_t y, const outer-iterator& x)
29
+ requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;
30
+ friend constexpr difference_type operator-(const outer-iterator& x, default_sentinel_t y)
31
+ requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;
32
+ };
33
+ }
34
+ ```
35
+
36
+ ``` cpp
37
+ constexpr explicit outer-iterator(chunk_view& parent);
38
+ ```
39
+
40
+ *Effects:* Initializes *parent\_* with `addressof(parent)`.
41
+
42
+ ``` cpp
43
+ constexpr value_type operator*() const;
44
+ ```
45
+
46
+ *Preconditions:* `*this == default_sentinel` is `false`.
47
+
48
+ *Returns:* `value_type(*`*`parent_`*`)`.
49
+
50
+ ``` cpp
51
+ constexpr outer-iterator& operator++();
52
+ ```
53
+
54
+ *Preconditions:* `*this == default_sentinel` is `false`.
55
+
56
+ *Effects:* Equivalent to:
57
+
58
+ ``` cpp
59
+ ranges::advance(*parent_->current_, parent_->remainder_, ranges::end(parent_->base_));
60
+ parent_->remainder_ = parent_->n_;
61
+ return *this;
62
+ ```
63
+
64
+ ``` cpp
65
+ constexpr void operator++(int);
66
+ ```
67
+
68
+ *Effects:* Equivalent to `++*this`.
69
+
70
+ ``` cpp
71
+ friend constexpr bool operator==(const outer-iterator& x, default_sentinel_t);
72
+ ```
73
+
74
+ *Effects:* Equivalent to:
75
+
76
+ ``` cpp
77
+ return *x.parent_->current_ == ranges::end(x.parent_->base_) && x.parent_->remainder_ != 0;
78
+ ```
79
+
80
+ ``` cpp
81
+ friend constexpr difference_type operator-(default_sentinel_t y, const outer-iterator& x)
82
+ requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;
83
+ ```
84
+
85
+ *Effects:* Equivalent to:
86
+
87
+ ``` cpp
88
+ const auto dist = ranges::end(x.parent_->base_) - *x.parent_->current_;
89
+ if (dist < x.parent_->remainder_) {
90
+ return dist == 0 ? 0 : 1;
91
+ }
92
+ return div-ceil(dist - x.parent_->remainder_, x.parent_->n_) + 1;
93
+ ```
94
+
95
+ ``` cpp
96
+ friend constexpr difference_type operator-(const outer-iterator& x, default_sentinel_t y)
97
+ requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;
98
+ ```
99
+
100
+ *Effects:* Equivalent to: `return -(y - x);`
101
+