class Compress(object): def __init__(self): self.__fifo = Fifo() self.__output = [] self.__output.append(LZO_MAGIC) def __yield_output(self): output = ''.join(self.__output) self.__output = [] return output def compress(self, data): self.__fifo.write(data) while True: block = self.__fifo.read(MAX_BLOCK) if not block: break data = lzo1x_1_compress(block) if len(data) >= len(block): self.__output.append(pack(_BLOCK_HEADER_FORMAT, len(block))) self.__output.append(block) else: self.__output.append(pack(_BLOCK_HEADER_FORMAT, len(data) | 0x8000)) self.__output.append(data) return self.__yield_output()