in kll/items_sketch.go [1060:1093]
func populateItemWorkArrays[C comparable](workbuf []C, worklevels []uint32, provisionalNumLevels uint8,
myCurNumLevels uint8, myCurLevelsArr []uint32, myCurItemsArr []C,
otherNumLevels uint8, otherLevelsArr []uint32, otherItemsArr []C,
compareFn common.CompareFn[C]) {
worklevels[0] = 0
// Note: the level zero data from "other" was already inserted into "self"
selfPopZero := currentLevelSizeItems(0, myCurNumLevels, myCurLevelsArr)
for i := uint32(0); i < selfPopZero; i++ {
workbuf[worklevels[0]+i] = myCurItemsArr[myCurLevelsArr[0]+i]
}
worklevels[1] = worklevels[0] + selfPopZero
for lvl := uint8(1); lvl < provisionalNumLevels; lvl++ {
selfPop := currentLevelSizeItems(lvl, myCurNumLevels, myCurLevelsArr)
otherPop := currentLevelSizeItems(lvl, otherNumLevels, otherLevelsArr)
worklevels[lvl+1] = worklevels[lvl] + selfPop + otherPop
if selfPop > 0 && otherPop == 0 {
for i := uint32(0); i < selfPop; i++ {
workbuf[worklevels[lvl]+i] = myCurItemsArr[myCurLevelsArr[lvl]+i]
}
} else if selfPop == 0 && otherPop > 0 {
for i := uint32(0); i < otherPop; i++ {
workbuf[worklevels[lvl]+i] = otherItemsArr[otherLevelsArr[lvl]+i]
}
} else if selfPop > 0 && otherPop > 0 {
mergeSortedItemsArrays(
myCurItemsArr, myCurLevelsArr[lvl], selfPop,
otherItemsArr, otherLevelsArr[lvl], otherPop,
workbuf, worklevels[lvl], compareFn)
}
}
}