def update(self, flags):
        if not self.ev:
            self.ev = LibeventEvent(flags, self.fd, self._ready_pre)

        if self._last_events != self.ev.events:
            self.ev.cancel()
            # DANGER: this relies on the implementation details of the
            # cython-level class.
            LibeventEvent.__init__(self.ev, flags, self.fd, self._ready_pre)

        self.ev.add()
    def update(self, flags):
        if not self.ev:
            self.ev = LibeventEvent(flags, self.fd, self._ready_pre)

        if self._last_events != self.ev.events:
            self.ev.cancel()
            # DANGER: this relies on the implementation details of the
            # cython-level class.
            LibeventEvent.__init__(self.ev, flags, self.fd, self._ready_pre)

        self.ev.add()
class GeventIOEvent(IOEvent):
    def __init__(self):
        super(GeventIOEvent, self).__init__()
        self.ev = None
        self._last_events = -1

    def _ready_pre(self, unused, flags):
        self.update(self.flags)
        lcbflags = REVERSERMAP[flags]
        self.ready(lcbflags)

    def update(self, flags):
        if not self.ev:
            self.ev = LibeventEvent(flags, self.fd, self._ready_pre)

        if self._last_events != self.ev.events:
            self.ev.cancel()
            # DANGER: this relies on the implementation details of the
            # cython-level class.
            LibeventEvent.__init__(self.ev, flags, self.fd, self._ready_pre)

        self.ev.add()

    def cancel(self):
        if not self.ev:
            return
        self.ev.cancel()
class GeventIOEvent(IOEvent):
    def __init__(self):
        super(GeventIOEvent, self).__init__()
        self.ev = None
        self._last_events = -1

    def _ready_pre(self, unused, flags):
        self.update(self.flags)
        lcbflags = REVERSERMAP[flags]
        self.ready(lcbflags)

    def update(self, flags):
        if not self.ev:
            self.ev = LibeventEvent(flags, self.fd, self._ready_pre)

        if self._last_events != self.ev.events:
            self.ev.cancel()
            # DANGER: this relies on the implementation details of the
            # cython-level class.
            LibeventEvent.__init__(self.ev, flags, self.fd, self._ready_pre)

        self.ev.add()

    def cancel(self):
        if not self.ev:
            return
        self.ev.cancel()