3
=h                 @   s   d Z dd Zdd ZdS )u  
LZ4 compressed block is composed of sequences.
sequence = token + [length literals] +  literals + offset + [length match] + match
token: 1bytes, first 4-bits   length of literals
               last  4-bits   length of match
               each field ranges from 0 to 15, when 15, read more 1 bytes for length to add
literals: not-compressed bytes
offset  : 从解压后的数据的某个位置开始复制 match长度的数据
match   : 要复制的数据的长度
c             C   s   | S )uJ   
	input:	bdata: 要压缩的数据
	return: data:  压缩之后的数据
	 )bdatar   r   4/root/work/ibd2sql-ibd2sql-v2.x/ibd2sql/utils/lz4.pycompress   s    r   c             C   s$  dd }d}d}t |}x | | }|d7 }|d? }|dkrR|| |\}}||7 }| |||  |||| < ||7 }||7 }|| dk r||krP ntd| |d  d	> | | B }	|d
7 }|d@ }
|
dkr|| |\}}|
|7 }
|
d7 }
||	 }||||
  ||||
 < ||
7 }qW t|S )z
	input:
		bdata: compressed data
		decompress_size : decompress size
	return: data of decompressed
	ignore dict & prefix_size
	c             S   s4   d}x&| | }|d7 }||7 }|dkrP qW ||fS )N          r   )tdataipZlengthtr   r   r   read_to_less255"   s    z#decompress.<locals>.read_to_less255r   r            zInvalid lz4 compress data.      )	bytearray
ValueErrorbytes)r   Zdecompress_sizer   r	   opdataZtokenZllZtlloffsetZmlZtmlmatchr   r   r   
decompress   s:    
r   N)__doc__r   r   r   r   r   r   <module>   s   	