def local
bend-visgraph@2.0.0.0 · visgraph.bend:296
import bend-visgraph@2.0.0.0/visgraph.bend as Visgraph
import Base
296def local(count: Nat, +i: U32, +y: F32, a: Arrived, yr: Array<F32> & F32, lefts: Array<U32>, +start: U32, +opening_nans: U32, unbounded: Unbounded) -> Local:
297 match count a:
298 case 1n+c OpensWithNaN{rights, +visits}:
299 (ys, +y2) = yr
300 +i2 = (i + 1 : U32)
301 local(c, i2, y2, arrive(KNil{}, is_nan(y2), y2, i2, rights, F32.add(visits, 1.0)), Array.get(F32, ys, (i2 + 1 : U32)), Array.set(U32, lefts, i, 0), start, (opening_nans + 1 : U32), unbounded)
302 case 1n+c PopsAll{rights, +visits}:
303 (ys, +y2) = yr
304 +i2 = (i + 1 : U32)
305 local(c, i2, y2, arrive(KCon{i, y, KNil{}}, is_nan(y2), y2, i2, rights, visits), Array.get(F32, ys, (i2 + 1 : U32)), lefts, start, opening_nans, UCon{i, y, unbounded})
306 case 1n+c Bounded{+first, +below, st, rights, +visits}:
307 (ys, +y2) = yr
308 +i2 = (i + 1 : U32)
309 +l = (i - first : U32)
310 local(c, i2, y2, arrive(KCon{i, key(y, below), st}, is_nan(y2), y2, i2, rights, F32.add(visits, U32.to_f32((l + 1 : U32)))), Array.get(F32, ys, (i2 + 1 : U32)), Array.set(U32, lefts, i, l), start, opening_nans, unbounded)
311 case 0n OpensWithNaN{rights, +visits}:
312 (ys, y2) = yr
313 Local{Block{start, (opening_nans + 1 : U32), unbounded, KNil{}, F32.add(visits, 1.0)}, Cols{ys, Array.set(U32, lefts, i, 0), rights}}
314 case 0n PopsAll{rights, +visits}:
315 (ys, y2) = yr
316 Local{Block{start, opening_nans, UCon{i, y, unbounded}, KCon{i, y, KNil{}}, visits}, Cols{ys, lefts, rights}}
317 case 0n Bounded{+first, +below, st, rights, +visits}:
318 (ys, y2) = yr
319 +l = (i - first : U32)
320 Local{Block{start, opening_nans, unbounded, KCon{i, key(y, below), st}, F32.add(visits, U32.to_f32((l + 1 : U32)))}, Cols{ys, Array.set(U32, lefts, i, l), rights}}