aboutsummaryrefslogtreecommitdiffstats
path: root/python/gevent/__waiter.pxd
blob: 0763bae402204b507f9dd5622d7d343b21ceaaff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
cimport cython

from gevent.__greenlet_primitives cimport SwitchOutGreenletWithLoop
from gevent.__hub_local cimport get_hub_noargs as get_hub

cdef sys
cdef ConcurrentObjectUseError


cdef bint _greenlet_imported
cdef _NONE

cdef extern from "greenlet/greenlet.h":

    ctypedef class greenlet.greenlet [object PyGreenlet]:
        pass

    # These are actually macros and so much be included
    # (defined) in each .pxd, as are the two functions
    # that call them.
    greenlet PyGreenlet_GetCurrent()
    void PyGreenlet_Import()

cdef inline greenlet getcurrent():
    return PyGreenlet_GetCurrent()

cdef inline void greenlet_init():
    global _greenlet_imported
    if not _greenlet_imported:
        PyGreenlet_Import()
        _greenlet_imported = True

cdef class Waiter:
    cdef readonly SwitchOutGreenletWithLoop hub
    cdef readonly greenlet greenlet
    cdef readonly value
    cdef _exception

    cpdef get(self)
    cpdef clear(self)

    # cpdef of switch leads to parameter errors...
    #cpdef switch(self, value)

@cython.final
@cython.internal
cdef class MultipleWaiter(Waiter):
    cdef list _values