U
    |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   zException 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.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