Your IP : 216.73.216.213
B
�d{T% � @ s: d Z dZddlmZ ddlmZ e� ZG dd� de�Z dS )zfCache module, with a least recently used algorithm for the management of the
deletion of entries.
zrestructuredtext en� )�Lock)�lockedc s� e Zd ZdZd� 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�Ze ee�e�Ze
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
�d c s6 |dkst d��|| _g | _t� | _tt| ��� dS )zu Warning : Cache.__init__() != dict.__init__().
Constructor does not take any arguments beside size.
r z.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__c C s | j �� d S )N)r �acquire)r r r r �_acquire3 s zCache._acquirec C s | j �� d S )N)r �release)r r r r �_release6 s zCache._releasec s� | j s| j �|� nv| j d |kr�y| j �|� W nH tk
rz | jrvt| j �| jkrvtt| ��| j d � | j d= Y nX | j �|� n d S )N���r ) r �append�remove�
ValueErrorr �lenr
r �__delitem__)r �key)r
r r �
_update_usage9 s zCache._update_usagec s t t| ��|�}| �|� |S )N)r
r �__getitem__r )r r �value)r
r r r J s
zCache.__getitem__c s* | j dkr&tt| ��||� | �|� d S )Nr )r r
r �__setitem__r )r r �item)r
r r r P s
zCache.__setitem__c s t t| ��|� | j�|� d S )N)r
r r r r )r r )r
r r r W s zCache.__delitem__c s t t| ��� g | _d S )N)r
r �clearr )r )r
r r r \ s zCache.clearc s&