def union_bits

mylsm-lsm-store@0.6.0.1 · src/BitTree.bend:199

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

199# Word-wise union for chunked Bloom builds. Both sides always share the exact
200# shape (same height from the same bit count); mismatched arms are unreachable
201# by construction and keep the Fork side.
202def union_bits(ta: WordTree, tb: WordTree) -> WordTree:
203  match ta tb:
204    case Empty{} Empty{}:
205      Empty{}
206    case Empty{} Leaf{wb}:
207      Leaf{wb}
208    case Empty{} Fork{lb, rb}:
209      Fork{lb, rb}
210    case Leaf{wa} Empty{}:
211      Leaf{wa}
212    case Leaf{wa} Leaf{wb}:
213      Leaf{U32.or(wa, wb)}
214    case Leaf{wa} Fork{lb, rb}:
215      Fork{lb, rb}
216    case Fork{la, ra} Empty{}:
217      Fork{la, ra}
218    case Fork{la, ra} Leaf{wb}:
219      Fork{la, ra}
220    case Fork{la, ra} Fork{lb, rb}:
221      Fork{union_bits(la, lb), union_bits(ra, rb)}

Uses (2)

Used by (1)