From Jason Turner

[range.join.with.iterator]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp2g3xxufq/{from.md → to.md} +11 -11
tmp/tmp2g3xxufq/{from.md → to.md} RENAMED
@@ -2,11 +2,11 @@
2
 
3
  ``` cpp
4
  namespace std::ranges {
5
  template<input_range V, forward_range Pattern>
6
  requires view<V> && input_range<range_reference_t<V>>
7
- && view<Pattern> && compatible-joinable-ranges<range_reference_t<V>, Pattern>
8
  template<bool Const>
9
  class join_with_view<V, Pattern>::iterator {
10
  using Parent = maybe-const<Const, join_with_view>; // exposition only
11
  using Base = maybe-const<Const, V>; // exposition only
12
  using InnerBase = range_reference_t<Base>; // exposition only
@@ -105,11 +105,11 @@ as follows:
105
  iter_reference_t<PatternIter>>>
106
  ```
107
 
108
  is `false`, `iterator_category` denotes `input_iterator_tag`.
109
  - Otherwise, if *OUTERC*, *INNERC*, and *PATTERNC* each model
110
- `derived_from<bidirectional_iterator_category>` and *`InnerBase`* and
111
  *`PatternBase`* each model `common_range`, `iterator_category` denotes
112
  `bidirectional_iterator_tag`.
113
  - Otherwise, if *OUTERC*, *INNERC*, and *PATTERNC* each model
114
  `derived_from<forward_iterator_tag>`, `iterator_category` denotes
115
  `forward_iterator_tag`.
@@ -173,20 +173,20 @@ constexpr void satisfy();
173
  ``` cpp
174
  while (true) {
175
  if (inner_it_.index() == 0) {
176
  if (std::get<0>(inner_it_) != ranges::end(parent_->pattern_))
177
  break;
178
- inner_it_.emplace<1>(ranges::begin(update-inner()));
179
  } else {
180
  if (std::get<1>(inner_it_) != ranges::end(get-inner()))
181
  break;
182
  if (++outer() == ranges::end(parent_->base_)) {
183
  if constexpr (ref-is-glvalue)
184
- inner_it_.emplace<0>();
185
  break;
186
  }
187
- inner_it_.emplace<0>(ranges::begin(parent_->pattern_));
188
  }
189
  }
190
  ```
191
 
192
  [*Note 1*: `join_with_view` iterators use the *satisfy* function to
@@ -203,11 +203,11 @@ constexpr explicit iterator(Parent& parent)
203
  first overload, also initializes *outer_it\_* with `std::move(outer)`.
204
  Then, equivalent to:
205
 
206
  ``` cpp
207
  if (outer() != ranges::end(parent_->base_)) {
208
- inner_it_.emplace<1>(ranges::begin(update-inner()));
209
  satisfy();
210
  }
211
  ```
212
 
213
  ``` cpp
@@ -220,13 +220,13 @@ constexpr iterator(iterator<!Const> i)
220
  *Effects:* Initializes *outer_it\_* with `std::move(i.`*`outer_it_`*`)`
221
  and *parent\_* with `i.`*`parent_`*. Then, equivalent to:
222
 
223
  ``` cpp
224
  if (i.inner_it_.index() == 0)
225
- inner_it_.emplace<0>(std::get<0>(std::move(i.inner_it_)));
226
  else
227
- inner_it_.emplace<1>(std::get<1>(std::move(i.inner_it_)));
228
  ```
229
 
230
  [*Note 2*: `Const` can only be `true` when *Base* models
231
  `forward_range`. — *end note*]
232
 
@@ -282,27 +282,27 @@ constexpr iterator& operator--()
282
  *Effects:* Equivalent to:
283
 
284
  ``` cpp
285
  if (outer_it_ == ranges::end(parent_->base_)) {
286
  auto&& inner = *--outer_it_;
287
- inner_it_.emplace<1>(ranges::end(inner));
288
  }
289
 
290
  while (true) {
291
  if (inner_it_.index() == 0) {
292
  auto& it = std::get<0>(inner_it_);
293
  if (it == ranges::begin(parent_->pattern_)) {
294
  auto&& inner = *--outer_it_;
295
- inner_it_.emplace<1>(ranges::end(inner));
296
  } else {
297
  break;
298
  }
299
  } else {
300
  auto& it = std::get<1>(inner_it_);
301
  auto&& inner = *outer_it_;
302
  if (it == ranges::begin(inner)) {
303
- inner_it_.emplace<0>(ranges::end(parent_->pattern_));
304
  } else {
305
  break;
306
  }
307
  }
308
  }
 
2
 
3
  ``` cpp
4
  namespace std::ranges {
5
  template<input_range V, forward_range Pattern>
6
  requires view<V> && input_range<range_reference_t<V>>
7
+ && view<Pattern> && concatable<range_reference_t<V>, Pattern>
8
  template<bool Const>
9
  class join_with_view<V, Pattern>::iterator {
10
  using Parent = maybe-const<Const, join_with_view>; // exposition only
11
  using Base = maybe-const<Const, V>; // exposition only
12
  using InnerBase = range_reference_t<Base>; // exposition only
 
105
  iter_reference_t<PatternIter>>>
106
  ```
107
 
108
  is `false`, `iterator_category` denotes `input_iterator_tag`.
109
  - Otherwise, if *OUTERC*, *INNERC*, and *PATTERNC* each model
110
+ `derived_from<bidirectional_iterator_tag>` and *`InnerBase`* and
111
  *`PatternBase`* each model `common_range`, `iterator_category` denotes
112
  `bidirectional_iterator_tag`.
113
  - Otherwise, if *OUTERC*, *INNERC*, and *PATTERNC* each model
114
  `derived_from<forward_iterator_tag>`, `iterator_category` denotes
115
  `forward_iterator_tag`.
 
173
  ``` cpp
174
  while (true) {
175
  if (inner_it_.index() == 0) {
176
  if (std::get<0>(inner_it_) != ranges::end(parent_->pattern_))
177
  break;
178
+ inner_it_.template emplace<1>(ranges::begin(update-inner()));
179
  } else {
180
  if (std::get<1>(inner_it_) != ranges::end(get-inner()))
181
  break;
182
  if (++outer() == ranges::end(parent_->base_)) {
183
  if constexpr (ref-is-glvalue)
184
+ inner_it_.template emplace<0>();
185
  break;
186
  }
187
+ inner_it_.template emplace<0>(ranges::begin(parent_->pattern_));
188
  }
189
  }
190
  ```
191
 
192
  [*Note 1*: `join_with_view` iterators use the *satisfy* function to
 
203
  first overload, also initializes *outer_it\_* with `std::move(outer)`.
204
  Then, equivalent to:
205
 
206
  ``` cpp
207
  if (outer() != ranges::end(parent_->base_)) {
208
+ inner_it_.template emplace<1>(ranges::begin(update-inner()));
209
  satisfy();
210
  }
211
  ```
212
 
213
  ``` cpp
 
220
  *Effects:* Initializes *outer_it\_* with `std::move(i.`*`outer_it_`*`)`
221
  and *parent\_* with `i.`*`parent_`*. Then, equivalent to:
222
 
223
  ``` cpp
224
  if (i.inner_it_.index() == 0)
225
+ inner_it_.template emplace<0>(std::get<0>(std::move(i.inner_it_)));
226
  else
227
+ inner_it_.template emplace<1>(std::get<1>(std::move(i.inner_it_)));
228
  ```
229
 
230
  [*Note 2*: `Const` can only be `true` when *Base* models
231
  `forward_range`. — *end note*]
232
 
 
282
  *Effects:* Equivalent to:
283
 
284
  ``` cpp
285
  if (outer_it_ == ranges::end(parent_->base_)) {
286
  auto&& inner = *--outer_it_;
287
+ inner_it_.template emplace<1>(ranges::end(inner));
288
  }
289
 
290
  while (true) {
291
  if (inner_it_.index() == 0) {
292
  auto& it = std::get<0>(inner_it_);
293
  if (it == ranges::begin(parent_->pattern_)) {
294
  auto&& inner = *--outer_it_;
295
+ inner_it_.template emplace<1>(ranges::end(inner));
296
  } else {
297
  break;
298
  }
299
  } else {
300
  auto& it = std::get<1>(inner_it_);
301
  auto&& inner = *outer_it_;
302
  if (it == ranges::begin(inner)) {
303
+ inner_it_.template emplace<0>(ranges::end(parent_->pattern_));
304
  } else {
305
  break;
306
  }
307
  }
308
  }