in packed.go [102:131]
func getValFromPackedIx(ix uint64, bits uint, read func(off uint64, cnt uint64) ([]uint64, error)) (val uint64, err error) {
bitstart := ix * uint64(bits)
word := bitstart / 64
bitoff := bitstart % 64
getbits := 64 - (bitoff)
if getbits > uint64(bits) {
getbits = uint64(bits)
}
needWords := uint64(1)
if getbits < uint64(bits) {
needWords = 2
}
words, err := read(word, needWords)
if err != nil {
return 0, err
}
// now get 'getbits' from 'word' starting at 'bitoff'
sl := (64 - getbits - bitoff)
val = (words[0] << sl)
sr := (64 - getbits)
val >>= sr
if getbits < uint64(bits) {
remainder := uint64(bits) - getbits
x := (words[1] << (64 - remainder)) >> (64 - remainder)
val |= x << getbits
}
return
}