U
    T³d'  ã                   @   s8   d dl Zd dlZG dd„ dƒZG dd„ deje ƒZdS )é    Nc                   @   s.   e Zd ZU dZdZd ed< d ed< eed< dS )ÚLinkz3Representation of one item in a doubly-linked list.)ÚprevÚnextÚkeyÚ__weakref__r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Ú__annotations__Ústr© r   r   ú:/tmp/pip-unpacked-wheel-qt7p1f5q/uritemplate/orderedset.pyr      s
   
r   c                   @   sÜ   e Zd ZdZdejeje  dœdd„Ze	dœdd„Z
eed	œd
d„Zedd	œdd„Zedd	œdd„Zejeddf dœdd„Zejeddf dœdd„Zd eedœdd„Zedœdd„Zedœdd„Zeedœdd„ZdS )!Ú
OrderedSetz9A set that remembers the order in which items were added.N)Úiterablec                 C   s2   t ƒ  | _}| |_|_i | _|d k	r.| |O } d S ©N)r   Ú_OrderedSet__rootr   r   Ú_OrderedSet__map)Úselfr   Úrootr   r   r   Ú__init__   s
    zOrderedSet.__init__)Úreturnc                 C   s
   t | jƒS r   )Úlenr   ©r   r   r   r   Ú__len__"   s    zOrderedSet.__len__)r   r   c                 C   s
   || j kS r   )r   )r   r   r   r   r   Ú__contains__%   s    zOrderedSet.__contains__c                 C   sR   || j krNtƒ  | j |< }| j}|j}|||  |_|_|_t |¡ |_|_d S r   )r   r   r   r   r   r   ÚweakrefÚproxy)r   r   Úlinkr   Úlastr   r   r   Úadd(   s    
zOrderedSet.addc                 C   s.   || j kr*| j  |¡}|j|j_|j|j_d S r   )r   Úpopr   r   )r   r   r   r   r   r   Údiscard1   s    

zOrderedSet.discardc                 c   s(   | j }|j}||k	r$|jV  |j}qd S r   )r   r   r   ©r   r   Úcurrr   r   r   Ú__iter__9   s
    zOrderedSet.__iter__c                 c   s(   | j }|j}||k	r$|jV  |j}qd S r   )r   r   r   r$   r   r   r   Ú__reversed__A   s
    zOrderedSet.__reversed__T)r    r   c                 C   s6   | st dƒ‚|rtt| ƒƒn
tt| ƒƒ}|  |¡ |S )Nzset is empty)ÚKeyErrorr   ÚreversedÚiterr#   )r   r    r   r   r   r   r"   I   s
    
zOrderedSet.popc                 C   s*   | s| j j› dS | j j› dt| ƒ›dS )Nz()ú(ú))Ú	__class__r   Úlistr   r   r   r   Ú__repr__P   s    zOrderedSet.__repr__c                 C   s   |   ¡ S r   )r/   r   r   r   r   Ú__str__U   s    zOrderedSet.__str__)Úotherr   c                 C   sH   t |tƒr*t| ƒt|ƒko(t| ƒt|ƒkS t tjt |¡}|  |¡ S r   )	Ú
isinstancer   r   r.   ÚtÚcastÚIterabler   Ú
isdisjoint)r   r1   r   r   r   Ú__eq__X   s    
 zOrderedSet.__eq__)N)T)r   r   r	   r
   r3   ÚOptionalr5   r   r   Úintr   ÚobjectÚboolr   r!   r#   Ú	Generatorr&   r'   r"   r/   r0   r7   r   r   r   r   r      s   	r   )Útypingr3   r   r   Ú
MutableSetr   r   r   r   r   r   Ú<module>   s   	