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# The state after op. Live and replay both run it, so they agree.
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)}

Uses (23)

Used by (3)