Example #1
0
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()