func deserializeCouponHashSet()

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
}