func()

in kll/items_sketch_validate.go [103:151]


func (vlid *itemsSketchMemoryValidate[C]) validate() error {
	switch vlid.sketchStructure {
	case _COMPACT_FULL:
		if vlid.emptyFlag {
			return fmt.Errorf("Empty flag and compact full")
		}
		vlid.n = getN(vlid.srcMem)
		vlid.minK = getMinK(vlid.srcMem)
		vlid.numLevels = getNumLevels(vlid.srcMem)
		// Get Levels Arr and add the last element
		vlid.levelsArr = make([]uint32, vlid.numLevels+1)
		for i := uint8(0); i < vlid.numLevels; i++ {
			vlid.levelsArr[i] = binary.LittleEndian.Uint32(vlid.srcMem[_DATA_START_ADR+i*4 : _DATA_START_ADR+i*4+4])
		}
		capacityItems := computeTotalItemCapacity(uint16(vlid.k), uint8(vlid.m), uint8(vlid.numLevels))
		vlid.levelsArr[vlid.numLevels] = capacityItems //load the last one
		sb, err := computeSketchBytes(vlid.srcMem, vlid.levelsArr, vlid.typeBytes, vlid.serde)
		if err != nil {
			return err
		}
		vlid.sketchBytes = sb

	case _COMPACT_EMPTY:
		if !vlid.emptyFlag {
			return fmt.Errorf("Empty flag and compact empty")
		}
		vlid.n = 0 //assumed
		vlid.minK = uint16(vlid.k)
		vlid.numLevels = 1 //assumed
		vlid.levelsArr = []uint32{uint32(vlid.k), uint32(vlid.k)}
		vlid.sketchBytes = _DATA_START_ADR_SINGLE_ITEM
	case _COMPACT_SINGLE:
		if vlid.emptyFlag {
			return fmt.Errorf("Empty flag and compact single")
		}
		vlid.n = 1 //assumed
		vlid.minK = uint16(vlid.k)
		vlid.numLevels = 1 //assumed
		vlid.levelsArr = []uint32{uint32(vlid.k) - 1, uint32(vlid.k)}
		v, err := vlid.serde.SizeOfMany(vlid.srcMem, _DATA_START_ADR_SINGLE_ITEM, 1)
		if err != nil {
			return err
		}
		vlid.sketchBytes = _DATA_START_ADR_SINGLE_ITEM + v
	default:
		return fmt.Errorf("Invalid preamble ints and serial version combo")
	}
	return nil
}