add more efficient bit reader / writer

This commit is contained in:
aler9
2022-06-24 16:41:01 +02:00
parent 949e27c428
commit d11fe222c3
14 changed files with 394 additions and 285 deletions

26
pkg/bits/write.go Normal file
View File

@@ -0,0 +1,26 @@
package bits
// WriteBits writes N bits.
func WriteBits(buf []byte, pos *int, bits uint64, n int) {
res := 8 - (*pos & 0x07)
if n < res {
buf[*pos>>0x03] |= byte(bits << (res - n))
*pos += n
return
}
buf[*pos>>3] |= byte(bits >> (n - res))
*pos += res
n -= res
for n >= 8 {
buf[*pos>>3] = byte(bits >> (n - 8))
*pos += 8
n -= 8
}
if n > 0 {
buf[*pos>>3] = byte((bits & (1<<n - 1)) << (8 - n))
*pos += n
}
}