func newItemsSketchSortedView[C comparable]()

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
}