B
    ] Çc  ã               @   sx   d Z ddlZddlmZ ddlmZ ddddgZG d	d„ deƒZG d
d„ deƒZ	dd„ Z
G dd„ dƒZG dd„ dƒZdS )zRImplements (a subset of) Sun XDR -- eXternal Data Representation.

See: RFC 1014

é    N)ÚBytesIO)ÚwrapsÚErrorÚPackerÚUnpackerÚConversionErrorc               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r   zºException class for this module. Use:

    except xdrlib.Error as var:
        # var has the Error instance for the exception

    Public ivars:
        msg -- contains the message

    c             C   s
   || _ d S )N)Úmsg)Úselfr   © r
   úlib/python3.7/xdrlib.pyÚ__init__   s    zError.__init__c             C   s
   t | jƒS )N)Úreprr   )r	   r
   r
   r   Ú__repr__   s    zError.__repr__c             C   s
   t | jƒS )N)Ústrr   )r	   r
   r
   r   Ú__str__   s    zError.__str__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r
   r
   r
   r   r      s   	c               @   s   e Zd ZdS )r   N)r   r   r   r
   r
   r
   r   r       s   c                s   t ˆ ƒ‡ fdd„ƒ}|S )z5 Wrap any raised struct.errors in a ConversionError. c          
      sD   y
ˆ | |ƒS  t jk
r> } zt|jd ƒd ‚W d d }~X Y nX d S )Nr   )ÚstructÚerrorr   Úargs)r	   ÚvalueÚe)Úfunctionr
   r   Úresult&   s    
z&raise_conversion_error.<locals>.result)r   )r   r   r
   )r   r   Úraise_conversion_error#   s    r   c               @   s¨   e Zd ZdZdd„ Zdd„ Zdd„ ZeZedd	„ ƒZ	ed
d„ ƒZ
e
Zdd„ Zdd„ ZeZedd„ ƒZedd„ ƒZdd„ ZeZdd„ ZeZeZdd„ Zdd„ Zdd„ ZdS )r   z0Pack various data representations into a buffer.c             C   s   |   ¡  d S )N)Úreset)r	   r
   r
   r   r   2   s    zPacker.__init__c             C   s   t ƒ | _d S )N)r   Ú_Packer__buf)r	   r
   r
   r   r   5   s    zPacker.resetc             C   s
   | j  ¡ S )N)r   Úgetvalue)r	   r
   r
   r   Ú
get_buffer8   s    zPacker.get_bufferc             C   s   | j  t d|¡¡ d S )Nz>L)r   Úwriter   Úpack)r	   Úxr
   r
   r   Ú	pack_uint=   s    zPacker.pack_uintc             C   s   | j  t d|¡¡ d S )Nz>l)r   r!   r   r"   )r	   r#   r
   r
   r   Úpack_intA   s    zPacker.pack_intc             C   s"   |r| j  d¡ n| j  d¡ d S )Ns      s       )r   r!   )r	   r#   r
   r
   r   Ú	pack_boolG   s     zPacker.pack_boolc          
   C   s    y|   |d? d@ ¡ W n8 ttjfk
rN } zt|jd ƒd ‚W d d }~X Y nX y|   |d@ ¡ W n8 ttjfk
rš } zt|jd ƒd ‚W d d }~X Y nX d S )Né    l   ÿÿ r   )r$   Ú	TypeErrorr   r   r   r   )r	   r#   r   r
   r
   r   Úpack_uhyperK   s    "zPacker.pack_uhyperc             C   s   | j  t d|¡¡ d S )Nz>f)r   r!   r   r"   )r	   r#   r
   r
   r   Ú
pack_floatW   s    zPacker.pack_floatc             C   s   | j  t d|¡¡ d S )Nz>d)r   r!   r   r"   )r	   r#   r
   r
   r   Úpack_double[   s    zPacker.pack_doublec             C   sP   |dk rt dƒ‚|d |… }|d d d }||t|ƒ d  }| j |¡ d S )Nr   z fstring size must be nonnegativeé   é   ó    )Ú
ValueErrorÚlenr   r!   )r	   ÚnÚsÚdatar
   r
   r   Úpack_fstring_   s    zPacker.pack_fstringc             C   s"   t |ƒ}|  |¡ |  ||¡ d S )N)r0   r$   r4   )r	   r2   r1   r
   r
   r   Úpack_stringi   s    
zPacker.pack_stringc             C   s.   x|D ]}|   d¡ ||ƒ qW |   d¡ d S )Né   r   )r$   )r	   ÚlistÚ	pack_itemÚitemr
   r
   r   Ú	pack_listq   s    

zPacker.pack_listc             C   s.   t |ƒ|krtdƒ‚x|D ]}||ƒ qW d S )Nzwrong array size)r0   r/   )r	   r1   r7   r8   r9   r
   r
   r   Úpack_farrayw   s    
zPacker.pack_farrayc             C   s$   t |ƒ}|  |¡ |  |||¡ d S )N)r0   r$   r;   )r	   r7   r8   r1   r
   r
   r   Ú
pack_array}   s    
zPacker.pack_arrayN)r   r   r   r   r   r   r    Zget_bufr   r$   r%   Z	pack_enumr&   r)   Z
pack_hyperr*   r+   r4   Zpack_fopaquer5   Zpack_opaqueZ
pack_bytesr:   r;   r<   r
   r
   r
   r   r   /   s*   
c               @   s°   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZeZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeZdd„ ZeZeZd d!„ Zd"d#„ Zd$d%„ Zd&S )'r   z;Unpacks various data representations from the given buffer.c             C   s   |   |¡ d S )N)r   )r	   r3   r
   r
   r   r   ‡   s    zUnpacker.__init__c             C   s   || _ d| _d S )Nr   )Ú_Unpacker__bufÚ_Unpacker__pos)r	   r3   r
   r
   r   r   Š   s    zUnpacker.resetc             C   s   | j S )N)r>   )r	   r
   r
   r   Úget_positionŽ   s    zUnpacker.get_positionc             C   s
   || _ d S )N)r>   )r	   Zpositionr
   r
   r   Úset_position‘   s    zUnpacker.set_positionc             C   s   | j S )N)r=   )r	   r
   r
   r   r    ”   s    zUnpacker.get_bufferc             C   s   | j t| jƒk rtdƒ‚d S )Nzunextracted data remains)r>   r0   r=   r   )r	   r
   r
   r   Údone—   s    zUnpacker.donec             C   sB   | j }|d  | _ }| j||… }t|ƒdk r2t‚t d|¡d S )Nr-   z>Lr   )r>   r=   r0   ÚEOFErrorr   Úunpack)r	   ÚiÚjr3   r
   r
   r   Úunpack_uint›   s    zUnpacker.unpack_uintc             C   sB   | j }|d  | _ }| j||… }t|ƒdk r2t‚t d|¡d S )Nr-   z>lr   )r>   r=   r0   rB   r   rC   )r	   rD   rE   r3   r
   r
   r   Ú
unpack_int£   s    zUnpacker.unpack_intc             C   s   t |  ¡ ƒS )N)ÚboolrG   )r	   r
   r
   r   Úunpack_bool­   s    zUnpacker.unpack_boolc             C   s    |   ¡ }|   ¡ }t|ƒd> |B S )Nr'   )rF   Úint)r	   ÚhiÚlor
   r
   r   Úunpack_uhyper°   s    zUnpacker.unpack_uhyperc             C   s   |   ¡ }|dkr|d }|S )Nl            l            )rM   )r	   r#   r
   r
   r   Úunpack_hyperµ   s    zUnpacker.unpack_hyperc             C   sB   | j }|d  | _ }| j||… }t|ƒdk r2t‚t d|¡d S )Nr-   z>fr   )r>   r=   r0   rB   r   rC   )r	   rD   rE   r3   r
   r
   r   Úunpack_float»   s    zUnpacker.unpack_floatc             C   sB   | j }|d  | _ }| j||… }t|ƒdk r2t‚t d|¡d S )Né   z>dr   )r>   r=   r0   rB   r   rC   )r	   rD   rE   r3   r
   r
   r   Úunpack_doubleÃ   s    zUnpacker.unpack_doublec             C   sT   |dk rt dƒ‚| j}||d d d  }|t| jƒkr<t‚|| _| j||| … S )Nr   z fstring size must be nonnegativer,   r-   )r/   r>   r0   r=   rB   )r	   r1   rD   rE   r
   r
   r   Úunpack_fstringË   s    zUnpacker.unpack_fstringc             C   s   |   ¡ }|  |¡S )N)rF   rR   )r	   r1   r
   r
   r   Úunpack_string×   s    zUnpacker.unpack_stringc             C   sF   g }x<|   ¡ }|dkrP |dkr.td|f ƒ‚|ƒ }| |¡ qW |S )Nr   r6   z0 or 1 expected, got %r)rF   r   Úappend)r	   Úunpack_itemr7   r#   r9   r
   r
   r   Úunpack_listÞ   s     zUnpacker.unpack_listc             C   s&   g }xt |ƒD ]}| |ƒ ¡ qW |S )N)ÚrangerT   )r	   r1   rU   r7   rD   r
   r
   r   Úunpack_farrayé   s    zUnpacker.unpack_farrayc             C   s   |   ¡ }|  ||¡S )N)rF   rX   )r	   rU   r1   r
   r
   r   Úunpack_arrayï   s    zUnpacker.unpack_arrayN)r   r   r   r   r   r   r?   r@   r    rA   rF   rG   Zunpack_enumrI   rM   rN   rO   rQ   rR   Zunpack_fopaquerS   Zunpack_opaqueZunpack_bytesrV   rX   rY   r
   r
   r
   r   r   „   s.   
)r   r   Úior   Ú	functoolsr   Ú__all__Ú	Exceptionr   r   r   r   r   r
   r
   r
   r   Ú<module>   s   U