def run.sums

bend-parallel@0.1.0.0 · sort.bend:379

import bend-parallel@0.1.0.0/sort.bend as Sort
import Base
import bend-parallel@0.1.0.0/scan.bend as Scan
import bend-parallel@0.1.0.0/histogram.bend as Hist

379# Pass 2a: each group's running column sums (Hist.grp), then 2b. For a
380# small table (lo), no 2a: 2b sums each column over all the rows.
381def run.sums(lo: Bool, +d: Nat, +e: Nat, +kb: Nat, +k: U32, pm: Array<U32>, cs: Array<U32>, os: Array<U32>, r: Hist.Two) -> Array<U32> & Bufs:
382  match lo:
383    case True{}:
384      Hist.Two{ks, t} = r
385      +g = Nat.min(d, kb)
386      run.scan(True{}, d, e, kb, k, ks, pm, sums(g, False{}, 0, Nat.sub(kb, g), k, 0, U32.shln(1, kb),
387        U32.to_nat((U32.shln(1, d) - 1 : U32)), Array.fork(U32, t),
388        Array.fork(U32, Hist.fit.eq(kb, Array.size(U32, cs))),
389        Array.fork(U32, Hist.fit.eq(kb, Array.size(U32, os)))))
390    case False{}:
391      Hist.Two{ks, t} = r
392      +g = Nat.min(d, kb)
393      +h = Scan.half(d)
394      run.tots(d, e, kb, k, ks, pm, cs, os, Hist.grp(Nat.add(h, g), True{}, 0, g, Nat.sub(kb, g), Nat.sub(d, h), kb, k,
395        Array.fork(U32, t)))

Uses (21)

Used by (1)