o
    B]^                     @   s0   d dl m Z  G dd deZG dd deZdS )    )bisectc                       s   e Zd ZdZ fddZ fddZ fddZ f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 Z  ZS )OrderedDictz#Ordered dictionary used for indicesc                    sD   g | _ d| _tt|   |r| j|  |r | jdi | d S d S )NT )_OrderedDict__keys_OrderedDict__dirtysuperr   __init__updateselfargskwargs	__class__r   4/usr/lib/python3/dist-packages/pysnmp/smi/indices.pyr      s   
zOrderedDict.__init__c                    s6   t t| || || jvr| j| d| _d S d S NT)r   r   __setitem__r   appendr   r   keyvaluer   r   r   r      s
   

zOrderedDict.__setitem__c                    s4   t t| | || jv r| j| d| _d S d S r   )r   r   __delitem__r   remover   r   r   r   r   r   r      s
   

zOrderedDict.__delitem__c                    s   t t|   g | _d| _d S r   )r   r   clearr   r   r   r   r   r   r   "   s   
zOrderedDict.clearc                 C   s   | j r|   t| jS N)r   _OrderedDict__orderlistr   r   r   r   r   keys'   s   
zOrderedDict.keysc                    "    j r    fdd jD S )Nc                    s   g | ]} | qS r   r   .0kr   r   r   
<listcomp>/   s    z&OrderedDict.values.<locals>.<listcomp>r   r   r   r   r   r   r   values,      zOrderedDict.valuesc                    r    )Nc                    s   g | ]}| | fqS r   r   r!   r   r   r   r$   4       z%OrderedDict.items.<locals>.<listcomp>r%   r   r   r   r   items1   r'   zOrderedDict.itemsc                 O   sf   |r"|d }t |dr|D ]}|| | |< qn|D ]\}}|| |< q|r/|D ]
}|| | |< q&d S d S )Nr   r   )hasattr)r   r   r   iterabler#   vr   r   r   r	   6   s   

zOrderedDict.updatec                 C   s   |   d S r   )sortr   r   r   r   r   
sortingFunD   s   zOrderedDict.sortingFunc                 C   s4   |  | j ttdd | jD dd| _d| _d S )Nc                 s   s    | ]}t |V  qd S r   )lenr!   r   r   r   	<genexpr>I   s    z&OrderedDict.__order.<locals>.<genexpr>T)reverseF)r/   r   sortedset_OrderedDict__keysLensr   r   r   r   r   Z__orderG   s   
zOrderedDict.__orderc                 C   sR   | j r|   | j}||v r||d }nt||}|t|k r%|| S t|)N   )r   r   r   indexr   r0   KeyError)r   r   r   ZnextIdxr   r   r   nextKeyL   s   
zOrderedDict.nextKeyc                 C   s   | j r|   | jS r   )r   r   r5   r   r   r   r   getKeysLens^   s   zOrderedDict.getKeysLens)__name__
__module____qualname____doc__r   r   r   r   r   r&   r)   r	   r/   r   r9   r:   __classcell__r   r   r   r   r   
   s    	r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )OidOrderedDictz'OID-ordered dictionary used for indicesc                 O   s"   i | _ tj| g|R i | d S r   )_OidOrderedDict__keysCacher   r   r
   r   r   r   r   g   s   zOidOrderedDict.__init__c                 C   sR   t | || || jvr't|tr|| j|< d S dd |dD | j|< d S d S )Nc                 S   s   g | ]}|rt |qS r   )int)r"   xr   r   r   r$   q   r(   z.OidOrderedDict.__setitem__.<locals>.<listcomp>.)r   r   rA   
isinstancetuplesplitr   r   r   r   r   k   s   

zOidOrderedDict.__setitem__c                 C   s&   t | | || jv r| j|= d S d S r   )r   r   rA   r   r   r   r   r   s   s   
zOidOrderedDict.__delitem__c                 C   s   |j | jfddd d S )Nc                 S   s   ||  S r   r   )r#   dr   r   r   <lambda>y   s    z+OidOrderedDict.sortingFun.<locals>.<lambda>)r   )r-   rA   r.   r   r   r   r/   x   s   zOidOrderedDict.sortingFunN)r;   r<   r=   r>   r   r   r   r/   r   r   r   r   r@   d   s    r@   N)r   dictr   r@   r   r   r   r   <module>   s   Z