From Jason Turner

[exec.sysctxrepl.psb]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpv8zb365o/{from.md → to.md} +228 -0
tmp/tmpv8zb365o/{from.md → to.md} RENAMED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Class `parallel_scheduler_backend` <a id="exec.sysctxrepl.psb">[[exec.sysctxrepl.psb]]</a>
2
+
3
+ ``` cpp
4
+ namespace std::execution::system_context_replaceability {
5
+ struct parallel_scheduler_backend {
6
+ virtual ~parallel_scheduler_backend() = default;
7
+
8
+ virtual void schedule(receiver_proxy&, span<byte>) noexcept = 0;
9
+ virtual void schedule_bulk_chunked(size_t, bulk_item_receiver_proxy&,
10
+ span<byte>) noexcept = 0;
11
+ virtual void schedule_bulk_unchunked(size_t, bulk_item_receiver_proxy&,
12
+ span<byte>) noexcept = 0;
13
+ };
14
+ }
15
+ ```
16
+
17
+ ``` cpp
18
+ virtual void schedule(receiver_proxy& r, span<byte> s) noexcept = 0;
19
+ ```
20
+
21
+ *Preconditions:* The ends of the lifetimes of `*this`, the object
22
+ referred to by `r`, and any storage referenced by `s` all happen after
23
+ the beginning of the evaluation of the call to `set_value`, `set_error`,
24
+ or `set_done` on `r` (see below).
25
+
26
+ *Effects:* A derived class shall implement this function such that:
27
+
28
+ - One of the following expressions is evaluated:
29
+ - `r.set_value()`, if no error occurs, and the work is successful;
30
+ - `r.set_error(eptr)`, if an error occurs, where `eptr` is an object
31
+ of type `exception_ptr`;
32
+ - `r.set_stopped()`, if the work is canceled.
33
+ - Any call to `r.set_value()` happens on an execution agent of the
34
+ execution context represented by `*this`.
35
+
36
+ *Remarks:* The storage referenced by `s` may be used by `*this` as
37
+ temporary storage for the duration of the operation launched by this
38
+ call.
39
+
40
+ ``` cpp
41
+ virtual void schedule_bulk_chunked(size_t n, bulk_item_receiver_proxy& r,
42
+ span<byte> s) noexcept = 0;
43
+ ```
44
+
45
+ *Preconditions:* The ends of the lifetimes of `*this`, the object
46
+ referred to by `r`, and any storage referenced by `s` all happen after
47
+ the beginning of the evaluation of one of the expressions below.
48
+
49
+ *Effects:* A derived class shall implement this function such that:
50
+
51
+ - Eventually, one of the following expressions is evaluated:
52
+ - `r.set_value()`, if no error occurs, and the work is successful;
53
+ - `r.set_error(eptr)`, if an error occurs, where `eptr` is an object
54
+ of type `exception_ptr`;
55
+ - `r.set_stopped()`, if the work is canceled.
56
+ - If `r.execute(b, e)` is called, then `b` and `e` are in the range
57
+ \[`0`, `n`\] and `b` < `e`.
58
+ - For each i in \[`0`, `n`), there is at most one call to
59
+ `r.execute(b, e)` such that i is in the range \[`b`, `e`).
60
+ - If `r.set_value()` is called, then for each i in \[`0`, `n`), there is
61
+ exactly one call to `r.execute(b, e)` such that i is in the range
62
+ \[`b`, `e`).
63
+ - All calls to `execute` on `r` happen before the call to either
64
+ `set_value`, `set_error`, or `set_stopped` on `r`.
65
+ - All calls to `execute` and `set_value` on `r` are made on execution
66
+ agents of the execution context represented by `*this`.
67
+
68
+ *Remarks:* The storage referenced by `s` may be used by `*this` as
69
+ temporary storage for the duration of the operation launched by this
70
+ call.
71
+
72
+ ``` cpp
73
+ virtual void schedule_bulk_unchunked(size_t n, bulk_item_receiver_proxy& r,
74
+ span<byte> s) noexcept = 0;
75
+ ```
76
+
77
+ *Preconditions:* The ends of the lifetimes of `*this`, the object
78
+ referred to by `r`, and any storage referenced by `s` all happen after
79
+ the beginning of the evaluation of one of the expressions below.
80
+
81
+ *Effects:* A derived class shall implement this function such that:
82
+
83
+ - Eventually, one of the following expressions is evaluated:
84
+ - `r.set_value()`, if no error occurs, and the work is successful;
85
+ - `r.set_error(eptr)`, if an error occurs, where `eptr` is an object
86
+ of type `exception_ptr`;
87
+ - `r.set_stopped()`, if the work is canceled.
88
+ - If `r.execute(b, e)` is called, then `b` is in the range \[`0`, `n`)
89
+ and `e` is equal to `b + 1`. For each i in \[`0`, `n`), there is at
90
+ most one call to `r.execute(`i`, `i` + 1)`.
91
+ - If `r.set_value()` is called, then for each i in \[`0`, `n`), there is
92
+ exactly one call to `r.execute(`i`, `i` + 1)`.
93
+ - All calls to `execute` on `r` happen before the call to either
94
+ `set_value`, `set_error`, or `set_stopped` on `r`.
95
+ - All calls to `execute` and `set_value` on `r` are made on execution
96
+ agents of the execution context represented by `*this`.
97
+
98
+ *Remarks:* The storage referenced by `s` may be used by `*this` as
99
+ temporary storage for the duration of the operation launched by this
100
+ call.
101
+
102
+ <!-- Link reference definitions -->
103
+ [algorithms.parallel.exec]: algorithms.md#algorithms.parallel.exec
104
+ [allocator.requirements.general]: library.md#allocator.requirements.general
105
+ [basic.def.odr]: basic.md#basic.def.odr
106
+ [concepts.equality]: concepts.md#concepts.equality
107
+ [customization.point.object]: library.md#customization.point.object
108
+ [dcl.init]: dcl.md#dcl.init
109
+ [dcl.struct.bind]: dcl.md#dcl.struct.bind
110
+ [defns.block]: intro.md#defns.block
111
+ [except.terminate]: except.md#except.terminate
112
+ [exec]: #exec
113
+ [exec.adapt]: #exec.adapt
114
+ [exec.adapt.general]: #exec.adapt.general
115
+ [exec.adapt.obj]: #exec.adapt.obj
116
+ [exec.affine.on]: #exec.affine.on
117
+ [exec.as.awaitable]: #exec.as.awaitable
118
+ [exec.associate]: #exec.associate
119
+ [exec.async.ops]: #exec.async.ops
120
+ [exec.awaitable]: #exec.awaitable
121
+ [exec.bulk]: #exec.bulk
122
+ [exec.cmplsig]: #exec.cmplsig
123
+ [exec.connect]: #exec.connect
124
+ [exec.consumers]: #exec.consumers
125
+ [exec.continues.on]: #exec.continues.on
126
+ [exec.coro.util]: #exec.coro.util
127
+ [exec.counting.scopes]: #exec.counting.scopes
128
+ [exec.counting.scopes.general]: #exec.counting.scopes.general
129
+ [exec.ctx]: #exec.ctx
130
+ [exec.domain.default]: #exec.domain.default
131
+ [exec.env]: #exec.env
132
+ [exec.envs]: #exec.envs
133
+ [exec.factories]: #exec.factories
134
+ [exec.fwd.env]: #exec.fwd.env
135
+ [exec.general]: #exec.general
136
+ [exec.get.allocator]: #exec.get.allocator
137
+ [exec.get.await.adapt]: #exec.get.await.adapt
138
+ [exec.get.compl.sched]: #exec.get.compl.sched
139
+ [exec.get.delegation.scheduler]: #exec.get.delegation.scheduler
140
+ [exec.get.domain]: #exec.get.domain
141
+ [exec.get.env]: #exec.get.env
142
+ [exec.get.fwd.progress]: #exec.get.fwd.progress
143
+ [exec.get.scheduler]: #exec.get.scheduler
144
+ [exec.get.stop.token]: #exec.get.stop.token
145
+ [exec.getcomplsigs]: #exec.getcomplsigs
146
+ [exec.inline.scheduler]: #exec.inline.scheduler
147
+ [exec.into.variant]: #exec.into.variant
148
+ [exec.just]: #exec.just
149
+ [exec.let]: #exec.let
150
+ [exec.on]: #exec.on
151
+ [exec.opstate]: #exec.opstate
152
+ [exec.opstate.general]: #exec.opstate.general
153
+ [exec.opstate.start]: #exec.opstate.start
154
+ [exec.par.scheduler]: #exec.par.scheduler
155
+ [exec.pos]: #exec.pos
156
+ [exec.prop]: #exec.prop
157
+ [exec.queries]: #exec.queries
158
+ [exec.queryable]: #exec.queryable
159
+ [exec.queryable.concept]: #exec.queryable.concept
160
+ [exec.queryable.general]: #exec.queryable.general
161
+ [exec.read.env]: #exec.read.env
162
+ [exec.recv]: #exec.recv
163
+ [exec.recv.concepts]: #exec.recv.concepts
164
+ [exec.run.loop]: #exec.run.loop
165
+ [exec.run.loop.ctor]: #exec.run.loop.ctor
166
+ [exec.run.loop.general]: #exec.run.loop.general
167
+ [exec.run.loop.members]: #exec.run.loop.members
168
+ [exec.run.loop.types]: #exec.run.loop.types
169
+ [exec.sched]: #exec.sched
170
+ [exec.schedule]: #exec.schedule
171
+ [exec.schedule.from]: #exec.schedule.from
172
+ [exec.scope]: #exec.scope
173
+ [exec.scope.concepts]: #exec.scope.concepts
174
+ [exec.scope.counting]: #exec.scope.counting
175
+ [exec.scope.simple.counting]: #exec.scope.simple.counting
176
+ [exec.scope.simple.counting.general]: #exec.scope.simple.counting.general
177
+ [exec.set.error]: #exec.set.error
178
+ [exec.set.stopped]: #exec.set.stopped
179
+ [exec.set.value]: #exec.set.value
180
+ [exec.simple.counting.ctor]: #exec.simple.counting.ctor
181
+ [exec.simple.counting.mem]: #exec.simple.counting.mem
182
+ [exec.simple.counting.token]: #exec.simple.counting.token
183
+ [exec.snd]: #exec.snd
184
+ [exec.snd.apply]: #exec.snd.apply
185
+ [exec.snd.concepts]: #exec.snd.concepts
186
+ [exec.snd.expos]: #exec.snd.expos
187
+ [exec.snd.general]: #exec.snd.general
188
+ [exec.snd.transform]: #exec.snd.transform
189
+ [exec.snd.transform.env]: #exec.snd.transform.env
190
+ [exec.spawn]: #exec.spawn
191
+ [exec.spawn.future]: #exec.spawn.future
192
+ [exec.starts.on]: #exec.starts.on
193
+ [exec.stop.when]: #exec.stop.when
194
+ [exec.stopped.err]: #exec.stopped.err
195
+ [exec.stopped.opt]: #exec.stopped.opt
196
+ [exec.summary]: #exec.summary
197
+ [exec.sync.wait]: #exec.sync.wait
198
+ [exec.sync.wait.var]: #exec.sync.wait.var
199
+ [exec.sysctxrepl]: #exec.sysctxrepl
200
+ [exec.sysctxrepl.general]: #exec.sysctxrepl.general
201
+ [exec.sysctxrepl.psb]: #exec.sysctxrepl.psb
202
+ [exec.sysctxrepl.query]: #exec.sysctxrepl.query
203
+ [exec.sysctxrepl.recvproxy]: #exec.sysctxrepl.recvproxy
204
+ [exec.task]: #exec.task
205
+ [exec.task.scheduler]: #exec.task.scheduler
206
+ [exec.then]: #exec.then
207
+ [exec.unstoppable]: #exec.unstoppable
208
+ [exec.when.all]: #exec.when.all
209
+ [exec.with.awaitable.senders]: #exec.with.awaitable.senders
210
+ [exec.write.env]: #exec.write.env
211
+ [execution.syn]: #execution.syn
212
+ [expr.await]: expr.md#expr.await
213
+ [expr.const]: expr.md#expr.const
214
+ [func.def]: utilities.md#func.def
215
+ [func.require]: utilities.md#func.require
216
+ [function.objects]: utilities.md#function.objects
217
+ [intro.multithread]: basic.md#intro.multithread
218
+ [intro.progress]: basic.md#intro.progress
219
+ [intro.races]: basic.md#intro.races
220
+ [meta.trans.other]: meta.md#meta.trans.other
221
+ [namespace.std]: library.md#namespace.std
222
+ [task.class]: #task.class
223
+ [task.members]: #task.members
224
+ [task.overview]: #task.overview
225
+ [task.promise]: #task.promise
226
+ [task.state]: #task.state
227
+ [term.replaceable.function]: dcl.md#term.replaceable.function
228
+ [thread.req.lockable.general]: thread.md#thread.req.lockable.general