ó
¨œž[c           @` s   d  Z  d d l m Z m Z m Z d d l Z d d l m Z m Z e	 e d ƒ s_ t
 d ƒ ‚ d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d S(   s7   KQueue-based IOLoop implementation for BSD/Mac systems.i    (   t   absolute_importt   divisiont   print_functionN(   t   IOLoopt
   PollIOLoopt   kqueues   kqueue not supportedt   _KQueuec           B` sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s.   A kqueue-based event loop for BSD/Mac systems.c         C` s   t  j ƒ  |  _ i  |  _ d  S(   N(   t   selectR   t   _kqueuet   _active(   t   self(    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyt   __init__   s    c         C` s   |  j  j ƒ  S(   N(   R   t   fileno(   R
   (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyR      s    c         C` s   |  j  j ƒ  d  S(   N(   R   t   close(   R
   (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyR   "   s    c         C` sI   | |  j  k r" t d | ƒ ‚ n  |  j | | t j ƒ | |  j  | <d  S(   Ns   fd %s already registered(   R	   t   IOErrort   _controlR   t	   KQ_EV_ADD(   R
   t   fdt   events(    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyt   register%   s    c         C` s!   |  j  | ƒ |  j | | ƒ d  S(   N(   t
   unregisterR   (   R
   R   R   (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyt   modify+   s    c         C` s,   |  j  j | ƒ } |  j | | t j ƒ d  S(   N(   R	   t   popR   R   t   KQ_EV_DELETE(   R
   R   R   (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyR   /   s    c         C` s›   g  } | t  j @r; | j t j | d t j d | ƒƒ n  | t  j @rp | j t j | d t j d | ƒƒ n  x$ | D] } |  j j	 | g d ƒ qw Wd  S(   Nt   filtert   flagsi    (
   R   t   WRITEt   appendR   t   keventt   KQ_FILTER_WRITEt   READt   KQ_FILTER_READR   t   control(   R
   R   R   R   t   keventsR   (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyR   3   s    c         C` sö   |  j  j d  d | ƒ } i  } xË | D]Ã } | j } | j t j k rf | j | d ƒ t j	 B| | <n  | j t j
 k r¸ | j t j @r˜ t j | | <q¸ | j | d ƒ t j B| | <n  | j t j @r% | j | d ƒ t j B| | <q% q% W| j ƒ  S(   Niè  i    (   R   R    t   Nonet   identR   R   R   t   getR   R   R   R   t	   KQ_EV_EOFt   ERRORR   t   KQ_EV_ERRORt   items(   R
   t   timeoutR!   R   R   R   (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyt   poll@   s    	  $(   t   __name__t
   __module__t   __doc__R   R   R   R   R   R   R   R*   (    (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyR      s   							t   KQueueIOLoopc           B` s   e  Z d  „  Z RS(   c         K` s#   t  t |  ƒ j d t ƒ  |  d  S(   Nt   impl(   t   superR.   t
   initializeR   (   R
   t   kwargs(    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyR1   Y   s    (   R+   R,   R1   (    (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyR.   X   s   (   R-   t
   __future__R    R   R   R   t   tornado.ioloopR   R   t   hasattrt   AssertionErrort   objectR   R.   (    (    (    s6   lib/python2.7/site-packages/tornado/platform/kqueue.pyt   <module>   s   ?