B
    ÐH/\»  ã               @   sÜ   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
m
Z
 ddlmZ ed	ƒjeƒ d
< dd„ eƒ d< e
jeƒ d< ddgZG dd„ de
ƒZG dd„ deƒZdd„ Zdd„ Zeƒ  ddlmZ eeƒ dƒ dS )zz
A collection of primitives used by the hub, and suitable for
compilation with Cython because of their frequency of use.

é    )Úabsolute_import)Údivision)Úprint_function)Úref)Úget_objects)Úgreenlet)ÚBlockingSwitchOutErrorr   Ú
getcurrentc               C   s   d S )N© r
   r
   r
   ú:lib/python3.7/site-packages/gevent/_greenlet_primitives.pyÚ<lambda>   s    r   Úgreenlet_initÚ_greenlet_switchÚTrackedRawGreenletÚSwitchOutGreenletWithLoopc               @   s   e Zd Zdd„ ZdS )r   c             C   sX   t  | ||¡ tƒ }t|ƒ| _y|j| _W n( tk
rR   i | _|jrN| j|_Y nX d S )N)r   Ú__init__r	   ÚwrefZspawning_greenletZspawn_tree_localsÚAttributeErrorÚparent)ÚselfZfunctionr   Zcurrentr
   r
   r   r   $   s    
zTrackedRawGreenlet.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r
   r
   r
   r   r   "   s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s$   t tƒ dd ƒ}|d k	r|ƒ  t| ƒS )NÚ
switch_out)Úgetattrr	   r   )r   r   r
   r
   r   Úswitch<   s    z SwitchOutGreenletWithLoop.switchc             C   s   t dƒ‚d S )Nz?Impossible to call blocking function in the event loop callback)r   )r   r
   r
   r   r   B   s    z$SwitchOutGreenletWithLoop.switch_outN)r   r   r   r   r   r
   r
   r
   r   r   5   s   c               C   s   dd„ t ƒ D ƒS )Nc             S   s&   g | ]}t |tƒrt|d dƒs|‘qS )Zgreenlet_tree_is_ignoredF)Ú
isinstancer   r   )Ú.0Úxr
   r
   r   ú
<listcomp>P   s    z+get_reachable_greenlets.<locals>.<listcomp>)r   r
   r
   r
   r   Úget_reachable_greenletsF   s    
r    c               C   s
   t ƒ  d S )N)r   r
   r
   r
   r   Ú_initT   s    r!   )Úimport_c_accelzgevent.__greenlet_primitivesN)Ú__doc__Z
__future__r   r   r   Úweakrefr   r   Úgcr   r   Zgevent.exceptionsr   Ú
__import__r	   Úlocalsr   Ú__all__r   r   r    r!   Zgevent._utilr"   Úglobalsr
   r
   r
   r   Ú<module>   s&   