def union_bits

mylsm-lsm-store@0.3.2.0 · src/BitTree.bend:201

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

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

Uses (2)

Used by (1)