o
    >h                     @  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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   x/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/_threads/_memory.pyr      s    
r   c                   @  s2   e Zd ZdZefdddZdd
dZ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}
    pending?Callable[[], list[Callable[[], object] | Literal[NoMore.Work]]]returnNonec                 C  s   t  | _| | _dS )z+
        Create a L{MemoryWorker}.
        N)r	   _quit_pending)selfr   r   r   r   __init__$   s   zMemoryWorker.__init__workCallable[[], object]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.doc                 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   r   )r   r   r   r   )r   r   )r   r   r   __doc__listr   r   r"   r   r   r   r   r      s    	

	r   r   'tuple[MemoryWorker, Callable[[], bool]]c                    s   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.
    r   boolc                    s6    j sdS  j d } | tu rdS  j d |   dS )NFr   T)r   r!   pop)peekworkerr   r   performH   s   
z#createMemoryWorker.<locals>.performN)r   r&   )r   )r+   r   r)   r   createMemoryWorker?   s   	
r,   N)r   r%   )r#   
__future__r   enumr   r   typingr   r   zope.interfacer   _conveniencer	   	_ithreadsr
   r   r   r!   r   r,   r   r   r   r   <module>   s   #