U
    2tc                     @   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 )MRUCachez.Most Recently Used (MRU) cache implementation.Nc                 C   s   t | || t | _d S N)r   __init__collectionsOrderedDict_MRUCache__order)selfmaxsize	getsizeof r   2/tmp/pip-unpacked-wheel-7ofpm20j/cachetools/mru.pyr   	   s    zMRUCache.__init__c                 C   s    || |}|| kr|  | |S r   _MRUCache__update)r	   keyZcache_getitemvaluer   r   r   __getitem__   s    

zMRUCache.__getitem__c                 C   s   || || |  | d S r   r   )r	   r   r   Zcache_setitemr   r   r   __setitem__   s    zMRUCache.__setitem__c                 C   s   || | | j |= d S r   )r   )r	   r   Zcache_delitemr   r   r   __delitem__   s    
zMRUCache.__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 most recently used.z%s is emptyN)nextiterr   StopIterationKeyErrortype__name__popr	   r   r   r   r   popitem   s
    zMRUCache.popitemc                 C   s8   z| j j|dd W n tk
r2   d | j |< Y nX d S )NF)last)r   move_to_endr   r   r   r   r   Z__update$   s    zMRUCache.__update)N)r   
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r   r      s   
	r   )r   Zcachetools.cacher   r   r   r   r   r   <module>   s   