U
vi @ sD d dl mZ d dlmZ d dlmZ ddlmZ G dd deZdS ) )RLock)Optional)DisposableBase )
Disposablec sf e Zd ZdZG dd deZedd fddZddd d
ZddddZe edd
dZ
ZS )RefCountDisposablezRepresents a disposable resource that only disposes its underlying
disposable resource when all dependent disposable objects have been
disposed.c @ s* e Zd ZdddddZddddZdS ) z"RefCountDisposable.InnerDisposabler N)parentreturnc C s || _ d| _t | _d S )NF)r is_disposedr lockselfr r X/opt/alt/python38/lib/python3.8/site-packages/reactivex/disposable/refcountdisposable.py__init__ s z+RefCountDisposable.InnerDisposable.__init__r c C s2 | j | j}d | _W 5 Q R X |d k r.| d S )N)r r releaser r r r dispose s
z*RefCountDisposable.InnerDisposable.dispose)__name__
__module____qualname__r r r r r r InnerDisposable s r N)
disposabler c s. || _ d| _d| _t | _d| _t dS )zaInitializes a new instance of the RefCountDisposable class with the
specified disposable.Fr N)underlying_disposableis_primary_disposedr
r r countsuperr )r
r __class__r r r s zRefCountDisposable.__init__r c C sR | j r
dS d}| j$ | js4d| _| js4d| _ | j}W 5 Q R X |dk rN| dS )zaDisposes the underlying disposable only when all dependent
disposable have been disposed.NT)r
r r r r r )r
r r r r r ( s zRefCountDisposable.disposec C sV | j r
d S d}| j* | jd8 _| js:| jr:d| _ d}W 5 Q R X |rR| j d S )NFr T)r
r r r r r )r
Zshould_disposer r r r : s zRefCountDisposable.releasec
C sN | j > | jr t W 5 Q R S | jd7 _| | W 5 Q R S Q R X dS )znReturns a dependent disposable that when disposed decreases the
refcount on the underlying disposable.r N)r r
r r r )r
r r r r H s
zRefCountDisposable.disposable)r r r __doc__r r r r r propertyr
__classcell__r r r r r s r N) threadingr typingr Z
reactivex.abcr r r r r r r r