From Jason Turner

[coro.generator.iterator]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp9yylk4il/{from.md → to.md} +291 -0
tmp/tmp9yylk4il/{from.md → to.md} RENAMED
@@ -0,0 +1,291 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Class `generator::iterator` <a id="coro.generator.iterator">[[coro.generator.iterator]]</a>
2
+
3
+ ``` cpp
4
+ namespace std {
5
+ template<class Ref, class V, class Allocator>
6
+ class generator<Ref, V, Allocator>::iterator {
7
+ public:
8
+ using value_type = value;
9
+ using difference_type = ptrdiff_t;
10
+
11
+ iterator(iterator&& other) noexcept;
12
+ iterator& operator=(iterator&& other) noexcept;
13
+
14
+ reference operator*() const noexcept(is_nothrow_copy_constructible_v<reference>);
15
+ iterator& operator++();
16
+ void operator++(int);
17
+
18
+ friend bool operator==(const iterator& i, default_sentinel_t);
19
+
20
+ private:
21
+ coroutine_handle<promise_type> coroutine_; // exposition only
22
+ };
23
+ }
24
+ ```
25
+
26
+ ``` cpp
27
+ iterator(iterator&& other) noexcept;
28
+ ```
29
+
30
+ *Effects:* Initializes *coroutine\_* with
31
+ `exchange(other.`*`coroutine_`*`, {})`.
32
+
33
+ ``` cpp
34
+ iterator& operator=(iterator&& other) noexcept;
35
+ ```
36
+
37
+ *Effects:* Equivalent to
38
+ *`coroutine_`*` = exchange(other.`*`coroutine_`*`, {})`.
39
+
40
+ *Returns:* `*this`.
41
+
42
+ ``` cpp
43
+ reference operator*() const noexcept(is_nothrow_copy_constructible_v<reference>);
44
+ ```
45
+
46
+ *Preconditions:* For some `generator` object `x`, *coroutine\_* is in
47
+ `*x.`*`active_`* and `x.`*`active_`*`->top()` refers to a suspended
48
+ coroutine with promise object `p`.
49
+
50
+ *Effects:* Equivalent to:
51
+ `return static_cast<`*`reference`*`>(*p.`*`value_`*`);`
52
+
53
+ ``` cpp
54
+ iterator& operator++();
55
+ ```
56
+
57
+ *Preconditions:* For some `generator` object `x`, *coroutine\_* is in
58
+ `*x.`*`active_`*.
59
+
60
+ *Effects:* Equivalent to `x.`*`active_`*`->top().resume()`.
61
+
62
+ *Returns:* `*this`.
63
+
64
+ ``` cpp
65
+ void operator++(int);
66
+ ```
67
+
68
+ *Effects:* Equivalent to `++*this`.
69
+
70
+ ``` cpp
71
+ friend bool operator==(const iterator& i, default_sentinel_t);
72
+ ```
73
+
74
+ *Effects:* Equivalent to: `return i.`*`coroutine_`*`.done();`
75
+
76
+ <!-- Link reference definitions -->
77
+ [basic.lookup.argdep]: basic.md#basic.lookup.argdep
78
+ [concepts.equality]: concepts.md#concepts.equality
79
+ [containers]: containers.md#containers
80
+ [conv.rval]: expr.md#conv.rval
81
+ [coro.generator]: #coro.generator
82
+ [coro.generator.class]: #coro.generator.class
83
+ [coro.generator.iterator]: #coro.generator.iterator
84
+ [coro.generator.members]: #coro.generator.members
85
+ [coro.generator.promise]: #coro.generator.promise
86
+ [coroutine.generator.overview]: #coroutine.generator.overview
87
+ [customization.point.object]: library.md#customization.point.object
88
+ [dcl.fct.def.coroutine]: dcl.md#dcl.fct.def.coroutine
89
+ [dcl.init.general]: dcl.md#dcl.init.general
90
+ [expr.await]: expr.md#expr.await
91
+ [expr.const]: expr.md#expr.const
92
+ [expr.yield]: expr.md#expr.yield
93
+ [generator.syn]: #generator.syn
94
+ [iterator.concept.bidir]: iterators.md#iterator.concept.bidir
95
+ [iterator.concept.forward]: iterators.md#iterator.concept.forward
96
+ [iterator.concept.iterator]: iterators.md#iterator.concept.iterator
97
+ [iterator.concept.output]: iterators.md#iterator.concept.output
98
+ [iterator.concept.random.access]: iterators.md#iterator.concept.random.access
99
+ [iterator.concept.sizedsentinel]: iterators.md#iterator.concept.sizedsentinel
100
+ [iterator.concept.winc]: iterators.md#iterator.concept.winc
101
+ [iterator.requirements.general]: iterators.md#iterator.requirements.general
102
+ [namespace.std]: library.md#namespace.std
103
+ [range.access]: #range.access
104
+ [range.access.begin]: #range.access.begin
105
+ [range.access.cbegin]: #range.access.cbegin
106
+ [range.access.cend]: #range.access.cend
107
+ [range.access.crbegin]: #range.access.crbegin
108
+ [range.access.crend]: #range.access.crend
109
+ [range.access.end]: #range.access.end
110
+ [range.access.general]: #range.access.general
111
+ [range.access.rbegin]: #range.access.rbegin
112
+ [range.access.rend]: #range.access.rend
113
+ [range.adaptor.helpers]: #range.adaptor.helpers
114
+ [range.adaptor.object]: #range.adaptor.object
115
+ [range.adaptors]: #range.adaptors
116
+ [range.adaptors.general]: #range.adaptors.general
117
+ [range.adjacent]: #range.adjacent
118
+ [range.adjacent.iterator]: #range.adjacent.iterator
119
+ [range.adjacent.overview]: #range.adjacent.overview
120
+ [range.adjacent.sentinel]: #range.adjacent.sentinel
121
+ [range.adjacent.transform]: #range.adjacent.transform
122
+ [range.adjacent.transform.iterator]: #range.adjacent.transform.iterator
123
+ [range.adjacent.transform.overview]: #range.adjacent.transform.overview
124
+ [range.adjacent.transform.sentinel]: #range.adjacent.transform.sentinel
125
+ [range.adjacent.transform.view]: #range.adjacent.transform.view
126
+ [range.adjacent.view]: #range.adjacent.view
127
+ [range.all]: #range.all
128
+ [range.all.general]: #range.all.general
129
+ [range.as.const]: #range.as.const
130
+ [range.as.const.overview]: #range.as.const.overview
131
+ [range.as.const.view]: #range.as.const.view
132
+ [range.as.rvalue]: #range.as.rvalue
133
+ [range.as.rvalue.overview]: #range.as.rvalue.overview
134
+ [range.as.rvalue.view]: #range.as.rvalue.view
135
+ [range.cartesian]: #range.cartesian
136
+ [range.cartesian.iterator]: #range.cartesian.iterator
137
+ [range.cartesian.overview]: #range.cartesian.overview
138
+ [range.cartesian.view]: #range.cartesian.view
139
+ [range.chunk]: #range.chunk
140
+ [range.chunk.by]: #range.chunk.by
141
+ [range.chunk.by.iter]: #range.chunk.by.iter
142
+ [range.chunk.by.overview]: #range.chunk.by.overview
143
+ [range.chunk.by.view]: #range.chunk.by.view
144
+ [range.chunk.fwd.iter]: #range.chunk.fwd.iter
145
+ [range.chunk.inner.iter]: #range.chunk.inner.iter
146
+ [range.chunk.outer.iter]: #range.chunk.outer.iter
147
+ [range.chunk.outer.value]: #range.chunk.outer.value
148
+ [range.chunk.overview]: #range.chunk.overview
149
+ [range.chunk.view.fwd]: #range.chunk.view.fwd
150
+ [range.chunk.view.input]: #range.chunk.view.input
151
+ [range.common]: #range.common
152
+ [range.common.overview]: #range.common.overview
153
+ [range.common.view]: #range.common.view
154
+ [range.counted]: #range.counted
155
+ [range.dangling]: #range.dangling
156
+ [range.drop]: #range.drop
157
+ [range.drop.overview]: #range.drop.overview
158
+ [range.drop.view]: #range.drop.view
159
+ [range.drop.while]: #range.drop.while
160
+ [range.drop.while.overview]: #range.drop.while.overview
161
+ [range.drop.while.view]: #range.drop.while.view
162
+ [range.elements]: #range.elements
163
+ [range.elements.iterator]: #range.elements.iterator
164
+ [range.elements.overview]: #range.elements.overview
165
+ [range.elements.sentinel]: #range.elements.sentinel
166
+ [range.elements.view]: #range.elements.view
167
+ [range.elementsof]: #range.elementsof
168
+ [range.empty]: #range.empty
169
+ [range.empty.overview]: #range.empty.overview
170
+ [range.empty.view]: #range.empty.view
171
+ [range.enumerate]: #range.enumerate
172
+ [range.enumerate.iterator]: #range.enumerate.iterator
173
+ [range.enumerate.overview]: #range.enumerate.overview
174
+ [range.enumerate.sentinel]: #range.enumerate.sentinel
175
+ [range.enumerate.view]: #range.enumerate.view
176
+ [range.factories]: #range.factories
177
+ [range.factories.general]: #range.factories.general
178
+ [range.filter]: #range.filter
179
+ [range.filter.iterator]: #range.filter.iterator
180
+ [range.filter.overview]: #range.filter.overview
181
+ [range.filter.sentinel]: #range.filter.sentinel
182
+ [range.filter.view]: #range.filter.view
183
+ [range.iota]: #range.iota
184
+ [range.iota.iterator]: #range.iota.iterator
185
+ [range.iota.overview]: #range.iota.overview
186
+ [range.iota.sentinel]: #range.iota.sentinel
187
+ [range.iota.view]: #range.iota.view
188
+ [range.istream]: #range.istream
189
+ [range.istream.iterator]: #range.istream.iterator
190
+ [range.istream.overview]: #range.istream.overview
191
+ [range.istream.view]: #range.istream.view
192
+ [range.join]: #range.join
193
+ [range.join.iterator]: #range.join.iterator
194
+ [range.join.overview]: #range.join.overview
195
+ [range.join.sentinel]: #range.join.sentinel
196
+ [range.join.view]: #range.join.view
197
+ [range.join.with]: #range.join.with
198
+ [range.join.with.iterator]: #range.join.with.iterator
199
+ [range.join.with.overview]: #range.join.with.overview
200
+ [range.join.with.sentinel]: #range.join.with.sentinel
201
+ [range.join.with.view]: #range.join.with.view
202
+ [range.lazy.split]: #range.lazy.split
203
+ [range.lazy.split.inner]: #range.lazy.split.inner
204
+ [range.lazy.split.outer]: #range.lazy.split.outer
205
+ [range.lazy.split.outer.value]: #range.lazy.split.outer.value
206
+ [range.lazy.split.overview]: #range.lazy.split.overview
207
+ [range.lazy.split.view]: #range.lazy.split.view
208
+ [range.move.wrap]: #range.move.wrap
209
+ [range.nonprop.cache]: #range.nonprop.cache
210
+ [range.owning.view]: #range.owning.view
211
+ [range.prim.cdata]: #range.prim.cdata
212
+ [range.prim.data]: #range.prim.data
213
+ [range.prim.empty]: #range.prim.empty
214
+ [range.prim.size]: #range.prim.size
215
+ [range.prim.ssize]: #range.prim.ssize
216
+ [range.range]: #range.range
217
+ [range.ref.view]: #range.ref.view
218
+ [range.refinements]: #range.refinements
219
+ [range.repeat]: #range.repeat
220
+ [range.repeat.iterator]: #range.repeat.iterator
221
+ [range.repeat.overview]: #range.repeat.overview
222
+ [range.repeat.view]: #range.repeat.view
223
+ [range.req]: #range.req
224
+ [range.req.general]: #range.req.general
225
+ [range.reverse]: #range.reverse
226
+ [range.reverse.overview]: #range.reverse.overview
227
+ [range.reverse.view]: #range.reverse.view
228
+ [range.single]: #range.single
229
+ [range.single.overview]: #range.single.overview
230
+ [range.single.view]: #range.single.view
231
+ [range.sized]: #range.sized
232
+ [range.slide]: #range.slide
233
+ [range.slide.iterator]: #range.slide.iterator
234
+ [range.slide.overview]: #range.slide.overview
235
+ [range.slide.sentinel]: #range.slide.sentinel
236
+ [range.slide.view]: #range.slide.view
237
+ [range.split]: #range.split
238
+ [range.split.iterator]: #range.split.iterator
239
+ [range.split.overview]: #range.split.overview
240
+ [range.split.sentinel]: #range.split.sentinel
241
+ [range.split.view]: #range.split.view
242
+ [range.stride]: #range.stride
243
+ [range.stride.iterator]: #range.stride.iterator
244
+ [range.stride.overview]: #range.stride.overview
245
+ [range.stride.view]: #range.stride.view
246
+ [range.subrange]: #range.subrange
247
+ [range.subrange.access]: #range.subrange.access
248
+ [range.subrange.ctor]: #range.subrange.ctor
249
+ [range.subrange.general]: #range.subrange.general
250
+ [range.summary]: #range.summary
251
+ [range.take]: #range.take
252
+ [range.take.overview]: #range.take.overview
253
+ [range.take.sentinel]: #range.take.sentinel
254
+ [range.take.view]: #range.take.view
255
+ [range.take.while]: #range.take.while
256
+ [range.take.while.overview]: #range.take.while.overview
257
+ [range.take.while.sentinel]: #range.take.while.sentinel
258
+ [range.take.while.view]: #range.take.while.view
259
+ [range.transform]: #range.transform
260
+ [range.transform.iterator]: #range.transform.iterator
261
+ [range.transform.overview]: #range.transform.overview
262
+ [range.transform.sentinel]: #range.transform.sentinel
263
+ [range.transform.view]: #range.transform.view
264
+ [range.utility]: #range.utility
265
+ [range.utility.conv]: #range.utility.conv
266
+ [range.utility.conv.adaptors]: #range.utility.conv.adaptors
267
+ [range.utility.conv.general]: #range.utility.conv.general
268
+ [range.utility.conv.to]: #range.utility.conv.to
269
+ [range.utility.general]: #range.utility.general
270
+ [range.utility.helpers]: #range.utility.helpers
271
+ [range.view]: #range.view
272
+ [range.zip]: #range.zip
273
+ [range.zip.iterator]: #range.zip.iterator
274
+ [range.zip.overview]: #range.zip.overview
275
+ [range.zip.sentinel]: #range.zip.sentinel
276
+ [range.zip.transform]: #range.zip.transform
277
+ [range.zip.transform.iterator]: #range.zip.transform.iterator
278
+ [range.zip.transform.overview]: #range.zip.transform.overview
279
+ [range.zip.transform.sentinel]: #range.zip.transform.sentinel
280
+ [range.zip.transform.view]: #range.zip.transform.view
281
+ [range.zip.view]: #range.zip.view
282
+ [ranges]: #ranges
283
+ [ranges.general]: #ranges.general
284
+ [ranges.syn]: #ranges.syn
285
+ [string.view]: strings.md#string.view
286
+ [term.array.type]: dcl.md#term.array.type
287
+ [term.perfect.forwarding.call.wrapper]: utilities.md#term.perfect.forwarding.call.wrapper
288
+ [view.interface]: #view.interface
289
+ [view.interface.general]: #view.interface.general
290
+ [view.interface.members]: #view.interface.members
291
+ [views.span]: containers.md#views.span