U
    aúd  ã                   @   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   ú/usr/lib/python3.8/xdrlib.pyÚ__init__   s    zError.__init__c                 C   s
   t | jƒS r	   )Úreprr
   ©r   r   r   r   Ú__repr__   s    zError.__repr__c                 C   s
   t | jƒS r	   )Ú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              
      sF   zˆ | |ƒW S  t jk
r@ } zt|jd ƒd ‚W 5 d }~X Y nX d S ©Nr   )ÚstructÚerrorr   Úargs)r   ÚvalueÚe©Úfunctionr   r   Úresult&   s    z&raise_conversion_error.<locals>.resultr   )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 r	   ©Úresetr   r   r   r   r   2   s    zPacker.__init__c                 C   s   t ƒ | _d S r	   )r   Ú_Packer__bufr   r   r   r   r#   5   s    zPacker.resetc                 C   s
   | j  ¡ S r	   )r$   Úgetvaluer   r   r   r   Ú
get_buffer8   s    zPacker.get_bufferc                 C   s   | j  t d|¡¡ d S )Nú>L©r$   Úwriter   Zpack©r   Úxr   r   r   Ú	pack_uint=   s    zPacker.pack_uintc                 C   s   | j  t d|¡¡ d S )Nú>lr(   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   Ú	pack_boolG   s     zPacker.pack_boolc              
   C   s    z|   |d? d@ ¡ W n8 ttjfk
rN } zt|jd ƒd ‚W 5 d }~X Y nX z|   |d@ ¡ W n8 ttjfk
rš } zt|jd ƒd ‚W 5 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 )Nú>fr(   r*   r   r   r   Ú
pack_floatW   s    zPacker.pack_floatc                 C   s   | j  t d|¡¡ d S )Nú>dr(   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   ú 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 r	   )r<   r,   r@   )r   r>   r=   r   r   r   Úpack_stringi   s    
zPacker.pack_stringc                 C   s*   |D ]}|   d¡ ||ƒ q|   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ƒ‚|D ]}||ƒ qd S )Nzwrong array size)r<   r;   )r   r=   rC   rD   rE   r   r   r   Úpack_farrayw   s    zPacker.pack_farrayc                 C   s$   t |ƒ}|  |¡ |  |||¡ d S r	   )r<   r,   rG   )r   rC   rD   r=   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/   r2   Z
pack_hyperr4   r6   r@   Zpack_fopaquerA   Zpack_opaqueZ
pack_bytesrF   rG   rH   r   r   r   r   r   /   s2   




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 r	   r"   ©r   r?   r   r   r   r   ‡   s    zUnpacker.__init__c                 C   s   || _ d| _d S r   )Ú_Unpacker__bufÚ_Unpacker__posrI   r   r   r   r#   Š   s    zUnpacker.resetc                 C   s   | j S r	   ©rK   r   r   r   r   Úget_positionŽ   s    zUnpacker.get_positionc                 C   s
   || _ d S r	   rL   )r   Zpositionr   r   r   Úset_position‘   s    zUnpacker.set_positionc                 C   s   | j S r	   )rJ   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)rK   r<   rJ   r   r   r   r   r   Údone—   s    zUnpacker.donec                 C   sB   | j }|d  | _ }| j||… }t|ƒdk r2t‚t d|¡d S )Nr9   r'   r   ©rK   rJ   r<   ÚEOFErrorr   Zunpack©r   ÚiÚjr?   r   r   r   Úunpack_uint›   s    zUnpacker.unpack_uintc                 C   sB   | j }|d  | _ }| j||… }t|ƒdk r2t‚t d|¡d S )Nr9   r-   r   rP   rR   r   r   r   Ú
unpack_int£   s    zUnpacker.unpack_intc                 C   s   t |  ¡ ƒS r	   )ÚboolrV   r   r   r   r   Úunpack_bool­   s    zUnpacker.unpack_boolc                 C   s    |   ¡ }|   ¡ }t|ƒd> |B S )Nr0   )rU   Úint)r   ÚhiÚlor   r   r   Úunpack_uhyper°   s    zUnpacker.unpack_uhyperc                 C   s   |   ¡ }|dkr|d }|S )Nl            l            )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 )Nr9   r3   r   rP   rR   r   r   r   Úunpack_float»   s    zUnpacker.unpack_floatc                 C   sB   | j }|d  | _ }| j||… }t|ƒdk r2t‚t d|¡d S )Né   r5   r   rP   rR   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   r7   r8   r9   )r;   rK   r<   rJ   rQ   )r   r=   rS   rT   r   r   r   Úunpack_fstringË   s    zUnpacker.unpack_fstringc                 C   s   |   ¡ }|  |¡S r	   )rU   ra   )r   r=   r   r   r   Úunpack_string×   s    zUnpacker.unpack_stringc                 C   sB   g }|   ¡ }|dkrq>|dkr,td|f ƒ‚|ƒ }| |¡ q|S )Nr   rB   z0 or 1 expected, got %r)rU   r   Úappend)r   Úunpack_itemrC   r+   rE   r   r   r   Úunpack_listÞ   s     zUnpacker.unpack_listc                 C   s"   g }t |ƒD ]}| |ƒ ¡ q|S r	   )Úrangerc   )r   r=   rd   rC   rS   r   r   r   Úunpack_farrayé   s    zUnpacker.unpack_farrayc                 C   s   |   ¡ }|  ||¡S r	   )rU   rg   )r   rd   r=   r   r   r   Úunpack_arrayï   s    zUnpacker.unpack_arrayN)r   r   r   r   r   r#   rM   rN   r&   rO   rU   rV   Zunpack_enumrX   r\   r]   r^   r`   ra   Zunpack_fopaquerb   Zunpack_opaqueZunpack_bytesre   rg   rh   r   r   r   r   r   „   s.   
)r   r   Úior   Ú	functoolsr   Ú__all__Ú	Exceptionr   r   r!   r   r   r   r   r   r   Ú<module>   s   U