U vi @sDddlmZddlmZddlmZddlmZGdddeZdS) )RLock)Optional)DisposableBase) DisposablecsfeZdZdZGdddeZeddfdd Zddd d Zddd d Ze edd dZ Z S)RefCountDisposablezRepresents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed.c@s*eZdZdddddZddddZdS) z"RefCountDisposable.InnerDisposablerN)parentreturncCs||_d|_t|_dS)NF)r is_disposedrlockselfrrX/opt/alt/python38/lib/python3.8/site-packages/reactivex/disposable/refcountdisposable.py__init__sz+RefCountDisposable.InnerDisposable.__init__r c Cs2|j|j}d|_W5QRX|dk r.|dS)N)r rreleaser rrrdisposes z*RefCountDisposable.InnerDisposable.dispose)__name__ __module__ __qualname__rrrrrrInnerDisposablesrN) disposabler cs.||_d|_d|_t|_d|_tdS)zaInitializes a new instance of the RefCountDisposable class with the specified disposable.FrN)underlying_disposableis_primary_disposedr rr countsuperr)r r __class__rrrs zRefCountDisposable.__init__rc CsR|jr dSd}|j$|js4d|_|js4d|_|j}W5QRX|dk rN|dS)zaDisposes the underlying disposable only when all dependent disposable have been disposed.NT)r r rrrr)r rrrrr(szRefCountDisposable.disposec CsV|jr dSd}|j*|jd8_|js:|jr:d|_d}W5QRX|rR|jdS)NFrT)r r rrrr)r Zshould_disposerrrr:s zRefCountDisposable.releasec CsN|j>|jr tW5QRS|jd7_||W5QRSQRXdS)znReturns a dependent disposable that when disposed decreases the refcount on the underlying disposable.rN)r r rrr)r rrrrHs zRefCountDisposable.disposable) rrr__doc__rrrrrpropertyr __classcell__rrrrr s rN) threadingrtypingrZ reactivex.abcrrrrrrrrs