func toCouponSlice()

in hll/to_slice_impl.go [49:94]


func toCouponSlice(impl hllCoupon, dstCompact bool) ([]byte, error) {
	srcCouponCount := impl.getCouponCount()
	srcLgCouponArrInts := impl.getLgCouponArrInts()
	srcCouponArrInts := 1 << srcLgCouponArrInts
	list := impl.GetCurMode() == curModeList
	if dstCompact {
		//Src Heap,   Src Updatable, Dst Compact
		dataStart := impl.getMemDataStart()
		bytesOut := dataStart + (srcCouponCount << 2)
		byteArrOut := make([]byte, bytesOut)
		copyCommonListAndSet(impl, byteArrOut)
		insertCompactFlag(byteArrOut, dstCompact)
		itr := impl.iterator()
		cnt := 0
		for itr.nextValid() {
			p, err := itr.getPair()
			if err != nil {
				return nil, err
			}
			binary.LittleEndian.PutUint32(byteArrOut[dataStart+(cnt<<2):dataStart+(cnt<<2)+4], uint32(p))
			cnt++
		}
		if list {
			insertListCount(byteArrOut, srcCouponCount)
		} else {
			insertHashSetCount(byteArrOut, srcCouponCount)
		}
		return byteArrOut, nil
	} else {
		//Src Heap, Src Updatable, Dst Updatable
		dataStart := impl.getMemDataStart()
		bytesOut := dataStart + (srcCouponArrInts << 2)
		byteArrOut := make([]byte, bytesOut)
		copyCommonListAndSet(impl, byteArrOut)
		for _, v := range impl.getCouponIntArr() {
			binary.LittleEndian.PutUint32(byteArrOut[dataStart:dataStart+4], uint32(v))
			dataStart += 4
		}
		if list {
			insertListCount(byteArrOut, srcCouponCount)
		} else {
			insertHashSetCount(byteArrOut, srcCouponCount)
		}
		return byteArrOut, nil
	}
}