func newItemsSketchMemoryValidate[C comparable]()

in kll/items_sketch_validate.go [58:101]


func newItemsSketchMemoryValidate[C comparable](srcMem []byte, serde common.ItemSketchSerde[C]) (*itemsSketchMemoryValidate[C], error) {
	capa := cap(srcMem)
	if capa < 8 {
		return nil, fmt.Errorf("Memory too small: %d", capa)
	}
	preInts := getPreInts(srcMem)
	serVer := getSerVer(srcMem)
	sketchStructure := getSketchStructure(preInts, serVer)
	familyID := getFamilyID(srcMem)
	if familyID != internal.FamilyEnum.Kll.Id {
		return nil, fmt.Errorf("Source not KLL: %d", familyID)
	}
	flags := getFlags(srcMem)
	k := getK(srcMem)
	m := getM(srcMem)
	err := checkM(m)
	if err != nil {
		return nil, err
	}
	err = checkK(k, m)
	if err != nil {
		return nil, err
	}
	//flags
	emptyFlag := getEmptyFlag(srcMem)
	level0SortedFlag := getLevelZeroSortedFlag(srcMem)
	typeBytes := 0
	vlid := &itemsSketchMemoryValidate[C]{
		srcMem:           srcMem,
		serde:            serde,
		sketchStructure:  sketchStructure,
		preInts:          preInts,
		serVer:           serVer,
		familyID:         familyID,
		flags:            flags,
		k:                k,
		m:                m,
		emptyFlag:        emptyFlag,
		level0SortedFlag: level0SortedFlag,
		typeBytes:        typeBytes,
	}
	err = vlid.validate()
	return vlid, err
}