in hll/hll_sketch.go [181:222]
func NewHllSketchFromSlice(bytes []byte, checkRebuild bool) (HllSketch, error) {
if len(bytes) < 8 {
return nil, fmt.Errorf("input array too small: %d", len(bytes))
}
curMode, err := checkPreamble(bytes)
if err != nil {
return nil, err
}
if curMode == curModeHll {
tgtHllType := extractTgtHllType(bytes)
if tgtHllType == TgtHllTypeHll4 {
sk, err := deserializeHll4(bytes)
if err != nil {
return nil, err
}
return newHllSketchState(sk), nil
} else if tgtHllType == TgtHllTypeHll6 {
return newHllSketchState(deserializeHll6(bytes)), nil
} else {
a := newHllSketchState(deserializeHll8(bytes))
if checkRebuild {
err := checkRebuildCurMinNumKxQ(a)
if err != nil {
return nil, err
}
}
return a, nil
}
} else if curMode == curModeList {
cp, err := deserializeCouponList(bytes)
if err != nil {
return nil, err
}
return newHllSketchState(cp), nil
} else {
chs, err := deserializeCouponHashSet(bytes)
if err != nil {
return nil, err
}
return newHllSketchState(chs), nil
}
}