
rVµ  ã               @   s[   d  d l  Z  e  j d k  s. d  d l m Z n) d  d l m Z Gd d „  d e e ƒ Z d S)	é    Né   é   )ÚOrderedDict)Ú	DictMixinc               @   s  e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d d d „ Z	 d d „  Z
 d d „  Z e j Z e j Z e j Z e j Z e j Z e j Z e j Z e j Z d d „  Z d d „  Z e d d d „ ƒ Z d d „  Z d d „  Z d S)r   c             O   sf   t  | ƒ d k r( t d t  | ƒ ƒ ‚ y |  j Wn t k
 rQ |  j ƒ  Yn X|  j | | Ž  d  S)Né   z$expected at most 1 arguments, got %d)ÚlenÚ	TypeErrorÚ_OrderedDict__endÚAttributeErrorÚclearÚupdate)ÚselfÚargsÚkwds© r   ú9/usr/lib/python3/dist-packages/asn1crypto/_ordereddict.pyÚ__init__#   s    zOrderedDict.__init__c             C   s:   g  |  _  } | d  | | g 7} i  |  _ t j |  ƒ d  S)N)r	   Ú_OrderedDict__mapÚdictr   )r   Úendr   r   r   r   ,   s    	zOrderedDict.clearc             C   s\   | |  k rE |  j  } | d } | | | g | d <| d <|  j | <t j |  | | ƒ d  S)Nr   r   )r	   r   r   Ú__setitem__)r   ÚkeyÚvaluer   Úcurrr   r   r   r   2   s
    	
&zOrderedDict.__setitem__c             C   sC   t  j |  | ƒ |  j j | ƒ \ } } } | | d <| | d <d  S)Nr   r   )r   Ú__delitem__r   Úpop)r   r   ÚprevZnext_r   r   r   r   9   s    
zOrderedDict.__delitem__c             c   s=   |  j  } | d } x# | | k	 r8 | d V| d } q Wd  S)Nr   r   )r	   )r   r   r   r   r   r   Ú__iter__?   s
    	
	zOrderedDict.__iter__c             c   s=   |  j  } | d } x# | | k	 r8 | d V| d } q Wd  S)Nr   r   )r	   )r   r   r   r   r   r   Ú__reversed__F   s
    	
	zOrderedDict.__reversed__Tc             C   sX   |  s t  d ƒ ‚ | r- t |  ƒ j ƒ  } n t |  ƒ j ƒ  } |  j | ƒ } | | f S)Nzdictionary is empty)ÚKeyErrorÚreversedÚnextÚiterr   )r   Zlastr   r   r   r   r   ÚpopitemM   s    zOrderedDict.popitemc                s„   ‡  f d d †  ˆ  Dƒ } ˆ  j  ˆ  j f } ˆ  `  ˆ  ` t ˆ  ƒ j ƒ  } | \ ˆ  _  ˆ  _ | rt ˆ  j | f | f Sˆ  j | f f S)Nc                s    g  |  ] } | ˆ  | g ‘ q Sr   r   )Ú.0Úk)r   r   r   ú
<listcomp>X   s   	 z*OrderedDict.__reduce__.<locals>.<listcomp>)r   r	   ÚvarsÚcopyÚ	__class__)r   ÚitemsZtmpZ	inst_dictr   )r   r   Ú
__reduce__W   s    zOrderedDict.__reduce__c             C   s
   t  |  ƒ S)N)Úlist)r   r   r   r   Úkeysa   s    zOrderedDict.keysc             C   s1   |  s d |  j  j f Sd |  j  j |  j ƒ  f S)Nz%s()z%s(%r))r)   Ú__name__r*   )r   r   r   r   Ú__repr__m   s    zOrderedDict.__repr__c             C   s   |  j  |  ƒ S)N)r)   )r   r   r   r   r(   r   s    zOrderedDict.copyNc             C   s(   |  ƒ  } x | D] } | | | <q W| S)Nr   )ÚclsÚiterabler   Údr   r   r   r   Úfromkeysu   s    	zOrderedDict.fromkeysc             C   s{   t  | t ƒ rk t |  ƒ t | ƒ k r+ d Sx9 t |  j ƒ  | j ƒ  ƒ D] \ } } | | k rG d SqG Wd St j |  | ƒ S)NFT)Ú
isinstancer   r   Úzipr*   r   Ú__eq__)r   ÚotherÚpÚqr   r   r   r6   |   s    (zOrderedDict.__eq__c             C   s   |  | k S)Nr   )r   r7   r   r   r   Ú__ne__†   s    zOrderedDict.__ne__)r.   Ú
__module__Ú__qualname__r   r   r   r   r   r   r#   r+   r-   r   Ú
setdefaultr   r   Úvaluesr*   ZiterkeysZ
itervaluesZ	iteritemsr/   r(   Úclassmethodr3   r6   r:   r   r   r   r   r   !   s.   	

								
r   )r   r   )ÚsysÚversion_infoÚcollectionsr   ÚUserDictr   r   r   r   r   r   Ú<module>   s   