in hll/coupon_hash_set.go [209:248]
func deserializeCouponHashSet(byteArray []byte) (hllCoupon, error) {
lgConfigK := extractLgK(byteArray)
tgtHllType := extractTgtHllType(byteArray)
curMode := extractCurMode(byteArray)
memArrStart := listIntArrStart
if curMode == curModeSet {
memArrStart = hashSetIntArrStart
}
set, err := newCouponHashSet(lgConfigK, tgtHllType)
if err != nil {
return nil, err
}
memIsCompact := extractCompactFlag(byteArray)
couponCount := extractHashSetCount(byteArray)
lgCouponArrInts := extractLgArr(byteArray)
if lgCouponArrInts < lgInitSetSize {
lgCouponArrInts, err = computeLgArr(byteArray, couponCount, lgConfigK)
if err != nil {
return nil, err
}
}
if memIsCompact {
for it := 0; it < couponCount && err == nil; it++ {
_, err = set.couponUpdate(int(binary.LittleEndian.Uint32(byteArray[memArrStart+(it<<2) : memArrStart+(it<<2)+4])))
}
if err != nil {
return nil, err
}
} else {
set.couponCount = couponCount
set.lgCouponArrInts = lgCouponArrInts
couponArrInts := 1 << lgCouponArrInts
set.couponIntArr = make([]int, couponArrInts)
for it := 0; it < couponArrInts; it++ {
set.couponIntArr[it] = int(binary.LittleEndian.Uint32(byteArray[hashSetIntArrStart+(it<<2) : hashSetIntArrStart+(it<<2)+4]))
}
}
return &set, nil
}