3
4^^	                 @   sx   d Z ddlZddlZejZdddZG dd dejZG dd	 d	ejZG d
d dej	Z	G dd dej
Z
dd ZdS )z
Python 'utf-32' Codec
    Nstrictc             C   s   t j| |dS )NT)codecsutf_32_decode)inputerrors r   &/usr/lib/python3.6/encodings/utf_32.pydecode
   s    r	   c               @   s8   e Zd ZdddZdddZdd Zd	d
 Zdd ZdS )IncrementalEncoderr   c             C   s   t jj| | d | _d S )N)r   r
   __init__encoder)selfr   r   r   r   r      s    zIncrementalEncoder.__init__Fc             C   sN   | j d kr<tj|| jd }tjdkr0tj| _ ntj| _ |S | j || jd S )Nr   little)r   r   utf_32_encoder   sys	byteorderutf_32_le_encodeutf_32_be_encode)r   r   finalresultr   r   r   encode   s    


zIncrementalEncoder.encodec             C   s   t jj|  d | _d S )N)r   r
   resetr   )r   r   r   r   r      s    zIncrementalEncoder.resetc             C   s   | j d krdS dS )N   r   )r   )r   r   r   r   getstate    s    zIncrementalEncoder.getstatec             C   s,   |rd | _ ntjdkr tj| _ ntj| _ d S )Nr   )r   r   r   r   r   r   )r   stater   r   r   setstate'   s
    

zIncrementalEncoder.setstateN)r   )F)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r
      s
   


r
   c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )IncrementalDecoderr   c             C   s   t jj| | d | _d S )N)r   BufferedIncrementalDecoderr   decoder)r   r   r   r   r   r   1   s    zIncrementalDecoder.__init__c             C   sl   | j d kr\tj||d|\}}}|dkr2tj| _ n"|dkrDtj| _ n|dkrTtd||fS | j || j|S )Nr         z%UTF-32 stream does not start with BOM)r!   r   utf_32_ex_decodeutf_32_le_decodeutf_32_be_decodeUnicodeErrorr   )r   r   r   r   outputconsumedr   r   r   r   _buffer_decode5   s    


z!IncrementalDecoder._buffer_decodec             C   s   t jj|  d | _d S )N)r   r    r   r!   )r   r   r   r   r   B   s    zIncrementalDecoder.resetc             C   sD   t jj| d }| jd kr"|dfS ttjdk| jt jkk}||fS )Nr   r   big)r   r    r   r!   intr   r   r'   )r   r   Zaddstater   r   r   r   F   s    

zIncrementalDecoder.getstatec             C   sd   t jj| | |d }|dkr8tjdkr.t jnt j| _n(|dkrZtjdkrPt jnt j| _nd | _d S )Nr"   r   r,   )r   r    r   r   r   r'   r&   r!   )r   r   r   r   r   r   T   s    

zIncrementalDecoder.setstateN)r   )r   r   r   r   r+   r   r   r   r   r   r   r   r   0   s
   
r   c               @   s(   e Zd Zd	ddZdd Zd
ddZdS )StreamWriterr   c             C   s   d | _ tjj| || d S )N)r   r   r.   r   )r   streamr   r   r   r   r   d   s    zStreamWriter.__init__c             C   s   t jj|  d | _d S )N)r   r.   r   r   )r   r   r   r   r   h   s    zStreamWriter.resetc             C   sF   | j d kr6tj||}tjdkr*tj| _ ntj| _ |S | j ||S d S )Nr   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   l   s    


zStreamWriter.encodeN)r   )r   )r   r   r   r   r   r   r   r   r   r   r.   c   s   
r.   c               @   s   e Zd Zdd ZdddZdS )StreamReaderc             C   s.   t jj|  y| `W n tk
r(   Y nX d S )N)r   r0   r   r	   AttributeError)r   r   r   r   r   y   s
    zStreamReader.resetr   c             C   sR   t j||dd\}}}|dkr(t j| _n"|dkr:t j| _n|dkrJtd||fS )Nr   Fr"   r#   z%UTF-32 stream does not start with BOMr$   )r   r%   r&   r	   r'   r(   )r   r   r   objectr*   r   r   r   r   r	      s    

zStreamReader.decodeN)r   )r   r   r   r   r	   r   r   r   r   r0   w   s   r0   c            	   C   s   t jdttttttdS )Nzutf-32)namer   r	   incrementalencoderincrementaldecoderstreamreaderstreamwriter)r   	CodecInfor   r	   r
   r   r0   r.   r   r   r   r   getregentry   s    r9   )r   )__doc__r   r   r   r   r	   r
   r    r   r.   r0   r9   r   r   r   r   <module>   s   
#3