o
    US`c                     @   s   d dl Z d dlm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mZmZmZ e jdks5er5J d	ZG d
d dZG dd dee
dZG dd dee
dZdS )    N)TYPE_CHECKING   )_core)
SendStreamReceiveStream)ConflictDetectorFinal)_handleraise_winerrorkernel32ffiwin32i   c                   @   s:   e Zd ZdeddfddZedd Zdd	 Zd
d ZdS )_HandleHolderhandlereturnNc                 C   s.   d| _ t|tstd|| _ t| j  d S )Nzhandle must be an int)r   
isinstanceint	TypeErrorr   Zregister_with_iocpselfr    r   >/usr/local/lib/python3.10/dist-packages/trio/_windows_pipes.py__init__   s
   
z_HandleHolder.__init__c                 C   s
   | j dkS Nr   )r   r   r   r   r   closed   s   
z_HandleHolder.closedc                 C   s2   | j rd S | j}d| _tt|st  d S d S r   )r   r   r   ZCloseHandler	   r
   r   r   r   r   close   s   
z_HandleHolder.closec                 C   s   |    d S N)r   r   r   r   r   __del__$   s   z_HandleHolder.__del__)	__name__
__module____qualname__r   r   propertyr   r   r   r   r   r   r   r      s    
r   c                   @   sJ   e Zd ZdZdeddfddZdefdd	Zdd
dZdd Z	dd Z
dS )PipeSendStreamzdRepresents a send stream over a Windows named pipe that has been
    opened in OVERLAPPED mode.
    r   r   Nc                 C      t || _td| _d S Nz)another task is currently using this piper   _handle_holderr   _conflict_detectorr   r   r   r   r   -      

zPipeSendStream.__init__datac                    s   | j J | jjrtd|s t I d H  	 W d    d S zt| jj|I d H }W n ty= } ztj	|d }~ww |t
|ksFJ W d    d S 1 sQw   Y  d S )Nthis pipe is already closed)r)   r(   r   r   ClosedResourceError
checkpointZwrite_overlappedr   BrokenPipeErrorZBrokenResourceErrorlen)r   r+   Zwrittenexr   r   r   send_all3   s    
"zPipeSendStream.send_allc                    sN   | j  | jjrtdt I d H  W d    d S 1 s w   Y  d S )NzThis pipe is already closed)r)   r(   r   r   r-   r.   r   r   r   r   wait_send_all_might_not_blockE   s   
"z,PipeSendStream.wait_send_all_might_not_blockc                 C      | j   d S r   r(   r   r   r   r   r   r   M      zPipeSendStream.closec                       |    t I d H  d S r   r   r   r.   r   r   r   r   acloseP      zPipeSendStream.aclose)r   N)r    r!   r"   __doc__r   r   bytesr2   r3   r   r9   r   r   r   r   r$   (   s    
r$   )	metaclassc                   @   sB   e Zd ZdZdeddfddZddefddZd	d
 Zdd Z	dS )PipeReceiveStreamz3Represents a receive stream over an os.pipe object.r   r   Nc                 C   r%   r&   r'   r   r   r   r   r   X   r*   zPipeReceiveStream.__init__c              	      s   | j c | jjrtd|d u rt}nt|tstd|dk r&t	dt
|}zt| jj|I d H }W n! tyX   | jjrHtdd t I d H  Y W d    dS w ||d = |W  d    S 1 sjw   Y  d S )Nr,   zmax_bytes must be integer >= 1r   zanother task closed this pipe    )r)   r(   r   r   r-   DEFAULT_RECEIVE_SIZEr   r   r   
ValueError	bytearrayZreadinto_overlappedr   r/   r.   )r   Z	max_bytesbuffersizer   r   r   receive_some^   s:   


$zPipeReceiveStream.receive_somec                 C   r4   r   r5   r   r   r   r   r      r6   zPipeReceiveStream.closec                    r7   r   r8   r   r   r   r   r9      r:   zPipeReceiveStream.acloser   )
r    r!   r"   r;   r   r   r<   rE   r   r9   r   r   r   r   r>   U   s    'r>   )systypingr    r   _abcr   r   Z_utilr   r   Z_core._windows_cffir	   r
   r   r   platformr@   r   r$   r>   r   r   r   r   <module>   s    -