B
    –ìZ"  ã               @   s   d dl Z G dd„ de jƒZdS )é    Nc               @   sh   e Zd Zdd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d„Zdd„ Zdd„ ZdS )Ú
OrderedSetNc             C   s2   g  | _ }|d ||g7 }i | _|d k	r.| |O } d S )N)ÚendÚmap)ÚselfÚiterabler   © r   ú=lib/python3.7/site-packages/rope/base/utils/datastructures.pyÚ__init__	   s
    
zOrderedSet.__init__c             C   s
   t | jƒS )N)Úlenr   )r   r   r   r   Ú__len__   s    zOrderedSet.__len__c             C   s
   || j kS )N)r   )r   Úkeyr   r   r   Ú__contains__   s    zOrderedSet.__contains__c             C   s<   || j kr8| j}|d }|||g |d<  |d< | j |< d S )Né   é   )r   r   )r   r   r   Úcurrr   r   r   Úadd   s    
zOrderedSet.addc                s   t ‡ fdd„| D ƒƒS )Nc                s   g | ]}|ˆ kr|‘qS r   r   )Ú.0Úitem)Úset_br   r   ú
<listcomp>   s    z+OrderedSet.intersection.<locals>.<listcomp>)r   )r   r   r   )r   r   Úintersection   s    zOrderedSet.intersectionc             C   s0   || j kr,| j  |¡\}}}||d< ||d< d S )Nr   r   )r   Úpop)r   r   ÚprevÚnextr   r   r   Údiscard    s    
zOrderedSet.discardc             c   s2   | j }|d }x||k	r,|d V  |d }qW d S )Nr   r   )r   )r   r   r   r   r   r   Ú__iter__&   s
    

zOrderedSet.__iter__c             c   s2   | j }|d }x||k	r,|d V  |d }qW d S )Nr   r   )r   )r   r   r   r   r   r   Ú__reversed__-   s
    

zOrderedSet.__reversed__Tc             C   s:   | st dƒ‚|r| jd d n| jd d }|  |¡ |S )Nzset is emptyr   r   r   )ÚKeyErrorr   r   )r   Zlastr   r   r   r   r   4   s
     
zOrderedSet.popc             C   s&   | sd| j jf S d| j jt| ƒf S )Nz%s()z%s(%r))Ú	__class__Ú__name__Úlist)r   r   r   r   Ú__repr__;   s    zOrderedSet.__repr__c             C   s:   t |tƒr*t| ƒt|ƒko(t| ƒt|ƒkS t| ƒt|ƒkS )N)Ú
isinstancer   r
   r    Úset)r   Úotherr   r   r   Ú__eq__@   s    
 zOrderedSet.__eq__)N)T)r   Ú
__module__Ú__qualname__r	   r   r   r   r   r   r   r   r   r!   r%   r   r   r   r   r      s   

r   )ÚcollectionsÚ
MutableSetr   r   r   r   r   Ú<module>   s   