| 46 | return v |
| 47 | |
| 48 | def feed(self, code): |
| 49 | x = '' |
| 50 | if code == 256: |
| 51 | self.table = [ chr(c) for c in xrange(256) ] # 0-255 |
| 52 | self.table.append(None) # 256 |
| 53 | self.table.append(None) # 257 |
| 54 | self.prevbuf = '' |
| 55 | self.nbits = 9 |
| 56 | elif code == 257: |
| 57 | pass |
| 58 | elif not self.prevbuf: |
| 59 | x = self.prevbuf = self.table[code] |
| 60 | else: |
| 61 | if code < len(self.table): |
| 62 | x = self.table[code] |
| 63 | self.table.append(self.prevbuf+x[0]) |
| 64 | else: |
| 65 | self.table.append(self.prevbuf+self.prevbuf[0]) |
| 66 | x = self.table[code] |
| 67 | l = len(self.table) |
| 68 | if l == 511: |
| 69 | self.nbits = 10 |
| 70 | elif l == 1023: |
| 71 | self.nbits = 11 |
| 72 | elif l == 2047: |
| 73 | self.nbits = 12 |
| 74 | self.prevbuf = x |
| 75 | return x |
| 76 | |
| 77 | def run(self): |
| 78 | while 1: |