probeSegments

private fnvoid probeSegments(bool csr, Tables)(Tables tables, size_t mask, const ArrayData[][] lkeyChunks, const size_t[] lstarts, const size_t[] lHashes, const ArrayData[][] rkeyChunks, const size_t[] rstarts, const ColumnEq[] eqs, JoinKind kind, size_t segLen, size_t nSegs, size_t lheight, ref size_t[][] segLeft, ref size_t[][] segRight, size_t[][] matchedRight = null)

The probe (ADR-2026-10-19-02, ADR-2026-10-23-03): fixed left-row segments over the immutable table, each first counting its hash-equal candidates (integer compares only - the typed key equality runs once, in the fill pass), allocating its lists once at the bound, then filling. LEFT padding adds one candidate per non-null-key left row, so the bound is exact except for hash collisions. The concatenation over segments is the serial probe's output, bit for bit, whatever the scheduling.

Parameters

csrwhich table shape to walk (true CSR, false chains)
tablesthe CSR table (CsrTable) or the chain table (ChainTables)
maskthe slot mask
lchunksthe left key's chunks
lstartsthe left chunks' global starts
lHashesthe left rows' hashes
rchunksthe right key's chunks
rstartsthe right chunks' global starts
keyEqthe typed key equality
kindthe join kind (LEFT pads unmatched rows)
segLenthe segment length
nSegsthe segment count
lheightthe left row count
segLeftthe per-segment left-row lists (the output)
segRightthe per-segment right-row lists (the output)