def hash_idxs_par_go

mylsm-lsm-store@0.6.0.1 · src/Sstable.bend:308

import mylsm-lsm-store@0.6.0.1/src/Sstable.bend as Sstable
import Base
import mylsm-lsm-store@0.6.0.1/src/MemTable.bend as MemTable

308# Balanced parallel index collection; reusable fuel bounds the fork depth.
309def hash_idxs_par_go(+fuel: Nat, +entries: List<&2, MemTable.Entry>, +size: Nat) -> List<&2, Nat>:
310  match fuel:
311    case 0n:
312      hash_idxs_seq(entries, size)
313    case 1n+f:
314      match entries:
315        case Nil{}:
316          Nil{}
317        case Con{MemTable.Entry{key, val}, Nil{}}:
318          key_idxs(key, size)
319        case Con{_, Con{_, _}}:
320          +half = Nat.div(List.length(&2, MemTable.Entry, entries), 2n)
321          left right = hash_idxs_par_go(f, List.take(&2, MemTable.Entry, entries, half), size) hash_idxs_par_go(f, List.drop(&2, MemTable.Entry, entries, half), size)
322          List.append(&2, Nat, left, right)

Uses (10)

Used by (1)