package hyperloglog import ( "math/bits" "slices" "github.com/kamstrup/intmap" ) func getIndex(k uint32, p, pp uint8) uint32 { if k&1 == 1 { return bextr32(k, 32-p, p) } return bextr32(k, pp-p+1, p) } // Encode a hash to be used in the sparse representation. func encodeHash(x uint64, p, pp uint8) uint32 { idx := uint32(bextr(x, 64-pp, pp)) if bextr(x, 64-pp, pp-p) == 0 { zeros := bits.LeadingZeros64((bextr(x, 0, 64-pp)<>24), byte(sl>>16), byte(sl>>8), byte(sl), ) // Marshal each element in the set. s.m.ForEach(func(k uint32) bool { data = append(data, byte(k>>24), byte(k>>16), byte(k>>8), byte(k), ) return true }) return data, nil }