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> &&
|
| 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<
|
| 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 |
}
|