in kll/items_sketch_sorted_view.go [36:74]
func newItemsSketchSortedView[C comparable](sketch *ItemsSketch[C]) (*ItemsSketchSortedView[C], error) {
if sketch.IsEmpty() {
return nil, errors.New("empty sketch")
}
totalN := sketch.GetN()
srcQuantiles := sketch.GetTotalItemsArray()
srcLevels := sketch.levels
srcNumLevels := sketch.numLevels
maxItem, err := sketch.GetMaxItem()
if err != nil {
return nil, err
}
minItem, err := sketch.GetMinItem()
if err != nil {
return nil, err
}
if totalN == 0 {
return nil, errors.New("empty sketch")
}
if !sketch.isLevelZeroSorted {
subSlice := srcQuantiles[srcLevels[0]:srcLevels[1]]
compareFn := sketch.compareFn
sort.Slice(subSlice, func(a, b int) bool {
return compareFn(subSlice[a], subSlice[b])
})
}
numQuantiles := srcLevels[srcNumLevels] - srcLevels[0]
quantiles, cumWeights := populateFromSketch(srcQuantiles, srcLevels, srcNumLevels, numQuantiles, sketch.compareFn)
return &ItemsSketchSortedView[C]{
quantiles: quantiles,
cumWeights: cumWeights,
totalN: totalN,
maxItem: maxItem,
minItem: minItem,
compareFn: sketch.compareFn,
}, nil
}