U
    2Òtc²  ã                   @   s(   d dl Z ddlmZ G dd„ deƒZdS )é    Né   )ÚCachec                   @   s>   e Zd ZdZddd„Zejfdd„Zejfdd„Zd	d
„ ZdS )Ú	FIFOCachez/First In First Out (FIFO) cache implementation.Nc                 C   s   t  | ||¡ t ¡ | _d S ©N)r   Ú__init__ÚcollectionsÚOrderedDictÚ_FIFOCache__order)ÚselfÚmaxsizeÚ	getsizeof© r   ú3/tmp/pip-unpacked-wheel-7ofpm20j/cachetools/fifo.pyr   	   s    zFIFOCache.__init__c                 C   s@   || ||ƒ z| j  |¡ W n tk
r:   d | j |< Y nX d S r   )r	   Úmove_to_endÚKeyError)r
   ÚkeyÚvalueZcache_setitemr   r   r   Ú__setitem__   s
    zFIFOCache.__setitem__c                 C   s   || |ƒ | j |= d S r   )r	   )r
   r   Zcache_delitemr   r   r   Ú__delitem__   s    
zFIFOCache.__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 )z9Remove and return the `(key, value)` pair first inserted.z%s is emptyN)ÚnextÚiterr	   ÚStopIterationr   ÚtypeÚ__name__Úpop)r
   r   r   r   r   Úpopitem   s
    zFIFOCache.popitem)N)	r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r      s
   
r   )r   Úcacher   r   r   r   r   r   Ú<module>   s   