def gats
bend-parallel@0.1.0.0 · sort.bend:456
import bend-parallel@0.1.0.0/sort.bend as Sort
import Base
456
457
458
459
460def gats(~T: Data, +d: Nat, +i: U32, +e: Nat, fp: Array<U32> & Array<U32>, fs: Array<T> & Array<T>, fd: Array<T> & Array<T>) -> Moved<T>:
461 match d:
462 case 0n:
463 (pm, pm2) = fp
464 (src, src2) = fs
465 (dst, dst2) = fd
466 +at = U32.shln(i, e)
467 moved.rejoin(~T, pm2, src2, dst2, gat.go(~T, U32.to_nat((U32.shln(1, e) - 1 : U32)), at,
468 Sd{src, dst}, pm[at]))
469 case 1n+p:
470 (p0, p1) = fp
471 (s0, s1) = fs
472 (d0, d1) = fd
473 +j = (i * 2 : U32)
474 l r = gats(~T, p, j, e, Array.fork(U32, p0), Array.fork(T, s0), Array.fork(T, d0))
475 gats(~T, p, (j + 1 : U32), e, Array.fork(U32, p1), Array.fork(T, s1), Array.fork(T, d1))
476 moved.join(~T, l, r)