o
    µ3IhÚ  ã                   @   sR   d dl Z d dlmZ d dlmZmZ G dd„ dƒZG dd„ dƒZG dd	„ d	ƒZdS )
é    N)ÚTracebackType)ÚOptionalÚTypec                   @   sB   e Zd ZdZddd„Zddd„Zddd	„Zdd
d„Zddd„ZdS )ÚReadWriteLockzYA lock object that allows many simultaneous "read locks", but
    only one "write lock." ÚreturnNc                 C   s   t  t  ¡ ¡| _d| _d S )Nr   )Ú	threadingÚ	ConditionÚRLockÚ_read_readyÚ_readers©Úself© r   ú^/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/chromadb/utils/read_write_lock.pyÚ__init__
   s   
zReadWriteLock.__init__c                 C   s6   | j  ¡  z|  jd7  _W | j  ¡  dS | j  ¡  w )zQAcquire a read lock. Blocks only if a thread has
        acquired the write lock.é   N)r
   Úacquirer   Úreleaser   r   r   r   Úacquire_read   s   
zReadWriteLock.acquire_readc                 C   sV   | j  ¡  z|  jd8  _| js| j  ¡  W | j  ¡  dS W | j  ¡  dS | j  ¡  w )zRelease a read lock.r   N)r
   r   r   Ú
notify_allr   r   r   r   r   Úrelease_read   s   
ýzReadWriteLock.release_readc                 C   s0   | j  ¡  | jdkr| j  ¡  | jdks
dS dS )zUAcquire a write lock. Blocks until there are no
        acquired read or write locks.r   N)r
   r   r   Úwaitr   r   r   r   Úacquire_write!   s   


ÿzReadWriteLock.acquire_writec                 C   s   | j  ¡  dS )zRelease a write lock.N)r
   r   r   r   r   r   Úrelease_write(   s   zReadWriteLock.release_write©r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r      s    


	

r   c                   @   óN   e Zd Zdefdd„Zddd„Zdeee  d	ee d
ee	 ddfdd„Z
dS )Ú
ReadRWLockÚrwLockc                 C   ó
   || _ d S ©N©r!   ©r   r!   r   r   r   r   .   ó   
zReadRWLock.__init__r   Nc                 C   ó   | j  ¡  d S r#   )r!   r   r   r   r   r   Ú	__enter__1   ó   zReadRWLock.__enter__Úexc_typeÚ	exc_valueÚ	tracebackc                 C   r'   r#   )r!   r   ©r   r*   r+   r,   r   r   r   Ú__exit__4   ó   zReadRWLock.__exit__r   ©r   r   r   r   r   r(   r   r   ÚBaseExceptionr   r.   r   r   r   r   r    -   ó    

þýüûr    c                   @   r   )ÚWriteRWLockr!   c                 C   r"   r#   r$   r%   r   r   r   r   >   r&   zWriteRWLock.__init__r   Nc                 C   r'   r#   )r!   r   r   r   r   r   r(   A   r)   zWriteRWLock.__enter__r*   r+   r,   c                 C   r'   r#   )r!   r   r-   r   r   r   r.   D   r/   zWriteRWLock.__exit__r   r0   r   r   r   r   r3   =   r2   r3   )	r   Útypesr   Útypingr   r   r   r    r3   r   r   r   r   Ú<module>   s    '