o
    ȷe'                     @   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   M/var/www/ideatree/venv/lib/python3.10/site-packages/uritemplate/orderedset.pyr      s   
 r   c                   @   s   e Zd ZdZddejeje  fddZde	fddZ
d	edefd
dZd	eddfddZd	eddfddZdejeddf fddZdejeddf fddZd dedefddZdefddZdefddZdedefddZdS )!
OrderedSetz9A set that remembers the order in which items were added.Niterablec                 C   s6   t   | _}| |_|_i | _|d ur| |O } d S 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__"      
zOrderedSet.__len__r   c                 C   s
   || j v S r   )r   )r   r   r   r   r   __contains__%   r   zOrderedSet.__contains__c                 C   sV   || j vr)t  | j |< }| j}|j}||||_|_|_t| |_|_d S d S r   )r   r   r   r   r   r   weakrefproxy)r   r   linkr   lastr   r   r   add(   s   
zOrderedSet.addc                 C   s2   || j v r| j |}|j|j_|j|j_d S d S r   )r   popr   r   )r   r   r    r   r   r   discard1   s
   

zOrderedSet.discardc                 c   4    | j }|j}||ur|jV  |j}||usd S d S r   )r   r   r   r   r   currr   r   r   __iter__9      zOrderedSet.__iter__c                 c   r%   r   )r   r   r   r&   r   r   r   __reversed__A   r)   zOrderedSet.__reversed__Tr!   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   )r2   r   r   r   r   __str__U   s   zOrderedSet.__str__otherc                 C   sH   t |trt| t|kot| t|kS ttjt |}| | S r   )	
isinstancer   r   r1   tcastIterabler   
isdisjoint)r   r4   r   r   r   __eq__X   s   
 zOrderedSet.__eq__r   )T)r   r   r	   r
   r6   Optionalr8   r   r   intr   objectboolr   r"   r$   	Generatorr(   r*   r#   r2   r3   r:   r   r   r   r   r      s    	r   )typingr6   r   r   
MutableSetr   r   r   r   r   r   <module>   s   	