| 11 | } |
| 12 | |
| 13 | func (self *Reader) ReadBits64(n int) (bits uint64, err error) { |
| 14 | if self.n < n { |
| 15 | var b [8]byte |
| 16 | var got int |
| 17 | want := (n - self.n + 7) / 8 |
| 18 | if got, err = self.R.Read(b[:want]); err != nil { |
| 19 | return |
| 20 | } |
| 21 | if got < want { |
| 22 | err = io.EOF |
| 23 | return |
| 24 | } |
| 25 | for i := 0; i < got; i++ { |
| 26 | self.bits <<= 8 |
| 27 | self.bits |= uint64(b[i]) |
| 28 | } |
| 29 | self.n += got * 8 |
| 30 | } |
| 31 | bits = self.bits >> uint(self.n-n) |
| 32 | self.bits ^= bits << uint(self.n-n) |
| 33 | self.n -= n |
| 34 | return |
| 35 | } |
| 36 | |
| 37 | func (self *Reader) ReadBits(n int) (bits uint, err error) { |
| 38 | var bits64 uint64 |