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
}
}