U
    2ÒtcÈ  ã                   @   s(   d dl Z ddlmZ G dd„ deƒZdS )é    Né   )ÚCachec                   @   sT   e Zd ZdZddd„Zejfdd„Zejfdd„Zejfd	d
„Zdd„ Z	dd„ Z
dS )ÚLRUCachez/Least Recently Used (LRU) cache implementation.Nc                 C   s   t  | ||¡ t ¡ | _d S ©N)r   Ú__init__ÚcollectionsÚOrderedDictÚ_LRUCache__order)ÚselfÚmaxsizeÚ	getsizeof© r   ú2/tmp/pip-unpacked-wheel-7ofpm20j/cachetools/lru.pyr   	   s    zLRUCache.__init__c                 C   s    || |ƒ}|| kr|   |¡ |S r   ©Ú_LRUCache__update)r
   ÚkeyZcache_getitemÚvaluer   r   r   Ú__getitem__   s    

zLRUCache.__getitem__c                 C   s   || ||ƒ |   |¡ d S r   r   )r
   r   r   Zcache_setitemr   r   r   Ú__setitem__   s    zLRUCache.__setitem__c                 C   s   || |ƒ | j |= d S r   )r	   )r
   r   Zcache_delitemr   r   r   Ú__delitem__   s    
zLRUCache.__delitem__c                 C   sN   zt t| jƒƒ}W n( tk
r:   tdt| ƒj ƒd‚Y nX ||  |¡fS dS )z>Remove and return the `(key, value)` pair least recently used.z%s is emptyN)ÚnextÚiterr	   ÚStopIterationÚKeyErrorÚtypeÚ__name__Úpop©r
   r   r   r   r   Úpopitem   s
    zLRUCache.popitemc                 C   s4   z| j  |¡ W n tk
r.   d | j |< Y nX d S r   )r	   Úmove_to_endr   r   r   r   r   Z__update$   s    zLRUCache.__update)N)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r   r   r      s   
	r   )r   Úcacher   r   r   r   r   r   Ú<module>   s   