aboutsummaryrefslogtreecommitdiffstats
path: root/python/gevent/__waiter.pxd
diff options
context:
space:
mode:
Diffstat (limited to 'python/gevent/__waiter.pxd')
-rw-r--r--python/gevent/__waiter.pxd48
1 files changed, 48 insertions, 0 deletions
diff --git a/python/gevent/__waiter.pxd b/python/gevent/__waiter.pxd
new file mode 100644
index 0000000..0763bae
--- /dev/null
+++ b/python/gevent/__waiter.pxd
@@ -0,0 +1,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