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
|