U
    -Wj�  ã                   @  s’   d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZ G d	d
„ d
eƒZejZe
eƒG dd„ dƒƒZddœdd„ZdS )z>
Implementation of an in-memory worker that defers execution.
é    )Úannotations)ÚEnumÚauto)ÚCallableÚLiteral)Úimplementeré   )ÚQuit)ÚIExclusiveWorkerc                   @  s   e Zd Zeƒ ZdS )ÚNoMoreN)Ú__name__Ú
__module__Ú__qualname__r   ÚWork© r   r   úcc:\users\psant\downloads\hotstarbackend\school\venv38\Lib\site-packages\twisted/_threads/_memory.pyr      s   r   c                   @  sB   e Zd ZdZefdddœdd„Zdddœd	d
„Zddœdd„ZdS )ÚMemoryWorkerz|
    An L{IWorker} that queues work for later performance.

    @ivar _quit: a flag indicating
    @type _quit: L{Quit}
    z?Callable[[], list[Callable[[], object] | Literal[NoMore.Work]]]ÚNone)ÚpendingÚreturnc                 C  s   t ƒ | _|ƒ | _dS )z+
        Create a L{MemoryWorker}.
        N)r	   Ú_quitÚ_pending)Úselfr   r   r   r   Ú__init__$   s    zMemoryWorker.__init__zCallable[[], object])Úworkr   c                 C  s   | j  ¡  | j |¡ dS )z}
        Queue some work for to perform later; see L{createMemoryWorker}.

        @param work: The work to perform.
        N)r   Úcheckr   Úappend)r   r   r   r   r   Údo.   s    
zMemoryWorker.do©r   c                 C  s   | j  ¡  | j t¡ dS )z#
        Quit this worker.
        N)r   Úsetr   r   Ú
NoMoreWork)r   r   r   r   Úquit7   s    
zMemoryWorker.quitN)r   r   r   Ú__doc__Úlistr   r   r!   r   r   r   r   r      s
   	þ
	r   z'tuple[MemoryWorker, Callable[[], bool]]r   c                    s    ddœ‡ fdd„} t ƒ ‰ ˆ | fS )zÞ
    Create an L{IWorker} that does nothing but defer work, to be performed
    later.

    @return: a worker that will enqueue work to perform later, and a callable
        that will perform one element of that work.
    Úboolr   c                    s6   ˆ j s
dS ˆ j d } | tkr dS ˆ j  d¡ | ƒ  dS )NFr   T)r   r    Úpop)Úpeek©Zworkerr   r   ÚperformH   s    
z#createMemoryWorker.<locals>.perform)r   )r(   r   r'   r   ÚcreateMemoryWorker?   s    	
r)   N)r"   Ú
__future__r   Úenumr   r   Útypingr   r   Zzope.interfacer   Z_conveniencer	   Z	_ithreadsr
   r   r   r    r   r)   r   r   r   r   Ú<module>   s   #