Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib/python3.7/site-packages/logilab/common/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib/python3.7/site-packages/logilab/common/__pycache__/cache.cpython-37.pyc

B

�d{T%�@s:dZdZddlmZddlmZe�ZGdd�de�Z	dS)zfCache module, with a least recently used algorithm for the management of the
deletion of entries.




zrestructuredtext en�)�Lock)�lockedcs�eZdZdZd�fdd�	Zdd�Zdd�Z�fd	d
�Z�fdd�Ze	ee�e�Z�fd
d�Z
e	ee�e
�Z
�fdd�Ze	ee�e�Z�fdd�Ze	ee�e�Ze
f�fdd�	Ze	ee�e�Zdd�Zddd�Zdd�Z�ZS)�CachezqA dictionary like cache.

    inv:
        len(self._usage) <= self.size
        len(self.data) <= self.size
    �dcs6|dkstd��||_g|_t�|_tt|���dS)zu Warning : Cache.__init__() != dict.__init__().
        Constructor does not take any arguments beside size.
        rz.cache size must be >= 0 (0 meaning no caching)N)�AssertionError�size�_usager�_lock�superr�__init__)�selfr)�	__class__��E/opt/alt/python37/lib/python3.7/site-packages/logilab/common/cache.pyr)s
zCache.__init__cCs|j��dS)N)r	�acquire)rrrr�_acquire3szCache._acquirecCs|j��dS)N)r	�release)rrrr�_release6szCache._releasecs�|js|j�|�nv|jd|kr�y|j�|�WnHtk
rz|jrvt|j�|jkrvtt|��|jd�|jd=YnX|j�|�ndS)N���r)	r�append�remove�
ValueErrorr�lenr
r�__delitem__)r�key)r
rr�
_update_usage9szCache._update_usagecstt|��|�}|�|�|S)N)r
r�__getitem__r)rr�value)r
rrrJs
zCache.__getitem__cs*|jdkr&tt|��||�|�|�dS)Nr)rr
r�__setitem__r)rr�item)r
rrrPs
zCache.__setitem__cs tt|��|�|j�|�dS)N)r
rrrr)rr)r
rrrWszCache.__delitem__cstt|���g|_dS)N)r
r�clearr)r)r
rrr \szCache.clearcs&||kr|j�|�tt|��||�S)N)rrr
r�pop)rr�default)r
rrr!asz	Cache.popcCs
t��dS)N)�NotImplementedError)rrrr�popitemisz
Cache.popitemNcCs
t��dS)N)r#)rrr"rrr�
setdefaultlszCache.setdefaultcCs
t��dS)N)r#)r�otherrrr�updateoszCache.update)r)N)�__name__�
__module__�__qualname__�__doc__rrrrrrrrr �_markerr!r$r%r'�
__classcell__rr)r
rr!s$

rN)
r+�
__docformat__�	threadingrZlogilab.common.decoratorsr�objectr,�dictrrrrr�<module>s