def step
bend-kit-runner@0.13.0.1 · runner.bend:270
import bend-kit-runner@0.13.0.1/runner.bend as Runner
import Base
import bend-kit-scheduler@0.4.1.0/queue.bend as Q
import bend-kit-collections@0.1.4.1/hmap.bend as M
270
271def step(~A: Data, s: State<A>, op: Op<A>) -> State<A>:
272 match s op:
273 case State{q, ts, ds, bs} Enqueue{+d, x}:
274 step.enqueued(A, Q.enqueue(~A, d, x, q), ts, ds, bs, d)
275 case State{q, ts, ds, bs} Select{now}:
276 step.selected(A, Q.select(~A, now, q), ts, ds, bs)
277 case State{q, ts, ds, bs} Complete{+i}:
278 step.completed(A, Q.complete(A, i, q), tries.drop(ts, i), ds, bs)
279 case State{q, ts, ds, bs} Cancel{+i}:
280 State{Q.cancel(~A, i, q), tries.drop(ts, i), dead.drop(~A, ds, i), bs}
281 case State{q, ts, ds, bs} Requeue{+i, d}:
282 step.requeued(A, Q.requeue(~A, i, d, q), tries.bump(ts, i), ds, bs)
283 case State{q, ts, ds, bs} Defer{i, d}:
284 step.requeued(A, Q.requeue(~A, i, d, q), ts, ds, bs)
285 case State{q, ts, ds, bs} Abandon{+i, w, at}:
286 step.abandoned(~A, Q.complete(A, i, q), tries.drop(ts, i), ds, bs, w, at)
287 case State{Q.State{n, h, r}, ts, +ds, bs} Revive{+i, d}:
288 step.revived(~A, dead.get(~A, ds, i), i, n, h, r, ts, dead.drop(~A, ds, i), bs, d)
289 case State{q, ts, ds, bs} Purge{t}:
290 State{q, ts, dead.purge(~A, ds, t), bs}
291 case State{q, ts, ds, bs} PurgeAll{}:
292 State{q, ts, M.HMap.new(Nat, Dead<A>), bs}
293 case State{q, ts, ds, bs} Break{k, b}:
294 State{q, ts, ds, step.broke(bs, k, b)}