î
[á[\  ã               @   sŠ   d  Z  d d l Z d d l m Z d d d d g Z Gd d „  d e ƒ Z Gd	 d „  d e ƒ Z Gd
 d „  d ƒ Z Gd d „  d ƒ Z	 d S)zRImplements (a subset of) Sun XDR -- eXternal Data Representation.

See: RFC 1014

é    N)ÚBytesIOÚ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.4/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â   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z e Z d d	 „  Z d
 d „  Z	 e	 Z
 d d „  Z d d „  Z e 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   z0Pack various data representations into a buffer.c             C   s   |  j  ƒ  d  S)N)Úreset)r   r	   r	   r
   r   '   s    zPacker.__init__c             C   s   t  ƒ  |  _ d  S)N)r   Ú_Packer__buf)r   r	   r	   r
   r   *   s    zPacker.resetc             C   s   |  j  j ƒ  S)N)r   Úgetvalue)r   r	   r	   r
   Ú
get_buffer-   s    zPacker.get_bufferc             C   s    |  j  j t j d | ƒ ƒ d  S)Nz>L)r   ÚwriteÚstructÚpack)r   Úxr	   r	   r
   Ú	pack_uint2   s    zPacker.pack_uintc             C   s    |  j  j t j d | ƒ ƒ d  S)Nz>l)r   r   r   r   )r   r   r	   r	   r
   Úpack_int5   s    zPacker.pack_intc             C   s-   | r |  j  j d ƒ n |  j  j d ƒ d  S)Ns      s       )r   r   )r   r   r	   r	   r
   Ú	pack_bool:   s     zPacker.pack_boolc             C   s*   |  j  | d ?d @ƒ |  j  | d @ƒ d  S)Né    l   ÿÿ )r   )r   r   r	   r	   r
   Úpack_uhyper>   s    zPacker.pack_uhyperc             C   s[   y  |  j  j t j d | ƒ ƒ Wn4 t j k
 rV } z t | ƒ ‚ WYd  d  } ~ Xn Xd  S)Nz>f)r   r   r   r   Úerrorr   )r   r   r   r	   r	   r
   Ú
pack_floatD   s      zPacker.pack_floatc             C   s[   y  |  j  j t j d | ƒ ƒ Wn4 t j k
 rV } z t | ƒ ‚ WYd  d  } ~ Xn Xd  S)Nz>d)r   r   r   r   r!   r   )r   r   r   r	   r	   r
   Úpack_doubleI   s      zPacker.pack_doublec             C   si   | d k  r t  d ƒ ‚ n  | d  | … } | d d d } | | t | ƒ d } |  j j | ƒ d  S)Nr   z fstring size must be nonnegativeé   é   s    )Ú
ValueErrorÚlenr   r   )r   ÚnÚsÚdatar	   r	   r
   Úpack_fstringN   s    zPacker.pack_fstringc             C   s-   t  | ƒ } |  j | ƒ |  j | | ƒ d  S)N)r'   r   r+   )r   r)   r(   r	   r	   r
   Úpack_stringX   s    zPacker.pack_stringc             C   s9   x% | D] } |  j  d ƒ | | ƒ q W|  j  d ƒ d  S)Né   r   )r   )r   ÚlistÚ	pack_itemÚitemr	   r	   r
   Ú	pack_list`   s    zPacker.pack_listc             C   s@   t  | ƒ | k r! t d ƒ ‚ n  x | D] } | | ƒ q( Wd  S)Nzwrong array size)r'   r&   )r   r(   r.   r/   r0   r	   r	   r
   Úpack_farrayf   s    zPacker.pack_farrayc             C   s0   t  | ƒ } |  j | ƒ |  j | | | ƒ d  S)N)r'   r   r2   )r   r.   r/   r(   r	   r	   r
   Ú
pack_arrayl   s    zPacker.pack_arrayN)r   r   r   r   r   r   r   Zget_bufr   r   Z	pack_enumr   r    Z
pack_hyperr"   r#   r+   Zpack_fopaquer,   Zpack_opaqueZ
pack_bytesr1   r2   r3   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   |  j  | ƒ d  S)N)r   )r   r*   r	   r	   r
   r   v   s    zUnpacker.__init__c             C   s   | |  _  d |  _ d  S)Nr   )Ú_Unpacker__bufÚ_Unpacker__pos)r   r*   r	   r	   r
   r   y   s    	zUnpacker.resetc             C   s   |  j  S)N)r5   )r   r	   r	   r
   Úget_position}   s    zUnpacker.get_positionc             C   s   | |  _  d  S)N)r5   )r   Zpositionr	   r	   r
   Úset_position€   s    zUnpacker.set_positionc             C   s   |  j  S)N)r4   )r   r	   r	   r
   r   ƒ   s    zUnpacker.get_bufferc             C   s+   |  j  t |  j ƒ k  r' t d ƒ ‚ n  d  S)Nzunextracted data remains)r5   r'   r4   r   )r   r	   r	   r
   Údone†   s    zUnpacker.donec             C   s\   |  j  } | d |  _  } |  j | | … } t | ƒ d k  rH t ‚ n  t j d | ƒ d S)Nr%   z>Lr   )r5   r4   r'   ÚEOFErrorr   Úunpack)r   ÚiÚjr*   r	   r	   r
   Úunpack_uintŠ   s    		zUnpacker.unpack_uintc             C   s\   |  j  } | d |  _  } |  j | | … } t | ƒ d k  rH t ‚ n  t j d | ƒ d S)Nr%   z>lr   )r5   r4   r'   r9   r   r:   )r   r;   r<   r*   r	   r	   r
   Ú
unpack_int’   s    		zUnpacker.unpack_intc             C   s   t  |  j ƒ  ƒ S)N)Úboolr>   )r   r	   r	   r
   Úunpack_boolœ   s    zUnpacker.unpack_boolc             C   s*   |  j  ƒ  } |  j  ƒ  } t | ƒ d >| BS)Nr   )r=   Úint)r   ÚhiÚlor	   r	   r
   Úunpack_uhyperŸ   s    zUnpacker.unpack_uhyperc             C   s)   |  j  ƒ  } | d k r% | d } n  | S)Nl            l            )rD   )r   r   r	   r	   r
   Úunpack_hyper¤   s    zUnpacker.unpack_hyperc             C   s\   |  j  } | d |  _  } |  j | | … } t | ƒ d k  rH t ‚ n  t j d | ƒ d S)Nr%   z>fr   )r5   r4   r'   r9   r   r:   )r   r;   r<   r*   r	   r	   r
   Úunpack_floatª   s    		zUnpacker.unpack_floatc             C   s\   |  j  } | d |  _  } |  j | | … } t | ƒ d k  rH t ‚ n  t j d | ƒ d S)Né   z>dr   )r5   r4   r'   r9   r   r:   )r   r;   r<   r*   r	   r	   r
   Úunpack_double²   s    		zUnpacker.unpack_doublec             C   sv   | d k  r t  d ƒ ‚ n  |  j } | | d d d } | t |  j ƒ k rX t ‚ n  | |  _ |  j | | | … S)Nr   z fstring size must be nonnegativer$   r%   )r&   r5   r'   r4   r9   )r   r(   r;   r<   r	   r	   r
   Úunpack_fstringº   s    			zUnpacker.unpack_fstringc             C   s   |  j  ƒ  } |  j | ƒ S)N)r=   rI   )r   r(   r	   r	   r
   Úunpack_stringÆ   s    zUnpacker.unpack_stringc             C   sd   g  } xW |  j  ƒ  } | d k r% Pn  | d k rG t d | f ƒ ‚ n  | ƒ  } | j | ƒ q	 | S)Nr   r-   z0 or 1 expected, got %r)r=   r   Úappend)r   Úunpack_itemr.   r   r0   r	   r	   r
   Úunpack_listÍ   s     	zUnpacker.unpack_listc             C   s1   g  } x$ t  | ƒ D] } | j | ƒ  ƒ q W| S)N)ÚrangerK   )r   r(   rL   r.   r;   r	   r	   r
   Úunpack_farrayØ   s    zUnpacker.unpack_farrayc             C   s   |  j  ƒ  } |  j | | ƒ S)N)r=   rO   )r   rL   r(   r	   r	   r
   Úunpack_arrayÞ   s    zUnpacker.unpack_arrayN)r   r   r   r   r   r   r6   r7   r   r8   r=   r>   Zunpack_enumr@   rD   rE   rF   rH   rI   Zunpack_fopaquerJ   Zunpack_opaqueZunpack_bytesrM   rO   rP   r	   r	   r	   r
   r   s   s.   
)
r   r   Úior   Ú__all__Ú	Exceptionr   r   r   r   r	   r	   r	   r
   Ú<module>   s   O