package hyperloglog import ( "math/bits" ) 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. for k := range s { data = append(data, []byte{ byte(k >> 24), byte(k >> 16), byte(k >> 8), byte(k), }...) } return data, nil } type uint64Slice []uint32 func (p uint64Slice) Len() int { return len(p) } func (p uint64Slice) Less(i, j int) bool { return p[i] < p[j] } func (p uint64Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }