(self, bits)
| 22 | return |
| 23 | |
| 24 | def readbits(self, bits): |
| 25 | v = 0 |
| 26 | while 1: |
| 27 | # the number of remaining bits we can get from the current buffer. |
| 28 | r = 8-self.bpos |
| 29 | if bits <= r: |
| 30 | # |-----8-bits-----| |
| 31 | # |-bpos-|-bits-| | |
| 32 | # | |----r----| |
| 33 | v = (v<<bits) | ((self.buff>>(r-bits)) & ((1<<bits)-1)) |
| 34 | self.bpos += bits |
| 35 | break |
| 36 | else: |
| 37 | # |-----8-bits-----| |
| 38 | # |-bpos-|---bits----... |
| 39 | # | |----r----| |
| 40 | v = (v<<r) | (self.buff & ((1<<r)-1)) |
| 41 | bits -= r |
| 42 | x = self.fp.read(1) |
| 43 | if not x: raise EOFError |
| 44 | self.buff = ord(x) |
| 45 | self.bpos = 0 |
| 46 | return v |
| 47 | |
| 48 | def feed(self, code): |
| 49 | x = '' |