
    ui                     x    d dl Z d dlmZ d dlmZmZ  G d d          Z G d d          Z G d d	          ZdS )
    N)TracebackType)OptionalTypec                   :    e Zd ZdZd	dZd	dZd	dZd	dZd	dZdS )
ReadWriteLockzYA lock object that allows many simultaneous "read locks", but
    only one "write lock." returnNc                 h    t          j        t          j                              | _        d| _        d S )Nr   )	threading	ConditionRLock_read_ready_readersselfs    Q/var/www/icac/venv/lib/python3.11/site-packages/chromadb/utils/read_write_lock.py__init__zReadWriteLock.__init__
   s(    $.y/@/@AA    c                     | j                                          	 | xj        dz  c_        | j                                          dS # | j                                          w xY w)zQAcquire a read lock. Blocks only if a thread has
        acquired the write lock.   N)r   acquirer   releaser   s    r   acquire_readzReadWriteLock.acquire_read   sd     	  """	'MMQMM$$&&&&&D$$&&&&s   A A!c                    | j                                          	 | xj        dz  c_        | j        s| j                                          | j                                          dS # | j                                          w xY w)zRelease a read lock.r   N)r   r   r   
notify_allr   r   s    r   release_readzReadWriteLock.release_read   s      """	'MMQMM= . ++---$$&&&&&D$$&&&&s   0A& &Bc                     | j                                          | j        dk    r&| j                                          | j        dk    $dS dS )zUAcquire a write lock. Blocks until there are no
        acquired read or write locks.r   N)r   r   r   waitr   s    r   acquire_writezReadWriteLock.acquire_write!   sV     	  """ma!!### mar   c                 8    | j                                          dS )zRelease a write lock.N)r   r   r   s    r   release_writezReadWriteLock.release_write(   s      """""r   r   N)	__name__
__module____qualname____doc__r   r   r   r   r     r   r   r   r      s            ' ' ' '' ' ' '$ $ $ $# # # # # #r   r   c                   j    e Zd ZdefdZd
dZdeee                  dee         dee	         ddfd	Z
dS )
ReadRWLockrwLockc                     || _         d S Nr)   r   r)   s     r   r   zReadRWLock.__init__.       r   r   Nc                 8    | j                                          d S r+   )r)   r   r   s    r   	__enter__zReadRWLock.__enter__1   s      """""r   exc_type	exc_value	tracebackc                 8    | j                                          d S r+   )r)   r   r   r1   r2   r3   s       r   __exit__zReadRWLock.__exit__4   s     	  """""r   r!   r"   r#   r$   r   r   r0   r   r   BaseExceptionr   r6   r&   r   r   r(   r(   -   s        }    # # # ##4./# M*# M*	#
 
# # # # # #r   r(   c                   j    e Zd ZdefdZd
dZdeee                  dee         dee	         ddfd	Z
dS )WriteRWLockr)   c                     || _         d S r+   r,   r-   s     r   r   zWriteRWLock.__init__>   r.   r   r   Nc                 8    | j                                          d S r+   )r)   r   r   s    r   r0   zWriteRWLock.__enter__A   s    !!#####r   r1   r2   r3   c                 8    | j                                          d S r+   )r)   r    r5   s       r   r6   zWriteRWLock.__exit__D   s     	!!#####r   r!   r7   r&   r   r   r:   r:   =   s        }    $ $ $ $$4./$ M*$ M*	$
 
$ $ $ $ $ $r   r:   )	r
   typesr   typingr   r   r   r(   r:   r&   r   r   <module>r@      s              ! ! ! ! ! ! ! !$# $# $# $# $# $# $# $#N# # # # # # # # $ $ $ $ $ $ $ $ $ $r   