o
    ¯b9  ã                   @   sP   d Z ddlmZ ddlmZ ddlmZ eƒ ZeeƒG dd„ dƒƒZ	dd	„ Z
d
S )z>
Implementation of an in-memory worker that defers execution.
é    )Úimplementeré   )ÚIWorker)ÚQuitc                   @   s,   e Zd ZdZefdd„Zdd„ Zdd„ ZdS )	ÚMemoryWorkerz|
    An L{IWorker} that queues work for later performance.

    @ivar _quit: a flag indicating
    @type _quit: L{Quit}
    c                 C   s   t ƒ | _|ƒ | _dS )z+
        Create a L{MemoryWorker}.
        N)r   Ú_quitÚ_pending)ÚselfÚpending© r   ú:/usr/lib/python3/dist-packages/twisted/_threads/_memory.pyÚ__init__   s   zMemoryWorker.__init__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	   Úworkr   r   r   Údo"   s   
zMemoryWorker.doc                 C   s   | j  ¡  | j t¡ dS )z#
        Quit this worker.
        N)r   Úsetr   r   Ú
NoMoreWork)r	   r   r   r   Úquit+   s   
zMemoryWorker.quitN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úlistr   r   r   r   r   r   r   r      s
    	r   c                     s   ‡ fdd„} t ƒ ‰ ˆ | fS )a  
    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.
    @rtype: 2-L{tuple} of (L{IWorker}, L{callable})
    c                      s.   ˆ j sdS ˆ j d tu rdS ˆ j  d¡ƒ  dS )NFr   T)r   r   Úpopr   ©Úworkerr   r   Úperform=   s   z#createMemoryWorker.<locals>.perform)r   )r   r   r   r   ÚcreateMemoryWorker3   s   
r   N)r   Úzope.interfacer   Ú r   Ú_conveniencer   Úobjectr   r   r   r   r   r   r   Ú<module>   s    