U
    ÕCd‹	  ã                   @   s   d Z G dd„ dƒZdS )zµ
hpack/huffman_decoder
~~~~~~~~~~~~~~~~~~~~~

An implementation of a bitwise prefix tree specially built for decoding
Huffman-coded content where we already know the Huffman table.
c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚHuffmanEncoderzj
    Encodes a string according to the Huffman encoding table defined in the
    HPACK specification.
    c                 C   s   || _ || _d S )N)Úhuffman_code_listÚhuffman_code_list_lengths)Úselfr   r   © r   ú1/tmp/pip-unpacked-wheel-eus5hmsv/hpack/huffman.pyÚ__init__   s    zHuffmanEncoder.__init__c                 C   sò   |sdS d}d}|D ]@}| j | }| j| d|d  d @ }||K }||O }||7 }qd|d  d }||K }|d|> d O }t|ƒdd…  d¡}t|ƒd dkr¬d| n|}|| d }|d }	t|ƒ|	krè|	t|ƒ }
d|
 | }t |¡S )	zm
        Given a string of bytes, encodes them according to the HPACK Huffman
        specification.
        ó    é    é   é   é   NÚLÚ0)r   r   ÚhexÚrstripÚlenÚbytesÚfromhex)r   Zbytes_to_encodeZ	final_numZfinal_int_lenÚbyteZbin_int_lenZbin_intZbits_to_be_paddedÚtotal_bytesZexpected_digitsZmissing_digitsr   r   r   Úencode   s.    
ÿ
zHuffmanEncoder.encodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   r   N)r   r   r   r   r   r   Ú<module>   s   	