[Session restore] Rename group name Enabled to Restore.
[chromium-blink-merge.git] / third_party / bintrees / bintrees / qrbtree.c
blobf5aa162fd482c550365592fd03d43b45ee542378
1 /* Generated by Cython 0.17.4 on Sun Feb 24 19:48:34 2013 */
3 #define PY_SSIZE_T_CLEAN
4 #include "Python.h"
5 #ifndef Py_PYTHON_H
6 #error Python headers needed to compile C extensions, please install development version of Python.
7 #elif PY_VERSION_HEX < 0x02040000
8 #error Cython requires Python 2.4+.
9 #else
10 #include <stddef.h> /* For offsetof */
11 #ifndef offsetof
12 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
13 #endif
14 #if !defined(WIN32) && !defined(MS_WINDOWS)
15 #ifndef __stdcall
16 #define __stdcall
17 #endif
18 #ifndef __cdecl
19 #define __cdecl
20 #endif
21 #ifndef __fastcall
22 #define __fastcall
23 #endif
24 #endif
25 #ifndef DL_IMPORT
26 #define DL_IMPORT(t) t
27 #endif
28 #ifndef DL_EXPORT
29 #define DL_EXPORT(t) t
30 #endif
31 #ifndef PY_LONG_LONG
32 #define PY_LONG_LONG LONG_LONG
33 #endif
34 #ifndef Py_HUGE_VAL
35 #define Py_HUGE_VAL HUGE_VAL
36 #endif
37 #ifdef PYPY_VERSION
38 #define CYTHON_COMPILING_IN_PYPY 1
39 #define CYTHON_COMPILING_IN_CPYTHON 0
40 #else
41 #define CYTHON_COMPILING_IN_PYPY 0
42 #define CYTHON_COMPILING_IN_CPYTHON 1
43 #endif
44 #if PY_VERSION_HEX < 0x02050000
45 typedef int Py_ssize_t;
46 #define PY_SSIZE_T_MAX INT_MAX
47 #define PY_SSIZE_T_MIN INT_MIN
48 #define PY_FORMAT_SIZE_T ""
49 #define CYTHON_FORMAT_SSIZE_T ""
50 #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
51 #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o)
52 #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
53 (PyErr_Format(PyExc_TypeError, \
54 "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
55 (PyObject*)0))
56 #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
57 !PyComplex_Check(o))
58 #define PyIndex_Check __Pyx_PyIndex_Check
59 #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
60 #define __PYX_BUILD_PY_SSIZE_T "i"
61 #else
62 #define __PYX_BUILD_PY_SSIZE_T "n"
63 #define CYTHON_FORMAT_SSIZE_T "z"
64 #define __Pyx_PyIndex_Check PyIndex_Check
65 #endif
66 #if PY_VERSION_HEX < 0x02060000
67 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
68 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
69 #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
70 #define PyVarObject_HEAD_INIT(type, size) \
71 PyObject_HEAD_INIT(type) size,
72 #define PyType_Modified(t)
73 typedef struct {
74 void *buf;
75 PyObject *obj;
76 Py_ssize_t len;
77 Py_ssize_t itemsize;
78 int readonly;
79 int ndim;
80 char *format;
81 Py_ssize_t *shape;
82 Py_ssize_t *strides;
83 Py_ssize_t *suboffsets;
84 void *internal;
85 } Py_buffer;
86 #define PyBUF_SIMPLE 0
87 #define PyBUF_WRITABLE 0x0001
88 #define PyBUF_FORMAT 0x0004
89 #define PyBUF_ND 0x0008
90 #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
91 #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
92 #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
93 #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
94 #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
95 #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
96 #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
97 typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
98 typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
99 #endif
100 #if PY_MAJOR_VERSION < 3
101 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
102 #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
103 PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
104 #else
105 #define __Pyx_BUILTIN_MODULE_NAME "builtins"
106 #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
107 PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
108 #endif
109 #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
110 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
111 #endif
112 #if PY_MAJOR_VERSION >= 3
113 #define Py_TPFLAGS_CHECKTYPES 0
114 #define Py_TPFLAGS_HAVE_INDEX 0
115 #endif
116 #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
117 #define Py_TPFLAGS_HAVE_NEWBUFFER 0
118 #endif
119 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
120 #define CYTHON_PEP393_ENABLED 1
121 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \
122 0 : _PyUnicode_Ready((PyObject *)(op)))
123 #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u)
124 #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
125 #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
126 #else
127 #define CYTHON_PEP393_ENABLED 0
128 #define __Pyx_PyUnicode_READY(op) (0)
129 #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
130 #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
131 #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
132 #endif
133 #if PY_MAJOR_VERSION >= 3
134 #define PyBaseString_Type PyUnicode_Type
135 #define PyStringObject PyUnicodeObject
136 #define PyString_Type PyUnicode_Type
137 #define PyString_Check PyUnicode_Check
138 #define PyString_CheckExact PyUnicode_CheckExact
139 #endif
140 #if PY_VERSION_HEX < 0x02060000
141 #define PyBytesObject PyStringObject
142 #define PyBytes_Type PyString_Type
143 #define PyBytes_Check PyString_Check
144 #define PyBytes_CheckExact PyString_CheckExact
145 #define PyBytes_FromString PyString_FromString
146 #define PyBytes_FromStringAndSize PyString_FromStringAndSize
147 #define PyBytes_FromFormat PyString_FromFormat
148 #define PyBytes_DecodeEscape PyString_DecodeEscape
149 #define PyBytes_AsString PyString_AsString
150 #define PyBytes_AsStringAndSize PyString_AsStringAndSize
151 #define PyBytes_Size PyString_Size
152 #define PyBytes_AS_STRING PyString_AS_STRING
153 #define PyBytes_GET_SIZE PyString_GET_SIZE
154 #define PyBytes_Repr PyString_Repr
155 #define PyBytes_Concat PyString_Concat
156 #define PyBytes_ConcatAndDel PyString_ConcatAndDel
157 #endif
158 #if PY_VERSION_HEX < 0x02060000
159 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type)
160 #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type)
161 #endif
162 #ifndef PySet_CheckExact
163 #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type)
164 #endif
165 #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
166 #if PY_MAJOR_VERSION >= 3
167 #define PyIntObject PyLongObject
168 #define PyInt_Type PyLong_Type
169 #define PyInt_Check(op) PyLong_Check(op)
170 #define PyInt_CheckExact(op) PyLong_CheckExact(op)
171 #define PyInt_FromString PyLong_FromString
172 #define PyInt_FromUnicode PyLong_FromUnicode
173 #define PyInt_FromLong PyLong_FromLong
174 #define PyInt_FromSize_t PyLong_FromSize_t
175 #define PyInt_FromSsize_t PyLong_FromSsize_t
176 #define PyInt_AsLong PyLong_AsLong
177 #define PyInt_AS_LONG PyLong_AS_LONG
178 #define PyInt_AsSsize_t PyLong_AsSsize_t
179 #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
180 #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
181 #endif
182 #if PY_MAJOR_VERSION >= 3
183 #define PyBoolObject PyLongObject
184 #endif
185 #if PY_VERSION_HEX < 0x03020000
186 typedef long Py_hash_t;
187 #define __Pyx_PyInt_FromHash_t PyInt_FromLong
188 #define __Pyx_PyInt_AsHash_t PyInt_AsLong
189 #else
190 #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
191 #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
192 #endif
193 #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
194 #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
195 #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
196 #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
197 #else
198 #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
199 (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
200 (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
201 (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
202 #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
203 (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
204 (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
205 (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
206 #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
207 (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
208 (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
209 (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
210 #endif
211 #if PY_MAJOR_VERSION >= 3
212 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
213 #endif
214 #if PY_VERSION_HEX < 0x02050000
215 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n)))
216 #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
217 #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n)))
218 #else
219 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n))
220 #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
221 #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n))
222 #endif
223 #if PY_VERSION_HEX < 0x02050000
224 #define __Pyx_NAMESTR(n) ((char *)(n))
225 #define __Pyx_DOCSTR(n) ((char *)(n))
226 #else
227 #define __Pyx_NAMESTR(n) (n)
228 #define __Pyx_DOCSTR(n) (n)
229 #endif
232 #if PY_MAJOR_VERSION >= 3
233 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
234 #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y)
235 #else
236 #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y)
237 #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y)
238 #endif
240 #ifndef __PYX_EXTERN_C
241 #ifdef __cplusplus
242 #define __PYX_EXTERN_C extern "C"
243 #else
244 #define __PYX_EXTERN_C extern
245 #endif
246 #endif
248 #if defined(WIN32) || defined(MS_WINDOWS)
249 #define _USE_MATH_DEFINES
250 #endif
251 #include <math.h>
252 #define __PYX_HAVE__bintrees__qrbtree
253 #define __PYX_HAVE_API__bintrees__qrbtree
254 #include "ctrees.h"
255 #include "stack.h"
256 #ifdef _OPENMP
257 #include <omp.h>
258 #endif /* _OPENMP */
260 #ifdef PYREX_WITHOUT_ASSERTIONS
261 #define CYTHON_WITHOUT_ASSERTIONS
262 #endif
265 /* inline attribute */
266 #ifndef CYTHON_INLINE
267 #if defined(__GNUC__)
268 #define CYTHON_INLINE __inline__
269 #elif defined(_MSC_VER)
270 #define CYTHON_INLINE __inline
271 #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
272 #define CYTHON_INLINE inline
273 #else
274 #define CYTHON_INLINE
275 #endif
276 #endif
278 /* unused attribute */
279 #ifndef CYTHON_UNUSED
280 # if defined(__GNUC__)
281 # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
282 # define CYTHON_UNUSED __attribute__ ((__unused__))
283 # else
284 # define CYTHON_UNUSED
285 # endif
286 # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
287 # define CYTHON_UNUSED __attribute__ ((__unused__))
288 # else
289 # define CYTHON_UNUSED
290 # endif
291 #endif
293 typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
296 /* Type Conversion Predeclarations */
298 #define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
299 #define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s))
301 #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
302 #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
303 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
304 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
306 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
307 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
308 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
310 #if CYTHON_COMPILING_IN_CPYTHON
311 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
312 #else
313 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
314 #endif
315 #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
317 #ifdef __GNUC__
318 /* Test for GCC > 2.95 */
319 #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
320 #define likely(x) __builtin_expect(!!(x), 1)
321 #define unlikely(x) __builtin_expect(!!(x), 0)
322 #else /* __GNUC__ > 2 ... */
323 #define likely(x) (x)
324 #define unlikely(x) (x)
325 #endif /* __GNUC__ > 2 ... */
326 #else /* __GNUC__ */
327 #define likely(x) (x)
328 #define unlikely(x) (x)
329 #endif /* __GNUC__ */
331 static PyObject *__pyx_m;
332 static PyObject *__pyx_b;
333 static PyObject *__pyx_empty_tuple;
334 static PyObject *__pyx_empty_bytes;
335 static int __pyx_lineno;
336 static int __pyx_clineno = 0;
337 static const char * __pyx_cfilenm= __FILE__;
338 static const char *__pyx_filename;
341 static const char *__pyx_f[] = {
342 "qrbtree.pyx",
343 "cwalker.pxd",
346 /*--- Type declarations ---*/
347 struct __pyx_obj_8bintrees_7cwalker_cWalker;
348 struct __pyx_obj_8bintrees_7qrbtree_cRBTree;
350 /* "cwalker.pxd":11
351 * from stack cimport node_stack_t
353 * cdef class cWalker: # <<<<<<<<<<<<<<
354 * cdef node_t *node
355 * cdef node_t *root
357 struct __pyx_obj_8bintrees_7cwalker_cWalker {
358 PyObject_HEAD
359 struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *__pyx_vtab;
360 node_t *node;
361 node_t *root;
362 node_stack_t *stack;
366 /* "bintrees\qrbtree.pyx":16
367 * from ctrees cimport *
369 * cdef class cRBTree: # <<<<<<<<<<<<<<
370 * cdef node_t *_root
371 * cdef int _count
373 struct __pyx_obj_8bintrees_7qrbtree_cRBTree {
374 PyObject_HEAD
375 node_t *_root;
376 int _count;
381 /* "cwalker.pxd":11
382 * from stack cimport node_stack_t
384 * cdef class cWalker: # <<<<<<<<<<<<<<
385 * cdef node_t *node
386 * cdef node_t *root
389 struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker {
390 void (*set_tree)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, node_t *);
391 PyObject *(*reset)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch);
392 PyObject *(*push)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch);
393 PyObject *(*pop)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch);
395 static struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *__pyx_vtabptr_8bintrees_7cwalker_cWalker;
396 #ifndef CYTHON_REFNANNY
397 #define CYTHON_REFNANNY 0
398 #endif
399 #if CYTHON_REFNANNY
400 typedef struct {
401 void (*INCREF)(void*, PyObject*, int);
402 void (*DECREF)(void*, PyObject*, int);
403 void (*GOTREF)(void*, PyObject*, int);
404 void (*GIVEREF)(void*, PyObject*, int);
405 void* (*SetupContext)(const char*, int, const char*);
406 void (*FinishContext)(void**);
407 } __Pyx_RefNannyAPIStruct;
408 static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
409 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
410 #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
411 #ifdef WITH_THREAD
412 #define __Pyx_RefNannySetupContext(name, acquire_gil) \
413 if (acquire_gil) { \
414 PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
415 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
416 PyGILState_Release(__pyx_gilstate_save); \
417 } else { \
418 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
420 #else
421 #define __Pyx_RefNannySetupContext(name, acquire_gil) \
422 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
423 #endif
424 #define __Pyx_RefNannyFinishContext() \
425 __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
426 #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
427 #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
428 #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
429 #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
430 #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
431 #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
432 #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
433 #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
434 #else
435 #define __Pyx_RefNannyDeclarations
436 #define __Pyx_RefNannySetupContext(name, acquire_gil)
437 #define __Pyx_RefNannyFinishContext()
438 #define __Pyx_INCREF(r) Py_INCREF(r)
439 #define __Pyx_DECREF(r) Py_DECREF(r)
440 #define __Pyx_GOTREF(r)
441 #define __Pyx_GIVEREF(r)
442 #define __Pyx_XINCREF(r) Py_XINCREF(r)
443 #define __Pyx_XDECREF(r) Py_XDECREF(r)
444 #define __Pyx_XGOTREF(r)
445 #define __Pyx_XGIVEREF(r)
446 #endif /* CYTHON_REFNANNY */
447 #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
448 #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
450 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
452 static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
454 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
455 PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
456 const char* function_name); /*proto*/
458 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
459 Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
461 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
462 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
464 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
466 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
467 PyObject *r;
468 if (!j) return NULL;
469 r = PyObject_GetItem(o, j);
470 Py_DECREF(j);
471 return r;
473 #define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
474 __Pyx_GetItemInt_List_Fast(o, i) : \
475 __Pyx_GetItemInt_Generic(o, to_py_func(i)))
476 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) {
477 #if CYTHON_COMPILING_IN_CPYTHON
478 if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
479 PyObject *r = PyList_GET_ITEM(o, i);
480 Py_INCREF(r);
481 return r;
483 else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
484 PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
485 Py_INCREF(r);
486 return r;
488 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
489 #else
490 return PySequence_GetItem(o, i);
491 #endif
493 #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
494 __Pyx_GetItemInt_Tuple_Fast(o, i) : \
495 __Pyx_GetItemInt_Generic(o, to_py_func(i)))
496 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) {
497 #if CYTHON_COMPILING_IN_CPYTHON
498 if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
499 PyObject *r = PyTuple_GET_ITEM(o, i);
500 Py_INCREF(r);
501 return r;
503 else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
504 PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
505 Py_INCREF(r);
506 return r;
508 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
509 #else
510 return PySequence_GetItem(o, i);
511 #endif
513 #define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
514 __Pyx_GetItemInt_Fast(o, i) : \
515 __Pyx_GetItemInt_Generic(o, to_py_func(i)))
516 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) {
517 #if CYTHON_COMPILING_IN_CPYTHON
518 if (PyList_CheckExact(o)) {
519 Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
520 if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
521 PyObject *r = PyList_GET_ITEM(o, n);
522 Py_INCREF(r);
523 return r;
526 else if (PyTuple_CheckExact(o)) {
527 Py_ssize_t n = (likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
528 if (likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
529 PyObject *r = PyTuple_GET_ITEM(o, n);
530 Py_INCREF(r);
531 return r;
533 } else { /* inlined PySequence_GetItem() */
534 PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
535 if (likely(m && m->sq_item)) {
536 if (unlikely(i < 0) && likely(m->sq_length)) {
537 Py_ssize_t l = m->sq_length(o);
538 if (unlikely(l < 0)) return NULL;
539 i += l;
541 return m->sq_item(o, i);
544 #else
545 if (PySequence_Check(o)) {
546 return PySequence_GetItem(o, i);
548 #endif
549 return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
552 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/
554 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
556 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
558 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
560 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
562 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
564 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
566 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
568 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
570 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
572 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
574 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
576 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
578 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
580 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
582 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
584 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
586 static int __Pyx_check_binary_version(void);
588 #if !defined(__Pyx_PyIdentifier_FromString)
589 #if PY_MAJOR_VERSION < 3
590 #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
591 #else
592 #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
593 #endif
594 #endif
596 static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
598 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/
600 static void* __Pyx_GetVtable(PyObject *dict); /*proto*/
602 typedef struct {
603 int code_line;
604 PyCodeObject* code_object;
605 } __Pyx_CodeObjectCacheEntry;
606 struct __Pyx_CodeObjectCache {
607 int count;
608 int max_count;
609 __Pyx_CodeObjectCacheEntry* entries;
611 static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
612 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
613 static PyCodeObject *__pyx_find_code_object(int code_line);
614 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
616 static void __Pyx_AddTraceback(const char *funcname, int c_line,
617 int py_line, const char *filename); /*proto*/
619 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
622 /* Module declarations from 'bintrees.ctrees' */
624 /* Module declarations from 'bintrees.stack' */
626 /* Module declarations from 'bintrees.cwalker' */
627 static PyTypeObject *__pyx_ptype_8bintrees_7cwalker_cWalker = 0;
629 /* Module declarations from 'bintrees.qrbtree' */
630 static PyTypeObject *__pyx_ptype_8bintrees_7qrbtree_cRBTree = 0;
631 #define __Pyx_MODULE_NAME "bintrees.qrbtree"
632 int __pyx_module_is_main_bintrees__qrbtree = 0;
634 /* Implementation of 'bintrees.qrbtree' */
635 static PyObject *__pyx_builtin_property;
636 static PyObject *__pyx_builtin_KeyError;
637 static PyObject *__pyx_builtin_MemoryError;
638 static PyObject *__pyx_builtin_ValueError;
639 static int __pyx_pf_8bintrees_7qrbtree_7cRBTree___cinit__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_items); /* proto */
640 static void __pyx_pf_8bintrees_7qrbtree_7cRBTree_2__dealloc__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self); /* proto */
641 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_4count(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self); /* proto */
642 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_6__getstate__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self); /* proto */
643 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_8__setstate__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_state); /* proto */
644 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_10clear(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self); /* proto */
645 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_12get_value(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
646 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_14get_walker(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self); /* proto */
647 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_16insert(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */
648 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_18remove(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
649 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_20max_item(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self); /* proto */
650 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_22min_item(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self); /* proto */
651 static char __pyx_k_1[] = "Can not allocate memory for node structure.";
652 static char __pyx_k_3[] = "Tree is empty";
653 static char __pyx_k__key[] = "key";
654 static char __pyx_k__count[] = "count";
655 static char __pyx_k__items[] = "items";
656 static char __pyx_k__value[] = "value";
657 static char __pyx_k__update[] = "update";
658 static char __pyx_k____all__[] = "__all__";
659 static char __pyx_k__cRBTree[] = "cRBTree";
660 static char __pyx_k__cWalker[] = "cWalker";
661 static char __pyx_k__cwalker[] = "cwalker";
662 static char __pyx_k__KeyError[] = "KeyError";
663 static char __pyx_k____main__[] = "__main__";
664 static char __pyx_k____test__[] = "__test__";
665 static char __pyx_k__property[] = "property";
666 static char __pyx_k__ValueError[] = "ValueError";
667 static char __pyx_k__MemoryError[] = "MemoryError";
668 static PyObject *__pyx_kp_s_1;
669 static PyObject *__pyx_kp_s_3;
670 static PyObject *__pyx_n_s__KeyError;
671 static PyObject *__pyx_n_s__MemoryError;
672 static PyObject *__pyx_n_s__ValueError;
673 static PyObject *__pyx_n_s____all__;
674 static PyObject *__pyx_n_s____main__;
675 static PyObject *__pyx_n_s____test__;
676 static PyObject *__pyx_n_s__cRBTree;
677 static PyObject *__pyx_n_s__cWalker;
678 static PyObject *__pyx_n_s__count;
679 static PyObject *__pyx_n_s__cwalker;
680 static PyObject *__pyx_n_s__items;
681 static PyObject *__pyx_n_s__key;
682 static PyObject *__pyx_n_s__property;
683 static PyObject *__pyx_n_s__update;
684 static PyObject *__pyx_n_s__value;
685 static PyObject *__pyx_int_0;
686 static PyObject *__pyx_k_tuple_2;
687 static PyObject *__pyx_k_tuple_4;
688 static PyObject *__pyx_k_tuple_5;
690 /* Python wrapper */
691 static int __pyx_pw_8bintrees_7qrbtree_7cRBTree_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
692 static int __pyx_pw_8bintrees_7qrbtree_7cRBTree_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
693 PyObject *__pyx_v_items = 0;
694 int __pyx_r;
695 __Pyx_RefNannyDeclarations
696 __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
698 static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__items,0};
699 PyObject* values[1] = {0};
701 /* "bintrees\qrbtree.pyx":20
702 * cdef int _count
704 * def __cinit__(self, items=None): # <<<<<<<<<<<<<<
705 * self._root = NULL
706 * self._count = 0
708 values[0] = ((PyObject *)Py_None);
709 if (unlikely(__pyx_kwds)) {
710 Py_ssize_t kw_args;
711 const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
712 switch (pos_args) {
713 case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
714 case 0: break;
715 default: goto __pyx_L5_argtuple_error;
717 kw_args = PyDict_Size(__pyx_kwds);
718 switch (pos_args) {
719 case 0:
720 if (kw_args > 0) {
721 PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__items);
722 if (value) { values[0] = value; kw_args--; }
725 if (unlikely(kw_args > 0)) {
726 if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
728 } else {
729 switch (PyTuple_GET_SIZE(__pyx_args)) {
730 case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
731 case 0: break;
732 default: goto __pyx_L5_argtuple_error;
735 __pyx_v_items = values[0];
737 goto __pyx_L4_argument_unpacking_done;
738 __pyx_L5_argtuple_error:;
739 __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
740 __pyx_L3_error:;
741 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
742 __Pyx_RefNannyFinishContext();
743 return -1;
744 __pyx_L4_argument_unpacking_done:;
745 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree___cinit__(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self), __pyx_v_items);
746 __Pyx_RefNannyFinishContext();
747 return __pyx_r;
750 static int __pyx_pf_8bintrees_7qrbtree_7cRBTree___cinit__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_items) {
751 int __pyx_r;
752 __Pyx_RefNannyDeclarations
753 int __pyx_t_1;
754 PyObject *__pyx_t_2 = NULL;
755 PyObject *__pyx_t_3 = NULL;
756 PyObject *__pyx_t_4 = NULL;
757 int __pyx_lineno = 0;
758 const char *__pyx_filename = NULL;
759 int __pyx_clineno = 0;
760 __Pyx_RefNannySetupContext("__cinit__", 0);
762 /* "bintrees\qrbtree.pyx":21
764 * def __cinit__(self, items=None):
765 * self._root = NULL # <<<<<<<<<<<<<<
766 * self._count = 0
767 * if items:
769 __pyx_v_self->_root = NULL;
771 /* "bintrees\qrbtree.pyx":22
772 * def __cinit__(self, items=None):
773 * self._root = NULL
774 * self._count = 0 # <<<<<<<<<<<<<<
775 * if items:
776 * self.update(items)
778 __pyx_v_self->_count = 0;
780 /* "bintrees\qrbtree.pyx":23
781 * self._root = NULL
782 * self._count = 0
783 * if items: # <<<<<<<<<<<<<<
784 * self.update(items)
787 __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_items); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
788 if (__pyx_t_1) {
790 /* "bintrees\qrbtree.pyx":24
791 * self._count = 0
792 * if items:
793 * self.update(items) # <<<<<<<<<<<<<<
795 * def __dealloc__(self):
797 __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__update); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
798 __Pyx_GOTREF(__pyx_t_2);
799 __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
800 __Pyx_GOTREF(__pyx_t_3);
801 __Pyx_INCREF(__pyx_v_items);
802 PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_items);
803 __Pyx_GIVEREF(__pyx_v_items);
804 __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
805 __Pyx_GOTREF(__pyx_t_4);
806 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
807 __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
808 __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
809 goto __pyx_L3;
811 __pyx_L3:;
813 __pyx_r = 0;
814 goto __pyx_L0;
815 __pyx_L1_error:;
816 __Pyx_XDECREF(__pyx_t_2);
817 __Pyx_XDECREF(__pyx_t_3);
818 __Pyx_XDECREF(__pyx_t_4);
819 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
820 __pyx_r = -1;
821 __pyx_L0:;
822 __Pyx_RefNannyFinishContext();
823 return __pyx_r;
826 /* Python wrapper */
827 static void __pyx_pw_8bintrees_7qrbtree_7cRBTree_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
828 static void __pyx_pw_8bintrees_7qrbtree_7cRBTree_3__dealloc__(PyObject *__pyx_v_self) {
829 __Pyx_RefNannyDeclarations
830 __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
831 __pyx_pf_8bintrees_7qrbtree_7cRBTree_2__dealloc__(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self));
832 __Pyx_RefNannyFinishContext();
835 /* "bintrees\qrbtree.pyx":26
836 * self.update(items)
838 * def __dealloc__(self): # <<<<<<<<<<<<<<
839 * ct_delete_tree(self._root)
843 static void __pyx_pf_8bintrees_7qrbtree_7cRBTree_2__dealloc__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self) {
844 __Pyx_RefNannyDeclarations
845 __Pyx_RefNannySetupContext("__dealloc__", 0);
847 /* "bintrees\qrbtree.pyx":27
849 * def __dealloc__(self):
850 * ct_delete_tree(self._root) # <<<<<<<<<<<<<<
852 * @property
854 ct_delete_tree(__pyx_v_self->_root);
856 __Pyx_RefNannyFinishContext();
859 /* Python wrapper */
860 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_5count(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
861 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_5count(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
862 PyObject *__pyx_r = 0;
863 __Pyx_RefNannyDeclarations
864 __Pyx_RefNannySetupContext("count (wrapper)", 0);
865 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_4count(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self));
866 __Pyx_RefNannyFinishContext();
867 return __pyx_r;
870 /* "bintrees\qrbtree.pyx":30
872 * @property
873 * def count(self): # <<<<<<<<<<<<<<
874 * return self._count
878 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_4count(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self) {
879 PyObject *__pyx_r = NULL;
880 __Pyx_RefNannyDeclarations
881 PyObject *__pyx_t_1 = NULL;
882 int __pyx_lineno = 0;
883 const char *__pyx_filename = NULL;
884 int __pyx_clineno = 0;
885 __Pyx_RefNannySetupContext("count", 0);
887 /* "bintrees\qrbtree.pyx":31
888 * @property
889 * def count(self):
890 * return self._count # <<<<<<<<<<<<<<
892 * def __getstate__(self):
894 __Pyx_XDECREF(__pyx_r);
895 __pyx_t_1 = PyInt_FromLong(__pyx_v_self->_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
896 __Pyx_GOTREF(__pyx_t_1);
897 __pyx_r = __pyx_t_1;
898 __pyx_t_1 = 0;
899 goto __pyx_L0;
901 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
902 goto __pyx_L0;
903 __pyx_L1_error:;
904 __Pyx_XDECREF(__pyx_t_1);
905 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.count", __pyx_clineno, __pyx_lineno, __pyx_filename);
906 __pyx_r = NULL;
907 __pyx_L0:;
908 __Pyx_XGIVEREF(__pyx_r);
909 __Pyx_RefNannyFinishContext();
910 return __pyx_r;
913 /* Python wrapper */
914 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_7__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
915 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_7__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
916 PyObject *__pyx_r = 0;
917 __Pyx_RefNannyDeclarations
918 __Pyx_RefNannySetupContext("__getstate__ (wrapper)", 0);
919 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_6__getstate__(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self));
920 __Pyx_RefNannyFinishContext();
921 return __pyx_r;
924 /* "bintrees\qrbtree.pyx":33
925 * return self._count
927 * def __getstate__(self): # <<<<<<<<<<<<<<
928 * return dict(self.items())
932 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_6__getstate__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self) {
933 PyObject *__pyx_r = NULL;
934 __Pyx_RefNannyDeclarations
935 PyObject *__pyx_t_1 = NULL;
936 PyObject *__pyx_t_2 = NULL;
937 int __pyx_lineno = 0;
938 const char *__pyx_filename = NULL;
939 int __pyx_clineno = 0;
940 __Pyx_RefNannySetupContext("__getstate__", 0);
942 /* "bintrees\qrbtree.pyx":34
944 * def __getstate__(self):
945 * return dict(self.items()) # <<<<<<<<<<<<<<
947 * def __setstate__(self, state):
949 __Pyx_XDECREF(__pyx_r);
950 __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
951 __Pyx_GOTREF(__pyx_t_1);
952 __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
953 __Pyx_GOTREF(__pyx_t_2);
954 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
955 __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
956 __Pyx_GOTREF(__pyx_t_1);
957 PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
958 __Pyx_GIVEREF(__pyx_t_2);
959 __pyx_t_2 = 0;
960 __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
961 __Pyx_GOTREF(__pyx_t_2);
962 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
963 __pyx_r = __pyx_t_2;
964 __pyx_t_2 = 0;
965 goto __pyx_L0;
967 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
968 goto __pyx_L0;
969 __pyx_L1_error:;
970 __Pyx_XDECREF(__pyx_t_1);
971 __Pyx_XDECREF(__pyx_t_2);
972 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.__getstate__", __pyx_clineno, __pyx_lineno, __pyx_filename);
973 __pyx_r = NULL;
974 __pyx_L0:;
975 __Pyx_XGIVEREF(__pyx_r);
976 __Pyx_RefNannyFinishContext();
977 return __pyx_r;
980 /* Python wrapper */
981 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_9__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state); /*proto*/
982 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_9__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state) {
983 PyObject *__pyx_r = 0;
984 __Pyx_RefNannyDeclarations
985 __Pyx_RefNannySetupContext("__setstate__ (wrapper)", 0);
986 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_8__setstate__(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self), ((PyObject *)__pyx_v_state));
987 __Pyx_RefNannyFinishContext();
988 return __pyx_r;
991 /* "bintrees\qrbtree.pyx":36
992 * return dict(self.items())
994 * def __setstate__(self, state): # <<<<<<<<<<<<<<
995 * self.update(state)
999 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_8__setstate__(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_state) {
1000 PyObject *__pyx_r = NULL;
1001 __Pyx_RefNannyDeclarations
1002 PyObject *__pyx_t_1 = NULL;
1003 PyObject *__pyx_t_2 = NULL;
1004 PyObject *__pyx_t_3 = NULL;
1005 int __pyx_lineno = 0;
1006 const char *__pyx_filename = NULL;
1007 int __pyx_clineno = 0;
1008 __Pyx_RefNannySetupContext("__setstate__", 0);
1010 /* "bintrees\qrbtree.pyx":37
1012 * def __setstate__(self, state):
1013 * self.update(state) # <<<<<<<<<<<<<<
1015 * def clear(self):
1017 __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1018 __Pyx_GOTREF(__pyx_t_1);
1019 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1020 __Pyx_GOTREF(__pyx_t_2);
1021 __Pyx_INCREF(__pyx_v_state);
1022 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_state);
1023 __Pyx_GIVEREF(__pyx_v_state);
1024 __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1025 __Pyx_GOTREF(__pyx_t_3);
1026 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1027 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
1028 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
1030 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1031 goto __pyx_L0;
1032 __pyx_L1_error:;
1033 __Pyx_XDECREF(__pyx_t_1);
1034 __Pyx_XDECREF(__pyx_t_2);
1035 __Pyx_XDECREF(__pyx_t_3);
1036 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.__setstate__", __pyx_clineno, __pyx_lineno, __pyx_filename);
1037 __pyx_r = NULL;
1038 __pyx_L0:;
1039 __Pyx_XGIVEREF(__pyx_r);
1040 __Pyx_RefNannyFinishContext();
1041 return __pyx_r;
1044 /* Python wrapper */
1045 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_11clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
1046 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_11clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
1047 PyObject *__pyx_r = 0;
1048 __Pyx_RefNannyDeclarations
1049 __Pyx_RefNannySetupContext("clear (wrapper)", 0);
1050 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_10clear(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self));
1051 __Pyx_RefNannyFinishContext();
1052 return __pyx_r;
1055 /* "bintrees\qrbtree.pyx":39
1056 * self.update(state)
1058 * def clear(self): # <<<<<<<<<<<<<<
1059 * ct_delete_tree(self._root)
1060 * self._count = 0
1063 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_10clear(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self) {
1064 PyObject *__pyx_r = NULL;
1065 __Pyx_RefNannyDeclarations
1066 __Pyx_RefNannySetupContext("clear", 0);
1068 /* "bintrees\qrbtree.pyx":40
1070 * def clear(self):
1071 * ct_delete_tree(self._root) # <<<<<<<<<<<<<<
1072 * self._count = 0
1073 * self._root = NULL
1075 ct_delete_tree(__pyx_v_self->_root);
1077 /* "bintrees\qrbtree.pyx":41
1078 * def clear(self):
1079 * ct_delete_tree(self._root)
1080 * self._count = 0 # <<<<<<<<<<<<<<
1081 * self._root = NULL
1084 __pyx_v_self->_count = 0;
1086 /* "bintrees\qrbtree.pyx":42
1087 * ct_delete_tree(self._root)
1088 * self._count = 0
1089 * self._root = NULL # <<<<<<<<<<<<<<
1091 * def get_value(self, key):
1093 __pyx_v_self->_root = NULL;
1095 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1096 __Pyx_XGIVEREF(__pyx_r);
1097 __Pyx_RefNannyFinishContext();
1098 return __pyx_r;
1101 /* Python wrapper */
1102 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_13get_value(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
1103 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_13get_value(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
1104 PyObject *__pyx_r = 0;
1105 __Pyx_RefNannyDeclarations
1106 __Pyx_RefNannySetupContext("get_value (wrapper)", 0);
1107 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_12get_value(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self), ((PyObject *)__pyx_v_key));
1108 __Pyx_RefNannyFinishContext();
1109 return __pyx_r;
1112 /* "bintrees\qrbtree.pyx":44
1113 * self._root = NULL
1115 * def get_value(self, key): # <<<<<<<<<<<<<<
1116 * result = <object> ct_get_item(self._root, key)
1117 * if result is None:
1120 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_12get_value(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_key) {
1121 PyObject *__pyx_v_result = NULL;
1122 PyObject *__pyx_r = NULL;
1123 __Pyx_RefNannyDeclarations
1124 PyObject *__pyx_t_1;
1125 int __pyx_t_2;
1126 PyObject *__pyx_t_3 = NULL;
1127 PyObject *__pyx_t_4 = NULL;
1128 int __pyx_lineno = 0;
1129 const char *__pyx_filename = NULL;
1130 int __pyx_clineno = 0;
1131 __Pyx_RefNannySetupContext("get_value", 0);
1133 /* "bintrees\qrbtree.pyx":45
1135 * def get_value(self, key):
1136 * result = <object> ct_get_item(self._root, key) # <<<<<<<<<<<<<<
1137 * if result is None:
1138 * raise KeyError(key)
1140 __pyx_t_1 = ct_get_item(__pyx_v_self->_root, __pyx_v_key);
1141 __Pyx_INCREF(((PyObject *)__pyx_t_1));
1142 __pyx_v_result = ((PyObject *)__pyx_t_1);
1144 /* "bintrees\qrbtree.pyx":46
1145 * def get_value(self, key):
1146 * result = <object> ct_get_item(self._root, key)
1147 * if result is None: # <<<<<<<<<<<<<<
1148 * raise KeyError(key)
1149 * else:
1151 __pyx_t_2 = (__pyx_v_result == Py_None);
1152 if (__pyx_t_2) {
1154 /* "bintrees\qrbtree.pyx":47
1155 * result = <object> ct_get_item(self._root, key)
1156 * if result is None:
1157 * raise KeyError(key) # <<<<<<<<<<<<<<
1158 * else:
1159 * return result[1]
1161 __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1162 __Pyx_GOTREF(__pyx_t_3);
1163 __Pyx_INCREF(__pyx_v_key);
1164 PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key);
1165 __Pyx_GIVEREF(__pyx_v_key);
1166 __pyx_t_4 = PyObject_Call(__pyx_builtin_KeyError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1167 __Pyx_GOTREF(__pyx_t_4);
1168 __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
1169 __Pyx_Raise(__pyx_t_4, 0, 0, 0);
1170 __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
1171 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1172 goto __pyx_L3;
1174 /*else*/ {
1176 /* "bintrees\qrbtree.pyx":49
1177 * raise KeyError(key)
1178 * else:
1179 * return result[1] # <<<<<<<<<<<<<<
1181 * def get_walker(self):
1183 __Pyx_XDECREF(__pyx_r);
1184 __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_result, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1185 __Pyx_GOTREF(__pyx_t_4);
1186 __pyx_r = __pyx_t_4;
1187 __pyx_t_4 = 0;
1188 goto __pyx_L0;
1190 __pyx_L3:;
1192 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1193 goto __pyx_L0;
1194 __pyx_L1_error:;
1195 __Pyx_XDECREF(__pyx_t_3);
1196 __Pyx_XDECREF(__pyx_t_4);
1197 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
1198 __pyx_r = NULL;
1199 __pyx_L0:;
1200 __Pyx_XDECREF(__pyx_v_result);
1201 __Pyx_XGIVEREF(__pyx_r);
1202 __Pyx_RefNannyFinishContext();
1203 return __pyx_r;
1206 /* Python wrapper */
1207 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_15get_walker(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
1208 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_15get_walker(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
1209 PyObject *__pyx_r = 0;
1210 __Pyx_RefNannyDeclarations
1211 __Pyx_RefNannySetupContext("get_walker (wrapper)", 0);
1212 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_14get_walker(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self));
1213 __Pyx_RefNannyFinishContext();
1214 return __pyx_r;
1217 /* "bintrees\qrbtree.pyx":51
1218 * return result[1]
1220 * def get_walker(self): # <<<<<<<<<<<<<<
1221 * cdef cWalker walker
1222 * walker = cWalker()
1225 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_14get_walker(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self) {
1226 struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_walker = 0;
1227 PyObject *__pyx_r = NULL;
1228 __Pyx_RefNannyDeclarations
1229 PyObject *__pyx_t_1 = NULL;
1230 int __pyx_lineno = 0;
1231 const char *__pyx_filename = NULL;
1232 int __pyx_clineno = 0;
1233 __Pyx_RefNannySetupContext("get_walker", 0);
1235 /* "bintrees\qrbtree.pyx":53
1236 * def get_walker(self):
1237 * cdef cWalker walker
1238 * walker = cWalker() # <<<<<<<<<<<<<<
1239 * walker.set_tree(self._root)
1240 * return walker
1242 __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8bintrees_7cwalker_cWalker)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1243 __Pyx_GOTREF(__pyx_t_1);
1244 __pyx_v_walker = ((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_t_1);
1245 __pyx_t_1 = 0;
1247 /* "bintrees\qrbtree.pyx":54
1248 * cdef cWalker walker
1249 * walker = cWalker()
1250 * walker.set_tree(self._root) # <<<<<<<<<<<<<<
1251 * return walker
1254 ((struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *)__pyx_v_walker->__pyx_vtab)->set_tree(__pyx_v_walker, __pyx_v_self->_root);
1256 /* "bintrees\qrbtree.pyx":55
1257 * walker = cWalker()
1258 * walker.set_tree(self._root)
1259 * return walker # <<<<<<<<<<<<<<
1261 * def insert(self, key, value):
1263 __Pyx_XDECREF(__pyx_r);
1264 __Pyx_INCREF(((PyObject *)__pyx_v_walker));
1265 __pyx_r = ((PyObject *)__pyx_v_walker);
1266 goto __pyx_L0;
1268 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1269 goto __pyx_L0;
1270 __pyx_L1_error:;
1271 __Pyx_XDECREF(__pyx_t_1);
1272 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.get_walker", __pyx_clineno, __pyx_lineno, __pyx_filename);
1273 __pyx_r = NULL;
1274 __pyx_L0:;
1275 __Pyx_XDECREF((PyObject *)__pyx_v_walker);
1276 __Pyx_XGIVEREF(__pyx_r);
1277 __Pyx_RefNannyFinishContext();
1278 return __pyx_r;
1281 /* Python wrapper */
1282 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_17insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
1283 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_17insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
1284 PyObject *__pyx_v_key = 0;
1285 PyObject *__pyx_v_value = 0;
1286 PyObject *__pyx_r = 0;
1287 __Pyx_RefNannyDeclarations
1288 __Pyx_RefNannySetupContext("insert (wrapper)", 0);
1290 static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__key,&__pyx_n_s__value,0};
1291 PyObject* values[2] = {0,0};
1292 if (unlikely(__pyx_kwds)) {
1293 Py_ssize_t kw_args;
1294 const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
1295 switch (pos_args) {
1296 case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1297 case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1298 case 0: break;
1299 default: goto __pyx_L5_argtuple_error;
1301 kw_args = PyDict_Size(__pyx_kwds);
1302 switch (pos_args) {
1303 case 0:
1304 if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--;
1305 else goto __pyx_L5_argtuple_error;
1306 case 1:
1307 if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
1308 else {
1309 __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1312 if (unlikely(kw_args > 0)) {
1313 if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1315 } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
1316 goto __pyx_L5_argtuple_error;
1317 } else {
1318 values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
1319 values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
1321 __pyx_v_key = values[0];
1322 __pyx_v_value = values[1];
1324 goto __pyx_L4_argument_unpacking_done;
1325 __pyx_L5_argtuple_error:;
1326 __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
1327 __pyx_L3_error:;
1328 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
1329 __Pyx_RefNannyFinishContext();
1330 return NULL;
1331 __pyx_L4_argument_unpacking_done:;
1332 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_16insert(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self), __pyx_v_key, __pyx_v_value);
1333 __Pyx_RefNannyFinishContext();
1334 return __pyx_r;
1337 /* "bintrees\qrbtree.pyx":57
1338 * return walker
1340 * def insert(self, key, value): # <<<<<<<<<<<<<<
1341 * res = rb_insert(&self._root, key, value)
1342 * if res < 0:
1345 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_16insert(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
1346 PyObject *__pyx_v_res = NULL;
1347 PyObject *__pyx_r = NULL;
1348 __Pyx_RefNannyDeclarations
1349 PyObject *__pyx_t_1 = NULL;
1350 int __pyx_t_2;
1351 PyObject *__pyx_t_3 = NULL;
1352 int __pyx_t_4;
1353 int __pyx_lineno = 0;
1354 const char *__pyx_filename = NULL;
1355 int __pyx_clineno = 0;
1356 __Pyx_RefNannySetupContext("insert", 0);
1358 /* "bintrees\qrbtree.pyx":58
1360 * def insert(self, key, value):
1361 * res = rb_insert(&self._root, key, value) # <<<<<<<<<<<<<<
1362 * if res < 0:
1363 * raise MemoryError('Can not allocate memory for node structure.')
1365 __pyx_t_1 = PyInt_FromLong(rb_insert((&__pyx_v_self->_root), __pyx_v_key, __pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1366 __Pyx_GOTREF(__pyx_t_1);
1367 __pyx_v_res = __pyx_t_1;
1368 __pyx_t_1 = 0;
1370 /* "bintrees\qrbtree.pyx":59
1371 * def insert(self, key, value):
1372 * res = rb_insert(&self._root, key, value)
1373 * if res < 0: # <<<<<<<<<<<<<<
1374 * raise MemoryError('Can not allocate memory for node structure.')
1375 * else:
1377 __pyx_t_1 = PyObject_RichCompare(__pyx_v_res, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1378 __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1379 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1380 if (__pyx_t_2) {
1382 /* "bintrees\qrbtree.pyx":60
1383 * res = rb_insert(&self._root, key, value)
1384 * if res < 0:
1385 * raise MemoryError('Can not allocate memory for node structure.') # <<<<<<<<<<<<<<
1386 * else:
1387 * self._count += res
1389 __pyx_t_1 = PyObject_Call(__pyx_builtin_MemoryError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1390 __Pyx_GOTREF(__pyx_t_1);
1391 __Pyx_Raise(__pyx_t_1, 0, 0, 0);
1392 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1393 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1394 goto __pyx_L3;
1396 /*else*/ {
1398 /* "bintrees\qrbtree.pyx":62
1399 * raise MemoryError('Can not allocate memory for node structure.')
1400 * else:
1401 * self._count += res # <<<<<<<<<<<<<<
1403 * def remove(self, key):
1405 __pyx_t_1 = PyInt_FromLong(__pyx_v_self->_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1406 __Pyx_GOTREF(__pyx_t_1);
1407 __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_v_res); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1408 __Pyx_GOTREF(__pyx_t_3);
1409 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1410 __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1411 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
1412 __pyx_v_self->_count = __pyx_t_4;
1414 __pyx_L3:;
1416 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1417 goto __pyx_L0;
1418 __pyx_L1_error:;
1419 __Pyx_XDECREF(__pyx_t_1);
1420 __Pyx_XDECREF(__pyx_t_3);
1421 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
1422 __pyx_r = NULL;
1423 __pyx_L0:;
1424 __Pyx_XDECREF(__pyx_v_res);
1425 __Pyx_XGIVEREF(__pyx_r);
1426 __Pyx_RefNannyFinishContext();
1427 return __pyx_r;
1430 /* Python wrapper */
1431 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_19remove(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
1432 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_19remove(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
1433 PyObject *__pyx_r = 0;
1434 __Pyx_RefNannyDeclarations
1435 __Pyx_RefNannySetupContext("remove (wrapper)", 0);
1436 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_18remove(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self), ((PyObject *)__pyx_v_key));
1437 __Pyx_RefNannyFinishContext();
1438 return __pyx_r;
1441 /* "bintrees\qrbtree.pyx":64
1442 * self._count += res
1444 * def remove(self, key): # <<<<<<<<<<<<<<
1445 * cdef int result
1446 * result = rb_remove(&self._root, key)
1449 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_18remove(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self, PyObject *__pyx_v_key) {
1450 int __pyx_v_result;
1451 PyObject *__pyx_r = NULL;
1452 __Pyx_RefNannyDeclarations
1453 int __pyx_t_1;
1454 PyObject *__pyx_t_2 = NULL;
1455 PyObject *__pyx_t_3 = NULL;
1456 int __pyx_lineno = 0;
1457 const char *__pyx_filename = NULL;
1458 int __pyx_clineno = 0;
1459 __Pyx_RefNannySetupContext("remove", 0);
1461 /* "bintrees\qrbtree.pyx":66
1462 * def remove(self, key):
1463 * cdef int result
1464 * result = rb_remove(&self._root, key) # <<<<<<<<<<<<<<
1465 * if result == 0:
1466 * raise KeyError(str(key))
1468 __pyx_v_result = rb_remove((&__pyx_v_self->_root), __pyx_v_key);
1470 /* "bintrees\qrbtree.pyx":67
1471 * cdef int result
1472 * result = rb_remove(&self._root, key)
1473 * if result == 0: # <<<<<<<<<<<<<<
1474 * raise KeyError(str(key))
1475 * else:
1477 __pyx_t_1 = (__pyx_v_result == 0);
1478 if (__pyx_t_1) {
1480 /* "bintrees\qrbtree.pyx":68
1481 * result = rb_remove(&self._root, key)
1482 * if result == 0:
1483 * raise KeyError(str(key)) # <<<<<<<<<<<<<<
1484 * else:
1485 * self._count -= 1
1487 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1488 __Pyx_GOTREF(__pyx_t_2);
1489 __Pyx_INCREF(__pyx_v_key);
1490 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key);
1491 __Pyx_GIVEREF(__pyx_v_key);
1492 __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1493 __Pyx_GOTREF(__pyx_t_3);
1494 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
1495 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1496 __Pyx_GOTREF(__pyx_t_2);
1497 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
1498 __Pyx_GIVEREF(__pyx_t_3);
1499 __pyx_t_3 = 0;
1500 __pyx_t_3 = PyObject_Call(__pyx_builtin_KeyError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1501 __Pyx_GOTREF(__pyx_t_3);
1502 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
1503 __Pyx_Raise(__pyx_t_3, 0, 0, 0);
1504 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
1505 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1506 goto __pyx_L3;
1508 /*else*/ {
1510 /* "bintrees\qrbtree.pyx":70
1511 * raise KeyError(str(key))
1512 * else:
1513 * self._count -= 1 # <<<<<<<<<<<<<<
1515 * def max_item(self):
1517 __pyx_v_self->_count = (__pyx_v_self->_count - 1);
1519 __pyx_L3:;
1521 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1522 goto __pyx_L0;
1523 __pyx_L1_error:;
1524 __Pyx_XDECREF(__pyx_t_2);
1525 __Pyx_XDECREF(__pyx_t_3);
1526 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
1527 __pyx_r = NULL;
1528 __pyx_L0:;
1529 __Pyx_XGIVEREF(__pyx_r);
1530 __Pyx_RefNannyFinishContext();
1531 return __pyx_r;
1534 /* Python wrapper */
1535 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_21max_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
1536 static char __pyx_doc_8bintrees_7qrbtree_7cRBTree_20max_item[] = " Get item with max key of tree, raises ValueError if tree is empty. ";
1537 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_21max_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
1538 PyObject *__pyx_r = 0;
1539 __Pyx_RefNannyDeclarations
1540 __Pyx_RefNannySetupContext("max_item (wrapper)", 0);
1541 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_20max_item(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self));
1542 __Pyx_RefNannyFinishContext();
1543 return __pyx_r;
1546 /* "bintrees\qrbtree.pyx":72
1547 * self._count -= 1
1549 * def max_item(self): # <<<<<<<<<<<<<<
1550 * """ Get item with max key of tree, raises ValueError if tree is empty. """
1551 * cdef node_t *node
1554 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_20max_item(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self) {
1555 node_t *__pyx_v_node;
1556 PyObject *__pyx_r = NULL;
1557 __Pyx_RefNannyDeclarations
1558 int __pyx_t_1;
1559 PyObject *__pyx_t_2 = NULL;
1560 int __pyx_lineno = 0;
1561 const char *__pyx_filename = NULL;
1562 int __pyx_clineno = 0;
1563 __Pyx_RefNannySetupContext("max_item", 0);
1565 /* "bintrees\qrbtree.pyx":75
1566 * """ Get item with max key of tree, raises ValueError if tree is empty. """
1567 * cdef node_t *node
1568 * node = ct_max_node(self._root) # <<<<<<<<<<<<<<
1569 * if node == NULL: # root is None
1570 * raise ValueError("Tree is empty")
1572 __pyx_v_node = ct_max_node(__pyx_v_self->_root);
1574 /* "bintrees\qrbtree.pyx":76
1575 * cdef node_t *node
1576 * node = ct_max_node(self._root)
1577 * if node == NULL: # root is None # <<<<<<<<<<<<<<
1578 * raise ValueError("Tree is empty")
1579 * return (<object>node.key, <object>node.value)
1581 __pyx_t_1 = (__pyx_v_node == NULL);
1582 if (__pyx_t_1) {
1584 /* "bintrees\qrbtree.pyx":77
1585 * node = ct_max_node(self._root)
1586 * if node == NULL: # root is None
1587 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<<
1588 * return (<object>node.key, <object>node.value)
1591 __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1592 __Pyx_GOTREF(__pyx_t_2);
1593 __Pyx_Raise(__pyx_t_2, 0, 0, 0);
1594 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
1595 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1596 goto __pyx_L3;
1598 __pyx_L3:;
1600 /* "bintrees\qrbtree.pyx":78
1601 * if node == NULL: # root is None
1602 * raise ValueError("Tree is empty")
1603 * return (<object>node.key, <object>node.value) # <<<<<<<<<<<<<<
1605 * def min_item(self):
1607 __Pyx_XDECREF(__pyx_r);
1608 __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1609 __Pyx_GOTREF(__pyx_t_2);
1610 __Pyx_INCREF(((PyObject *)__pyx_v_node->key));
1611 PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_node->key));
1612 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->key));
1613 __Pyx_INCREF(((PyObject *)__pyx_v_node->value));
1614 PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_node->value));
1615 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->value));
1616 __pyx_r = ((PyObject *)__pyx_t_2);
1617 __pyx_t_2 = 0;
1618 goto __pyx_L0;
1620 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1621 goto __pyx_L0;
1622 __pyx_L1_error:;
1623 __Pyx_XDECREF(__pyx_t_2);
1624 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.max_item", __pyx_clineno, __pyx_lineno, __pyx_filename);
1625 __pyx_r = NULL;
1626 __pyx_L0:;
1627 __Pyx_XGIVEREF(__pyx_r);
1628 __Pyx_RefNannyFinishContext();
1629 return __pyx_r;
1632 /* Python wrapper */
1633 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_23min_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
1634 static char __pyx_doc_8bintrees_7qrbtree_7cRBTree_22min_item[] = " Get item with min key of tree, raises ValueError if tree is empty. ";
1635 static PyObject *__pyx_pw_8bintrees_7qrbtree_7cRBTree_23min_item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
1636 PyObject *__pyx_r = 0;
1637 __Pyx_RefNannyDeclarations
1638 __Pyx_RefNannySetupContext("min_item (wrapper)", 0);
1639 __pyx_r = __pyx_pf_8bintrees_7qrbtree_7cRBTree_22min_item(((struct __pyx_obj_8bintrees_7qrbtree_cRBTree *)__pyx_v_self));
1640 __Pyx_RefNannyFinishContext();
1641 return __pyx_r;
1644 /* "bintrees\qrbtree.pyx":80
1645 * return (<object>node.key, <object>node.value)
1647 * def min_item(self): # <<<<<<<<<<<<<<
1648 * """ Get item with min key of tree, raises ValueError if tree is empty. """
1649 * cdef node_t *node
1652 static PyObject *__pyx_pf_8bintrees_7qrbtree_7cRBTree_22min_item(struct __pyx_obj_8bintrees_7qrbtree_cRBTree *__pyx_v_self) {
1653 node_t *__pyx_v_node;
1654 PyObject *__pyx_r = NULL;
1655 __Pyx_RefNannyDeclarations
1656 int __pyx_t_1;
1657 PyObject *__pyx_t_2 = NULL;
1658 int __pyx_lineno = 0;
1659 const char *__pyx_filename = NULL;
1660 int __pyx_clineno = 0;
1661 __Pyx_RefNannySetupContext("min_item", 0);
1663 /* "bintrees\qrbtree.pyx":83
1664 * """ Get item with min key of tree, raises ValueError if tree is empty. """
1665 * cdef node_t *node
1666 * node = ct_min_node(self._root) # <<<<<<<<<<<<<<
1667 * if node == NULL: # root is None
1668 * raise ValueError("Tree is empty")
1670 __pyx_v_node = ct_min_node(__pyx_v_self->_root);
1672 /* "bintrees\qrbtree.pyx":84
1673 * cdef node_t *node
1674 * node = ct_min_node(self._root)
1675 * if node == NULL: # root is None # <<<<<<<<<<<<<<
1676 * raise ValueError("Tree is empty")
1677 * return (<object>node.key, <object>node.value)
1679 __pyx_t_1 = (__pyx_v_node == NULL);
1680 if (__pyx_t_1) {
1682 /* "bintrees\qrbtree.pyx":85
1683 * node = ct_min_node(self._root)
1684 * if node == NULL: # root is None
1685 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<<
1686 * return (<object>node.key, <object>node.value)
1688 __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_5), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1689 __Pyx_GOTREF(__pyx_t_2);
1690 __Pyx_Raise(__pyx_t_2, 0, 0, 0);
1691 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
1692 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1693 goto __pyx_L3;
1695 __pyx_L3:;
1697 /* "bintrees\qrbtree.pyx":86
1698 * if node == NULL: # root is None
1699 * raise ValueError("Tree is empty")
1700 * return (<object>node.key, <object>node.value) # <<<<<<<<<<<<<<
1702 __Pyx_XDECREF(__pyx_r);
1703 __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1704 __Pyx_GOTREF(__pyx_t_2);
1705 __Pyx_INCREF(((PyObject *)__pyx_v_node->key));
1706 PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_node->key));
1707 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->key));
1708 __Pyx_INCREF(((PyObject *)__pyx_v_node->value));
1709 PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_node->value));
1710 __Pyx_GIVEREF(((PyObject *)__pyx_v_node->value));
1711 __pyx_r = ((PyObject *)__pyx_t_2);
1712 __pyx_t_2 = 0;
1713 goto __pyx_L0;
1715 __pyx_r = Py_None; __Pyx_INCREF(Py_None);
1716 goto __pyx_L0;
1717 __pyx_L1_error:;
1718 __Pyx_XDECREF(__pyx_t_2);
1719 __Pyx_AddTraceback("bintrees.qrbtree.cRBTree.min_item", __pyx_clineno, __pyx_lineno, __pyx_filename);
1720 __pyx_r = NULL;
1721 __pyx_L0:;
1722 __Pyx_XGIVEREF(__pyx_r);
1723 __Pyx_RefNannyFinishContext();
1724 return __pyx_r;
1727 static PyObject *__pyx_tp_new_8bintrees_7qrbtree_cRBTree(PyTypeObject *t, PyObject *a, PyObject *k) {
1728 PyObject *o = (*t->tp_alloc)(t, 0);
1729 if (!o) return 0;
1730 if (__pyx_pw_8bintrees_7qrbtree_7cRBTree_1__cinit__(o, a, k) < 0) {
1731 Py_DECREF(o); o = 0;
1733 return o;
1736 static void __pyx_tp_dealloc_8bintrees_7qrbtree_cRBTree(PyObject *o) {
1738 PyObject *etype, *eval, *etb;
1739 PyErr_Fetch(&etype, &eval, &etb);
1740 ++Py_REFCNT(o);
1741 __pyx_pw_8bintrees_7qrbtree_7cRBTree_3__dealloc__(o);
1742 if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
1743 --Py_REFCNT(o);
1744 PyErr_Restore(etype, eval, etb);
1746 (*Py_TYPE(o)->tp_free)(o);
1749 static PyMethodDef __pyx_methods_8bintrees_7qrbtree_cRBTree[] = {
1750 {__Pyx_NAMESTR("count"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_5count, METH_NOARGS, __Pyx_DOCSTR(0)},
1751 {__Pyx_NAMESTR("__getstate__"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_7__getstate__, METH_NOARGS, __Pyx_DOCSTR(0)},
1752 {__Pyx_NAMESTR("__setstate__"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_9__setstate__, METH_O, __Pyx_DOCSTR(0)},
1753 {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_11clear, METH_NOARGS, __Pyx_DOCSTR(0)},
1754 {__Pyx_NAMESTR("get_value"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_13get_value, METH_O, __Pyx_DOCSTR(0)},
1755 {__Pyx_NAMESTR("get_walker"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_15get_walker, METH_NOARGS, __Pyx_DOCSTR(0)},
1756 {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_17insert, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
1757 {__Pyx_NAMESTR("remove"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_19remove, METH_O, __Pyx_DOCSTR(0)},
1758 {__Pyx_NAMESTR("max_item"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_21max_item, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_8bintrees_7qrbtree_7cRBTree_20max_item)},
1759 {__Pyx_NAMESTR("min_item"), (PyCFunction)__pyx_pw_8bintrees_7qrbtree_7cRBTree_23min_item, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_8bintrees_7qrbtree_7cRBTree_22min_item)},
1760 {0, 0, 0, 0}
1763 static PyNumberMethods __pyx_tp_as_number_cRBTree = {
1764 0, /*nb_add*/
1765 0, /*nb_subtract*/
1766 0, /*nb_multiply*/
1767 #if PY_MAJOR_VERSION < 3
1768 0, /*nb_divide*/
1769 #endif
1770 0, /*nb_remainder*/
1771 0, /*nb_divmod*/
1772 0, /*nb_power*/
1773 0, /*nb_negative*/
1774 0, /*nb_positive*/
1775 0, /*nb_absolute*/
1776 0, /*nb_nonzero*/
1777 0, /*nb_invert*/
1778 0, /*nb_lshift*/
1779 0, /*nb_rshift*/
1780 0, /*nb_and*/
1781 0, /*nb_xor*/
1782 0, /*nb_or*/
1783 #if PY_MAJOR_VERSION < 3
1784 0, /*nb_coerce*/
1785 #endif
1786 0, /*nb_int*/
1787 #if PY_MAJOR_VERSION < 3
1788 0, /*nb_long*/
1789 #else
1790 0, /*reserved*/
1791 #endif
1792 0, /*nb_float*/
1793 #if PY_MAJOR_VERSION < 3
1794 0, /*nb_oct*/
1795 #endif
1796 #if PY_MAJOR_VERSION < 3
1797 0, /*nb_hex*/
1798 #endif
1799 0, /*nb_inplace_add*/
1800 0, /*nb_inplace_subtract*/
1801 0, /*nb_inplace_multiply*/
1802 #if PY_MAJOR_VERSION < 3
1803 0, /*nb_inplace_divide*/
1804 #endif
1805 0, /*nb_inplace_remainder*/
1806 0, /*nb_inplace_power*/
1807 0, /*nb_inplace_lshift*/
1808 0, /*nb_inplace_rshift*/
1809 0, /*nb_inplace_and*/
1810 0, /*nb_inplace_xor*/
1811 0, /*nb_inplace_or*/
1812 0, /*nb_floor_divide*/
1813 0, /*nb_true_divide*/
1814 0, /*nb_inplace_floor_divide*/
1815 0, /*nb_inplace_true_divide*/
1816 #if PY_VERSION_HEX >= 0x02050000
1817 0, /*nb_index*/
1818 #endif
1821 static PySequenceMethods __pyx_tp_as_sequence_cRBTree = {
1822 0, /*sq_length*/
1823 0, /*sq_concat*/
1824 0, /*sq_repeat*/
1825 0, /*sq_item*/
1826 0, /*sq_slice*/
1827 0, /*sq_ass_item*/
1828 0, /*sq_ass_slice*/
1829 0, /*sq_contains*/
1830 0, /*sq_inplace_concat*/
1831 0, /*sq_inplace_repeat*/
1834 static PyMappingMethods __pyx_tp_as_mapping_cRBTree = {
1835 0, /*mp_length*/
1836 0, /*mp_subscript*/
1837 0, /*mp_ass_subscript*/
1840 static PyBufferProcs __pyx_tp_as_buffer_cRBTree = {
1841 #if PY_MAJOR_VERSION < 3
1842 0, /*bf_getreadbuffer*/
1843 #endif
1844 #if PY_MAJOR_VERSION < 3
1845 0, /*bf_getwritebuffer*/
1846 #endif
1847 #if PY_MAJOR_VERSION < 3
1848 0, /*bf_getsegcount*/
1849 #endif
1850 #if PY_MAJOR_VERSION < 3
1851 0, /*bf_getcharbuffer*/
1852 #endif
1853 #if PY_VERSION_HEX >= 0x02060000
1854 0, /*bf_getbuffer*/
1855 #endif
1856 #if PY_VERSION_HEX >= 0x02060000
1857 0, /*bf_releasebuffer*/
1858 #endif
1861 static PyTypeObject __pyx_type_8bintrees_7qrbtree_cRBTree = {
1862 PyVarObject_HEAD_INIT(0, 0)
1863 __Pyx_NAMESTR("bintrees.qrbtree.cRBTree"), /*tp_name*/
1864 sizeof(struct __pyx_obj_8bintrees_7qrbtree_cRBTree), /*tp_basicsize*/
1865 0, /*tp_itemsize*/
1866 __pyx_tp_dealloc_8bintrees_7qrbtree_cRBTree, /*tp_dealloc*/
1867 0, /*tp_print*/
1868 0, /*tp_getattr*/
1869 0, /*tp_setattr*/
1870 #if PY_MAJOR_VERSION < 3
1871 0, /*tp_compare*/
1872 #else
1873 0, /*reserved*/
1874 #endif
1875 0, /*tp_repr*/
1876 &__pyx_tp_as_number_cRBTree, /*tp_as_number*/
1877 &__pyx_tp_as_sequence_cRBTree, /*tp_as_sequence*/
1878 &__pyx_tp_as_mapping_cRBTree, /*tp_as_mapping*/
1879 0, /*tp_hash*/
1880 0, /*tp_call*/
1881 0, /*tp_str*/
1882 0, /*tp_getattro*/
1883 0, /*tp_setattro*/
1884 &__pyx_tp_as_buffer_cRBTree, /*tp_as_buffer*/
1885 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
1886 0, /*tp_doc*/
1887 0, /*tp_traverse*/
1888 0, /*tp_clear*/
1889 0, /*tp_richcompare*/
1890 0, /*tp_weaklistoffset*/
1891 0, /*tp_iter*/
1892 0, /*tp_iternext*/
1893 __pyx_methods_8bintrees_7qrbtree_cRBTree, /*tp_methods*/
1894 0, /*tp_members*/
1895 0, /*tp_getset*/
1896 0, /*tp_base*/
1897 0, /*tp_dict*/
1898 0, /*tp_descr_get*/
1899 0, /*tp_descr_set*/
1900 0, /*tp_dictoffset*/
1901 0, /*tp_init*/
1902 0, /*tp_alloc*/
1903 __pyx_tp_new_8bintrees_7qrbtree_cRBTree, /*tp_new*/
1904 0, /*tp_free*/
1905 0, /*tp_is_gc*/
1906 0, /*tp_bases*/
1907 0, /*tp_mro*/
1908 0, /*tp_cache*/
1909 0, /*tp_subclasses*/
1910 0, /*tp_weaklist*/
1911 0, /*tp_del*/
1912 #if PY_VERSION_HEX >= 0x02060000
1913 0, /*tp_version_tag*/
1914 #endif
1917 static PyMethodDef __pyx_methods[] = {
1918 {0, 0, 0, 0}
1921 #if PY_MAJOR_VERSION >= 3
1922 static struct PyModuleDef __pyx_moduledef = {
1923 PyModuleDef_HEAD_INIT,
1924 __Pyx_NAMESTR("qrbtree"),
1925 0, /* m_doc */
1926 -1, /* m_size */
1927 __pyx_methods /* m_methods */,
1928 NULL, /* m_reload */
1929 NULL, /* m_traverse */
1930 NULL, /* m_clear */
1931 NULL /* m_free */
1933 #endif
1935 static __Pyx_StringTabEntry __pyx_string_tab[] = {
1936 {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
1937 {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
1938 {&__pyx_n_s__KeyError, __pyx_k__KeyError, sizeof(__pyx_k__KeyError), 0, 0, 1, 1},
1939 {&__pyx_n_s__MemoryError, __pyx_k__MemoryError, sizeof(__pyx_k__MemoryError), 0, 0, 1, 1},
1940 {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
1941 {&__pyx_n_s____all__, __pyx_k____all__, sizeof(__pyx_k____all__), 0, 0, 1, 1},
1942 {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
1943 {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
1944 {&__pyx_n_s__cRBTree, __pyx_k__cRBTree, sizeof(__pyx_k__cRBTree), 0, 0, 1, 1},
1945 {&__pyx_n_s__cWalker, __pyx_k__cWalker, sizeof(__pyx_k__cWalker), 0, 0, 1, 1},
1946 {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1},
1947 {&__pyx_n_s__cwalker, __pyx_k__cwalker, sizeof(__pyx_k__cwalker), 0, 0, 1, 1},
1948 {&__pyx_n_s__items, __pyx_k__items, sizeof(__pyx_k__items), 0, 0, 1, 1},
1949 {&__pyx_n_s__key, __pyx_k__key, sizeof(__pyx_k__key), 0, 0, 1, 1},
1950 {&__pyx_n_s__property, __pyx_k__property, sizeof(__pyx_k__property), 0, 0, 1, 1},
1951 {&__pyx_n_s__update, __pyx_k__update, sizeof(__pyx_k__update), 0, 0, 1, 1},
1952 {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1},
1953 {0, 0, 0, 0, 0, 0, 0}
1955 static int __Pyx_InitCachedBuiltins(void) {
1956 __pyx_builtin_property = __Pyx_GetName(__pyx_b, __pyx_n_s__property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1957 __pyx_builtin_KeyError = __Pyx_GetName(__pyx_b, __pyx_n_s__KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1958 __pyx_builtin_MemoryError = __Pyx_GetName(__pyx_b, __pyx_n_s__MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1959 __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1960 return 0;
1961 __pyx_L1_error:;
1962 return -1;
1965 static int __Pyx_InitCachedConstants(void) {
1966 __Pyx_RefNannyDeclarations
1967 __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
1969 /* "bintrees\qrbtree.pyx":60
1970 * res = rb_insert(&self._root, key, value)
1971 * if res < 0:
1972 * raise MemoryError('Can not allocate memory for node structure.') # <<<<<<<<<<<<<<
1973 * else:
1974 * self._count += res
1976 __pyx_k_tuple_2 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1977 __Pyx_GOTREF(__pyx_k_tuple_2);
1978 __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
1979 PyTuple_SET_ITEM(__pyx_k_tuple_2, 0, ((PyObject *)__pyx_kp_s_1));
1980 __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
1981 __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
1983 /* "bintrees\qrbtree.pyx":77
1984 * node = ct_max_node(self._root)
1985 * if node == NULL: # root is None
1986 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<<
1987 * return (<object>node.key, <object>node.value)
1990 __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
1991 __Pyx_GOTREF(__pyx_k_tuple_4);
1992 __Pyx_INCREF(((PyObject *)__pyx_kp_s_3));
1993 PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3));
1994 __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3));
1995 __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
1997 /* "bintrees\qrbtree.pyx":85
1998 * node = ct_min_node(self._root)
1999 * if node == NULL: # root is None
2000 * raise ValueError("Tree is empty") # <<<<<<<<<<<<<<
2001 * return (<object>node.key, <object>node.value)
2003 __pyx_k_tuple_5 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2004 __Pyx_GOTREF(__pyx_k_tuple_5);
2005 __Pyx_INCREF(((PyObject *)__pyx_kp_s_3));
2006 PyTuple_SET_ITEM(__pyx_k_tuple_5, 0, ((PyObject *)__pyx_kp_s_3));
2007 __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3));
2008 __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_5));
2009 __Pyx_RefNannyFinishContext();
2010 return 0;
2011 __pyx_L1_error:;
2012 __Pyx_RefNannyFinishContext();
2013 return -1;
2016 static int __Pyx_InitGlobals(void) {
2017 if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2018 __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2019 return 0;
2020 __pyx_L1_error:;
2021 return -1;
2024 #if PY_MAJOR_VERSION < 3
2025 PyMODINIT_FUNC initqrbtree(void); /*proto*/
2026 PyMODINIT_FUNC initqrbtree(void)
2027 #else
2028 PyMODINIT_FUNC PyInit_qrbtree(void); /*proto*/
2029 PyMODINIT_FUNC PyInit_qrbtree(void)
2030 #endif
2032 PyObject *__pyx_t_1 = NULL;
2033 PyObject *__pyx_t_2 = NULL;
2034 __Pyx_RefNannyDeclarations
2035 #if CYTHON_REFNANNY
2036 __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
2037 if (!__Pyx_RefNanny) {
2038 PyErr_Clear();
2039 __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
2040 if (!__Pyx_RefNanny)
2041 Py_FatalError("failed to import 'refnanny' module");
2043 #endif
2044 __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_qrbtree(void)", 0);
2045 if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2046 __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2047 __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2048 #ifdef __Pyx_CyFunction_USED
2049 if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2050 #endif
2051 #ifdef __Pyx_FusedFunction_USED
2052 if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2053 #endif
2054 #ifdef __Pyx_Generator_USED
2055 if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2056 #endif
2057 /*--- Library function declarations ---*/
2058 /*--- Threads initialization code ---*/
2059 #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
2060 #ifdef WITH_THREAD /* Python build with threading support? */
2061 PyEval_InitThreads();
2062 #endif
2063 #endif
2064 /*--- Module creation code ---*/
2065 #if PY_MAJOR_VERSION < 3
2066 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("qrbtree"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
2067 #else
2068 __pyx_m = PyModule_Create(&__pyx_moduledef);
2069 #endif
2070 if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2071 #if PY_MAJOR_VERSION >= 3
2073 PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2074 if (!PyDict_GetItemString(modules, "bintrees.qrbtree")) {
2075 if (unlikely(PyDict_SetItemString(modules, "bintrees.qrbtree", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2078 #endif
2079 __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2080 #if CYTHON_COMPILING_IN_PYPY
2081 Py_INCREF(__pyx_b);
2082 #endif
2083 if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2084 /*--- Initialize various global constants etc. ---*/
2085 if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2086 if (__pyx_module_is_main_bintrees__qrbtree) {
2087 if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
2089 /*--- Builtin init code ---*/
2090 if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2091 /*--- Constants init code ---*/
2092 if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2093 /*--- Global init code ---*/
2094 /*--- Variable export code ---*/
2095 /*--- Function export code ---*/
2096 /*--- Type init code ---*/
2097 if (PyType_Ready(&__pyx_type_8bintrees_7qrbtree_cRBTree) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2098 if (__Pyx_SetAttrString(__pyx_m, "cRBTree", (PyObject *)&__pyx_type_8bintrees_7qrbtree_cRBTree) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2099 __pyx_ptype_8bintrees_7qrbtree_cRBTree = &__pyx_type_8bintrees_7qrbtree_cRBTree;
2100 /*--- Type import code ---*/
2101 __pyx_ptype_8bintrees_7cwalker_cWalker = __Pyx_ImportType("bintrees.cwalker", "cWalker", sizeof(struct __pyx_obj_8bintrees_7cwalker_cWalker), 1); if (unlikely(!__pyx_ptype_8bintrees_7cwalker_cWalker)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2102 __pyx_vtabptr_8bintrees_7cwalker_cWalker = (struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker*)__Pyx_GetVtable(__pyx_ptype_8bintrees_7cwalker_cWalker->tp_dict); if (unlikely(!__pyx_vtabptr_8bintrees_7cwalker_cWalker)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2103 /*--- Variable import code ---*/
2104 /*--- Function import code ---*/
2105 /*--- Execution code ---*/
2107 /* "bintrees\qrbtree.pyx":9
2108 * # License: MIT License
2110 * __all__ = ['cRBTree'] # <<<<<<<<<<<<<<
2112 * from cwalker import cWalker
2114 __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2115 __Pyx_GOTREF(__pyx_t_1);
2116 __Pyx_INCREF(((PyObject *)__pyx_n_s__cRBTree));
2117 PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__cRBTree));
2118 __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cRBTree));
2119 if (PyObject_SetAttr(__pyx_m, __pyx_n_s____all__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2120 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
2122 /* "bintrees\qrbtree.pyx":11
2123 * __all__ = ['cRBTree']
2125 * from cwalker import cWalker # <<<<<<<<<<<<<<
2127 * from cwalker cimport *
2129 __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2130 __Pyx_GOTREF(__pyx_t_1);
2131 __Pyx_INCREF(((PyObject *)__pyx_n_s__cWalker));
2132 PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__cWalker));
2133 __Pyx_GIVEREF(((PyObject *)__pyx_n_s__cWalker));
2134 __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__cwalker), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2135 __Pyx_GOTREF(__pyx_t_2);
2136 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
2137 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
2139 /* "bintrees\qrbtree.pyx":30
2141 * @property
2142 * def count(self): # <<<<<<<<<<<<<<
2143 * return self._count
2146 __pyx_t_2 = __Pyx_GetName((PyObject *)__pyx_ptype_8bintrees_7qrbtree_cRBTree, __pyx_n_s__count); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2147 __Pyx_GOTREF(__pyx_t_2);
2148 __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2149 __Pyx_GOTREF(__pyx_t_1);
2150 PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
2151 __Pyx_GIVEREF(__pyx_t_2);
2152 __pyx_t_2 = 0;
2153 __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2154 __Pyx_GOTREF(__pyx_t_2);
2155 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
2156 if (PyDict_SetItem((PyObject *)__pyx_ptype_8bintrees_7qrbtree_cRBTree->tp_dict, __pyx_n_s__count, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2157 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
2158 PyType_Modified(__pyx_ptype_8bintrees_7qrbtree_cRBTree);
2160 /* "bintrees\qrbtree.pyx":1
2161 * #!/usr/bin/env python # <<<<<<<<<<<<<<
2162 * #coding:utf-8
2163 * # Author: mozman
2165 __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2166 __Pyx_GOTREF(((PyObject *)__pyx_t_2));
2167 if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
2168 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
2169 goto __pyx_L0;
2170 __pyx_L1_error:;
2171 __Pyx_XDECREF(__pyx_t_1);
2172 __Pyx_XDECREF(__pyx_t_2);
2173 if (__pyx_m) {
2174 __Pyx_AddTraceback("init bintrees.qrbtree", __pyx_clineno, __pyx_lineno, __pyx_filename);
2175 Py_DECREF(__pyx_m); __pyx_m = 0;
2176 } else if (!PyErr_Occurred()) {
2177 PyErr_SetString(PyExc_ImportError, "init bintrees.qrbtree");
2179 __pyx_L0:;
2180 __Pyx_RefNannyFinishContext();
2181 #if PY_MAJOR_VERSION < 3
2182 return;
2183 #else
2184 return __pyx_m;
2185 #endif
2188 /* Runtime support code */
2189 #if CYTHON_REFNANNY
2190 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
2191 PyObject *m = NULL, *p = NULL;
2192 void *r = NULL;
2193 m = PyImport_ImportModule((char *)modname);
2194 if (!m) goto end;
2195 p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
2196 if (!p) goto end;
2197 r = PyLong_AsVoidPtr(p);
2198 end:
2199 Py_XDECREF(p);
2200 Py_XDECREF(m);
2201 return (__Pyx_RefNannyAPIStruct *)r;
2203 #endif /* CYTHON_REFNANNY */
2205 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
2206 PyObject *result;
2207 result = PyObject_GetAttr(dict, name);
2208 if (!result) {
2209 if (dict != __pyx_b) {
2210 PyErr_Clear();
2211 result = PyObject_GetAttr(__pyx_b, name);
2213 if (!result) {
2214 PyErr_SetObject(PyExc_NameError, name);
2217 return result;
2220 static void __Pyx_RaiseDoubleKeywordsError(
2221 const char* func_name,
2222 PyObject* kw_name)
2224 PyErr_Format(PyExc_TypeError,
2225 #if PY_MAJOR_VERSION >= 3
2226 "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
2227 #else
2228 "%s() got multiple values for keyword argument '%s'", func_name,
2229 PyString_AsString(kw_name));
2230 #endif
2233 static int __Pyx_ParseOptionalKeywords(
2234 PyObject *kwds,
2235 PyObject **argnames[],
2236 PyObject *kwds2,
2237 PyObject *values[],
2238 Py_ssize_t num_pos_args,
2239 const char* function_name)
2241 PyObject *key = 0, *value = 0;
2242 Py_ssize_t pos = 0;
2243 PyObject*** name;
2244 PyObject*** first_kw_arg = argnames + num_pos_args;
2245 while (PyDict_Next(kwds, &pos, &key, &value)) {
2246 name = first_kw_arg;
2247 while (*name && (**name != key)) name++;
2248 if (*name) {
2249 values[name-argnames] = value;
2250 continue;
2252 name = first_kw_arg;
2253 #if PY_MAJOR_VERSION < 3
2254 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
2255 while (*name) {
2256 if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
2257 && _PyString_Eq(**name, key)) {
2258 values[name-argnames] = value;
2259 break;
2261 name++;
2263 if (*name) continue;
2264 else {
2265 PyObject*** argname = argnames;
2266 while (argname != first_kw_arg) {
2267 if ((**argname == key) || (
2268 (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
2269 && _PyString_Eq(**argname, key))) {
2270 goto arg_passed_twice;
2272 argname++;
2275 } else
2276 #endif
2277 if (likely(PyUnicode_Check(key))) {
2278 while (*name) {
2279 int cmp = (**name == key) ? 0 :
2280 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
2281 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
2282 #endif
2283 PyUnicode_Compare(**name, key);
2284 if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
2285 if (cmp == 0) {
2286 values[name-argnames] = value;
2287 break;
2289 name++;
2291 if (*name) continue;
2292 else {
2293 PyObject*** argname = argnames;
2294 while (argname != first_kw_arg) {
2295 int cmp = (**argname == key) ? 0 :
2296 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
2297 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
2298 #endif
2299 PyUnicode_Compare(**argname, key);
2300 if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
2301 if (cmp == 0) goto arg_passed_twice;
2302 argname++;
2305 } else
2306 goto invalid_keyword_type;
2307 if (kwds2) {
2308 if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
2309 } else {
2310 goto invalid_keyword;
2313 return 0;
2314 arg_passed_twice:
2315 __Pyx_RaiseDoubleKeywordsError(function_name, key);
2316 goto bad;
2317 invalid_keyword_type:
2318 PyErr_Format(PyExc_TypeError,
2319 "%s() keywords must be strings", function_name);
2320 goto bad;
2321 invalid_keyword:
2322 PyErr_Format(PyExc_TypeError,
2323 #if PY_MAJOR_VERSION < 3
2324 "%s() got an unexpected keyword argument '%s'",
2325 function_name, PyString_AsString(key));
2326 #else
2327 "%s() got an unexpected keyword argument '%U'",
2328 function_name, key);
2329 #endif
2330 bad:
2331 return -1;
2334 static void __Pyx_RaiseArgtupleInvalid(
2335 const char* func_name,
2336 int exact,
2337 Py_ssize_t num_min,
2338 Py_ssize_t num_max,
2339 Py_ssize_t num_found)
2341 Py_ssize_t num_expected;
2342 const char *more_or_less;
2343 if (num_found < num_min) {
2344 num_expected = num_min;
2345 more_or_less = "at least";
2346 } else {
2347 num_expected = num_max;
2348 more_or_less = "at most";
2350 if (exact) {
2351 more_or_less = "exactly";
2353 PyErr_Format(PyExc_TypeError,
2354 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
2355 func_name, more_or_less, num_expected,
2356 (num_expected == 1) ? "" : "s", num_found);
2359 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
2360 #if CYTHON_COMPILING_IN_CPYTHON
2361 PyObject *tmp_type, *tmp_value, *tmp_tb;
2362 PyThreadState *tstate = PyThreadState_GET();
2363 tmp_type = tstate->curexc_type;
2364 tmp_value = tstate->curexc_value;
2365 tmp_tb = tstate->curexc_traceback;
2366 tstate->curexc_type = type;
2367 tstate->curexc_value = value;
2368 tstate->curexc_traceback = tb;
2369 Py_XDECREF(tmp_type);
2370 Py_XDECREF(tmp_value);
2371 Py_XDECREF(tmp_tb);
2372 #else
2373 PyErr_Restore(type, value, tb);
2374 #endif
2376 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
2377 #if CYTHON_COMPILING_IN_CPYTHON
2378 PyThreadState *tstate = PyThreadState_GET();
2379 *type = tstate->curexc_type;
2380 *value = tstate->curexc_value;
2381 *tb = tstate->curexc_traceback;
2382 tstate->curexc_type = 0;
2383 tstate->curexc_value = 0;
2384 tstate->curexc_traceback = 0;
2385 #else
2386 PyErr_Fetch(type, value, tb);
2387 #endif
2390 #if PY_MAJOR_VERSION < 3
2391 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
2392 CYTHON_UNUSED PyObject *cause) {
2393 Py_XINCREF(type);
2394 if (!value || value == Py_None)
2395 value = NULL;
2396 else
2397 Py_INCREF(value);
2398 if (!tb || tb == Py_None)
2399 tb = NULL;
2400 else {
2401 Py_INCREF(tb);
2402 if (!PyTraceBack_Check(tb)) {
2403 PyErr_SetString(PyExc_TypeError,
2404 "raise: arg 3 must be a traceback or None");
2405 goto raise_error;
2408 #if PY_VERSION_HEX < 0x02050000
2409 if (PyClass_Check(type)) {
2410 #else
2411 if (PyType_Check(type)) {
2412 #endif
2413 #if CYTHON_COMPILING_IN_PYPY
2414 if (!value) {
2415 Py_INCREF(Py_None);
2416 value = Py_None;
2418 #endif
2419 PyErr_NormalizeException(&type, &value, &tb);
2420 } else {
2421 if (value) {
2422 PyErr_SetString(PyExc_TypeError,
2423 "instance exception may not have a separate value");
2424 goto raise_error;
2426 value = type;
2427 #if PY_VERSION_HEX < 0x02050000
2428 if (PyInstance_Check(type)) {
2429 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2430 Py_INCREF(type);
2432 else {
2433 type = 0;
2434 PyErr_SetString(PyExc_TypeError,
2435 "raise: exception must be an old-style class or instance");
2436 goto raise_error;
2438 #else
2439 type = (PyObject*) Py_TYPE(type);
2440 Py_INCREF(type);
2441 if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
2442 PyErr_SetString(PyExc_TypeError,
2443 "raise: exception class must be a subclass of BaseException");
2444 goto raise_error;
2446 #endif
2448 __Pyx_ErrRestore(type, value, tb);
2449 return;
2450 raise_error:
2451 Py_XDECREF(value);
2452 Py_XDECREF(type);
2453 Py_XDECREF(tb);
2454 return;
2456 #else /* Python 3+ */
2457 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
2458 PyObject* owned_instance = NULL;
2459 if (tb == Py_None) {
2460 tb = 0;
2461 } else if (tb && !PyTraceBack_Check(tb)) {
2462 PyErr_SetString(PyExc_TypeError,
2463 "raise: arg 3 must be a traceback or None");
2464 goto bad;
2466 if (value == Py_None)
2467 value = 0;
2468 if (PyExceptionInstance_Check(type)) {
2469 if (value) {
2470 PyErr_SetString(PyExc_TypeError,
2471 "instance exception may not have a separate value");
2472 goto bad;
2474 value = type;
2475 type = (PyObject*) Py_TYPE(value);
2476 } else if (PyExceptionClass_Check(type)) {
2477 PyObject *args;
2478 if (!value)
2479 args = PyTuple_New(0);
2480 else if (PyTuple_Check(value)) {
2481 Py_INCREF(value);
2482 args = value;
2484 else
2485 args = PyTuple_Pack(1, value);
2486 if (!args)
2487 goto bad;
2488 owned_instance = PyEval_CallObject(type, args);
2489 Py_DECREF(args);
2490 if (!owned_instance)
2491 goto bad;
2492 value = owned_instance;
2493 if (!PyExceptionInstance_Check(value)) {
2494 PyErr_Format(PyExc_TypeError,
2495 "calling %R should have returned an instance of "
2496 "BaseException, not %R",
2497 type, Py_TYPE(value));
2498 goto bad;
2500 } else {
2501 PyErr_SetString(PyExc_TypeError,
2502 "raise: exception class must be a subclass of BaseException");
2503 goto bad;
2505 if (cause && cause != Py_None) {
2506 PyObject *fixed_cause;
2507 if (PyExceptionClass_Check(cause)) {
2508 fixed_cause = PyObject_CallObject(cause, NULL);
2509 if (fixed_cause == NULL)
2510 goto bad;
2512 else if (PyExceptionInstance_Check(cause)) {
2513 fixed_cause = cause;
2514 Py_INCREF(fixed_cause);
2516 else {
2517 PyErr_SetString(PyExc_TypeError,
2518 "exception causes must derive from "
2519 "BaseException");
2520 goto bad;
2522 PyException_SetCause(value, fixed_cause);
2524 PyErr_SetObject(type, value);
2525 if (tb) {
2526 PyThreadState *tstate = PyThreadState_GET();
2527 PyObject* tmp_tb = tstate->curexc_traceback;
2528 if (tb != tmp_tb) {
2529 Py_INCREF(tb);
2530 tstate->curexc_traceback = tb;
2531 Py_XDECREF(tmp_tb);
2534 bad:
2535 Py_XDECREF(owned_instance);
2536 return;
2538 #endif
2540 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) {
2541 PyObject *py_import = 0;
2542 PyObject *empty_list = 0;
2543 PyObject *module = 0;
2544 PyObject *global_dict = 0;
2545 PyObject *empty_dict = 0;
2546 PyObject *list;
2547 py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
2548 if (!py_import)
2549 goto bad;
2550 if (from_list)
2551 list = from_list;
2552 else {
2553 empty_list = PyList_New(0);
2554 if (!empty_list)
2555 goto bad;
2556 list = empty_list;
2558 global_dict = PyModule_GetDict(__pyx_m);
2559 if (!global_dict)
2560 goto bad;
2561 empty_dict = PyDict_New();
2562 if (!empty_dict)
2563 goto bad;
2564 #if PY_VERSION_HEX >= 0x02050000
2566 #if PY_MAJOR_VERSION >= 3
2567 if (level == -1) {
2568 if (strchr(__Pyx_MODULE_NAME, '.')) {
2569 /* try package relative import first */
2570 PyObject *py_level = PyInt_FromLong(1);
2571 if (!py_level)
2572 goto bad;
2573 module = PyObject_CallFunctionObjArgs(py_import,
2574 name, global_dict, empty_dict, list, py_level, NULL);
2575 Py_DECREF(py_level);
2576 if (!module) {
2577 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2578 goto bad;
2579 PyErr_Clear();
2582 level = 0; /* try absolute import on failure */
2584 #endif
2585 if (!module) {
2586 PyObject *py_level = PyInt_FromLong(level);
2587 if (!py_level)
2588 goto bad;
2589 module = PyObject_CallFunctionObjArgs(py_import,
2590 name, global_dict, empty_dict, list, py_level, NULL);
2591 Py_DECREF(py_level);
2594 #else
2595 if (level>0) {
2596 PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
2597 goto bad;
2599 module = PyObject_CallFunctionObjArgs(py_import,
2600 name, global_dict, empty_dict, list, NULL);
2601 #endif
2602 bad:
2603 Py_XDECREF(empty_list);
2604 Py_XDECREF(py_import);
2605 Py_XDECREF(empty_dict);
2606 return module;
2609 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
2610 const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
2611 const int is_unsigned = neg_one > const_zero;
2612 if (sizeof(unsigned char) < sizeof(long)) {
2613 long val = __Pyx_PyInt_AsLong(x);
2614 if (unlikely(val != (long)(unsigned char)val)) {
2615 if (!unlikely(val == -1 && PyErr_Occurred())) {
2616 PyErr_SetString(PyExc_OverflowError,
2617 (is_unsigned && unlikely(val < 0)) ?
2618 "can't convert negative value to unsigned char" :
2619 "value too large to convert to unsigned char");
2621 return (unsigned char)-1;
2623 return (unsigned char)val;
2625 return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
2628 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
2629 const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
2630 const int is_unsigned = neg_one > const_zero;
2631 if (sizeof(unsigned short) < sizeof(long)) {
2632 long val = __Pyx_PyInt_AsLong(x);
2633 if (unlikely(val != (long)(unsigned short)val)) {
2634 if (!unlikely(val == -1 && PyErr_Occurred())) {
2635 PyErr_SetString(PyExc_OverflowError,
2636 (is_unsigned && unlikely(val < 0)) ?
2637 "can't convert negative value to unsigned short" :
2638 "value too large to convert to unsigned short");
2640 return (unsigned short)-1;
2642 return (unsigned short)val;
2644 return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
2647 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
2648 const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
2649 const int is_unsigned = neg_one > const_zero;
2650 if (sizeof(unsigned int) < sizeof(long)) {
2651 long val = __Pyx_PyInt_AsLong(x);
2652 if (unlikely(val != (long)(unsigned int)val)) {
2653 if (!unlikely(val == -1 && PyErr_Occurred())) {
2654 PyErr_SetString(PyExc_OverflowError,
2655 (is_unsigned && unlikely(val < 0)) ?
2656 "can't convert negative value to unsigned int" :
2657 "value too large to convert to unsigned int");
2659 return (unsigned int)-1;
2661 return (unsigned int)val;
2663 return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
2666 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
2667 const char neg_one = (char)-1, const_zero = 0;
2668 const int is_unsigned = neg_one > const_zero;
2669 if (sizeof(char) < sizeof(long)) {
2670 long val = __Pyx_PyInt_AsLong(x);
2671 if (unlikely(val != (long)(char)val)) {
2672 if (!unlikely(val == -1 && PyErr_Occurred())) {
2673 PyErr_SetString(PyExc_OverflowError,
2674 (is_unsigned && unlikely(val < 0)) ?
2675 "can't convert negative value to char" :
2676 "value too large to convert to char");
2678 return (char)-1;
2680 return (char)val;
2682 return (char)__Pyx_PyInt_AsLong(x);
2685 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
2686 const short neg_one = (short)-1, const_zero = 0;
2687 const int is_unsigned = neg_one > const_zero;
2688 if (sizeof(short) < sizeof(long)) {
2689 long val = __Pyx_PyInt_AsLong(x);
2690 if (unlikely(val != (long)(short)val)) {
2691 if (!unlikely(val == -1 && PyErr_Occurred())) {
2692 PyErr_SetString(PyExc_OverflowError,
2693 (is_unsigned && unlikely(val < 0)) ?
2694 "can't convert negative value to short" :
2695 "value too large to convert to short");
2697 return (short)-1;
2699 return (short)val;
2701 return (short)__Pyx_PyInt_AsLong(x);
2704 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
2705 const int neg_one = (int)-1, const_zero = 0;
2706 const int is_unsigned = neg_one > const_zero;
2707 if (sizeof(int) < sizeof(long)) {
2708 long val = __Pyx_PyInt_AsLong(x);
2709 if (unlikely(val != (long)(int)val)) {
2710 if (!unlikely(val == -1 && PyErr_Occurred())) {
2711 PyErr_SetString(PyExc_OverflowError,
2712 (is_unsigned && unlikely(val < 0)) ?
2713 "can't convert negative value to int" :
2714 "value too large to convert to int");
2716 return (int)-1;
2718 return (int)val;
2720 return (int)__Pyx_PyInt_AsLong(x);
2723 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
2724 const signed char neg_one = (signed char)-1, const_zero = 0;
2725 const int is_unsigned = neg_one > const_zero;
2726 if (sizeof(signed char) < sizeof(long)) {
2727 long val = __Pyx_PyInt_AsLong(x);
2728 if (unlikely(val != (long)(signed char)val)) {
2729 if (!unlikely(val == -1 && PyErr_Occurred())) {
2730 PyErr_SetString(PyExc_OverflowError,
2731 (is_unsigned && unlikely(val < 0)) ?
2732 "can't convert negative value to signed char" :
2733 "value too large to convert to signed char");
2735 return (signed char)-1;
2737 return (signed char)val;
2739 return (signed char)__Pyx_PyInt_AsSignedLong(x);
2742 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
2743 const signed short neg_one = (signed short)-1, const_zero = 0;
2744 const int is_unsigned = neg_one > const_zero;
2745 if (sizeof(signed short) < sizeof(long)) {
2746 long val = __Pyx_PyInt_AsLong(x);
2747 if (unlikely(val != (long)(signed short)val)) {
2748 if (!unlikely(val == -1 && PyErr_Occurred())) {
2749 PyErr_SetString(PyExc_OverflowError,
2750 (is_unsigned && unlikely(val < 0)) ?
2751 "can't convert negative value to signed short" :
2752 "value too large to convert to signed short");
2754 return (signed short)-1;
2756 return (signed short)val;
2758 return (signed short)__Pyx_PyInt_AsSignedLong(x);
2761 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
2762 const signed int neg_one = (signed int)-1, const_zero = 0;
2763 const int is_unsigned = neg_one > const_zero;
2764 if (sizeof(signed int) < sizeof(long)) {
2765 long val = __Pyx_PyInt_AsLong(x);
2766 if (unlikely(val != (long)(signed int)val)) {
2767 if (!unlikely(val == -1 && PyErr_Occurred())) {
2768 PyErr_SetString(PyExc_OverflowError,
2769 (is_unsigned && unlikely(val < 0)) ?
2770 "can't convert negative value to signed int" :
2771 "value too large to convert to signed int");
2773 return (signed int)-1;
2775 return (signed int)val;
2777 return (signed int)__Pyx_PyInt_AsSignedLong(x);
2780 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
2781 const int neg_one = (int)-1, const_zero = 0;
2782 const int is_unsigned = neg_one > const_zero;
2783 if (sizeof(int) < sizeof(long)) {
2784 long val = __Pyx_PyInt_AsLong(x);
2785 if (unlikely(val != (long)(int)val)) {
2786 if (!unlikely(val == -1 && PyErr_Occurred())) {
2787 PyErr_SetString(PyExc_OverflowError,
2788 (is_unsigned && unlikely(val < 0)) ?
2789 "can't convert negative value to int" :
2790 "value too large to convert to int");
2792 return (int)-1;
2794 return (int)val;
2796 return (int)__Pyx_PyInt_AsLong(x);
2799 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
2800 const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
2801 const int is_unsigned = neg_one > const_zero;
2802 #if PY_VERSION_HEX < 0x03000000
2803 if (likely(PyInt_Check(x))) {
2804 long val = PyInt_AS_LONG(x);
2805 if (is_unsigned && unlikely(val < 0)) {
2806 PyErr_SetString(PyExc_OverflowError,
2807 "can't convert negative value to unsigned long");
2808 return (unsigned long)-1;
2810 return (unsigned long)val;
2811 } else
2812 #endif
2813 if (likely(PyLong_Check(x))) {
2814 if (is_unsigned) {
2815 if (unlikely(Py_SIZE(x) < 0)) {
2816 PyErr_SetString(PyExc_OverflowError,
2817 "can't convert negative value to unsigned long");
2818 return (unsigned long)-1;
2820 return (unsigned long)PyLong_AsUnsignedLong(x);
2821 } else {
2822 return (unsigned long)PyLong_AsLong(x);
2824 } else {
2825 unsigned long val;
2826 PyObject *tmp = __Pyx_PyNumber_Int(x);
2827 if (!tmp) return (unsigned long)-1;
2828 val = __Pyx_PyInt_AsUnsignedLong(tmp);
2829 Py_DECREF(tmp);
2830 return val;
2834 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
2835 const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
2836 const int is_unsigned = neg_one > const_zero;
2837 #if PY_VERSION_HEX < 0x03000000
2838 if (likely(PyInt_Check(x))) {
2839 long val = PyInt_AS_LONG(x);
2840 if (is_unsigned && unlikely(val < 0)) {
2841 PyErr_SetString(PyExc_OverflowError,
2842 "can't convert negative value to unsigned PY_LONG_LONG");
2843 return (unsigned PY_LONG_LONG)-1;
2845 return (unsigned PY_LONG_LONG)val;
2846 } else
2847 #endif
2848 if (likely(PyLong_Check(x))) {
2849 if (is_unsigned) {
2850 if (unlikely(Py_SIZE(x) < 0)) {
2851 PyErr_SetString(PyExc_OverflowError,
2852 "can't convert negative value to unsigned PY_LONG_LONG");
2853 return (unsigned PY_LONG_LONG)-1;
2855 return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
2856 } else {
2857 return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
2859 } else {
2860 unsigned PY_LONG_LONG val;
2861 PyObject *tmp = __Pyx_PyNumber_Int(x);
2862 if (!tmp) return (unsigned PY_LONG_LONG)-1;
2863 val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
2864 Py_DECREF(tmp);
2865 return val;
2869 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
2870 const long neg_one = (long)-1, const_zero = 0;
2871 const int is_unsigned = neg_one > const_zero;
2872 #if PY_VERSION_HEX < 0x03000000
2873 if (likely(PyInt_Check(x))) {
2874 long val = PyInt_AS_LONG(x);
2875 if (is_unsigned && unlikely(val < 0)) {
2876 PyErr_SetString(PyExc_OverflowError,
2877 "can't convert negative value to long");
2878 return (long)-1;
2880 return (long)val;
2881 } else
2882 #endif
2883 if (likely(PyLong_Check(x))) {
2884 if (is_unsigned) {
2885 if (unlikely(Py_SIZE(x) < 0)) {
2886 PyErr_SetString(PyExc_OverflowError,
2887 "can't convert negative value to long");
2888 return (long)-1;
2890 return (long)PyLong_AsUnsignedLong(x);
2891 } else {
2892 return (long)PyLong_AsLong(x);
2894 } else {
2895 long val;
2896 PyObject *tmp = __Pyx_PyNumber_Int(x);
2897 if (!tmp) return (long)-1;
2898 val = __Pyx_PyInt_AsLong(tmp);
2899 Py_DECREF(tmp);
2900 return val;
2904 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
2905 const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
2906 const int is_unsigned = neg_one > const_zero;
2907 #if PY_VERSION_HEX < 0x03000000
2908 if (likely(PyInt_Check(x))) {
2909 long val = PyInt_AS_LONG(x);
2910 if (is_unsigned && unlikely(val < 0)) {
2911 PyErr_SetString(PyExc_OverflowError,
2912 "can't convert negative value to PY_LONG_LONG");
2913 return (PY_LONG_LONG)-1;
2915 return (PY_LONG_LONG)val;
2916 } else
2917 #endif
2918 if (likely(PyLong_Check(x))) {
2919 if (is_unsigned) {
2920 if (unlikely(Py_SIZE(x) < 0)) {
2921 PyErr_SetString(PyExc_OverflowError,
2922 "can't convert negative value to PY_LONG_LONG");
2923 return (PY_LONG_LONG)-1;
2925 return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
2926 } else {
2927 return (PY_LONG_LONG)PyLong_AsLongLong(x);
2929 } else {
2930 PY_LONG_LONG val;
2931 PyObject *tmp = __Pyx_PyNumber_Int(x);
2932 if (!tmp) return (PY_LONG_LONG)-1;
2933 val = __Pyx_PyInt_AsLongLong(tmp);
2934 Py_DECREF(tmp);
2935 return val;
2939 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
2940 const signed long neg_one = (signed long)-1, const_zero = 0;
2941 const int is_unsigned = neg_one > const_zero;
2942 #if PY_VERSION_HEX < 0x03000000
2943 if (likely(PyInt_Check(x))) {
2944 long val = PyInt_AS_LONG(x);
2945 if (is_unsigned && unlikely(val < 0)) {
2946 PyErr_SetString(PyExc_OverflowError,
2947 "can't convert negative value to signed long");
2948 return (signed long)-1;
2950 return (signed long)val;
2951 } else
2952 #endif
2953 if (likely(PyLong_Check(x))) {
2954 if (is_unsigned) {
2955 if (unlikely(Py_SIZE(x) < 0)) {
2956 PyErr_SetString(PyExc_OverflowError,
2957 "can't convert negative value to signed long");
2958 return (signed long)-1;
2960 return (signed long)PyLong_AsUnsignedLong(x);
2961 } else {
2962 return (signed long)PyLong_AsLong(x);
2964 } else {
2965 signed long val;
2966 PyObject *tmp = __Pyx_PyNumber_Int(x);
2967 if (!tmp) return (signed long)-1;
2968 val = __Pyx_PyInt_AsSignedLong(tmp);
2969 Py_DECREF(tmp);
2970 return val;
2974 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
2975 const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
2976 const int is_unsigned = neg_one > const_zero;
2977 #if PY_VERSION_HEX < 0x03000000
2978 if (likely(PyInt_Check(x))) {
2979 long val = PyInt_AS_LONG(x);
2980 if (is_unsigned && unlikely(val < 0)) {
2981 PyErr_SetString(PyExc_OverflowError,
2982 "can't convert negative value to signed PY_LONG_LONG");
2983 return (signed PY_LONG_LONG)-1;
2985 return (signed PY_LONG_LONG)val;
2986 } else
2987 #endif
2988 if (likely(PyLong_Check(x))) {
2989 if (is_unsigned) {
2990 if (unlikely(Py_SIZE(x) < 0)) {
2991 PyErr_SetString(PyExc_OverflowError,
2992 "can't convert negative value to signed PY_LONG_LONG");
2993 return (signed PY_LONG_LONG)-1;
2995 return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
2996 } else {
2997 return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
2999 } else {
3000 signed PY_LONG_LONG val;
3001 PyObject *tmp = __Pyx_PyNumber_Int(x);
3002 if (!tmp) return (signed PY_LONG_LONG)-1;
3003 val = __Pyx_PyInt_AsSignedLongLong(tmp);
3004 Py_DECREF(tmp);
3005 return val;
3009 static int __Pyx_check_binary_version(void) {
3010 char ctversion[4], rtversion[4];
3011 PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
3012 PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
3013 if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
3014 char message[200];
3015 PyOS_snprintf(message, sizeof(message),
3016 "compiletime version %s of module '%.100s' "
3017 "does not match runtime version %s",
3018 ctversion, __Pyx_MODULE_NAME, rtversion);
3019 #if PY_VERSION_HEX < 0x02050000
3020 return PyErr_Warn(NULL, message);
3021 #else
3022 return PyErr_WarnEx(NULL, message, 1);
3023 #endif
3025 return 0;
3028 #ifndef __PYX_HAVE_RT_ImportModule
3029 #define __PYX_HAVE_RT_ImportModule
3030 static PyObject *__Pyx_ImportModule(const char *name) {
3031 PyObject *py_name = 0;
3032 PyObject *py_module = 0;
3033 py_name = __Pyx_PyIdentifier_FromString(name);
3034 if (!py_name)
3035 goto bad;
3036 py_module = PyImport_Import(py_name);
3037 Py_DECREF(py_name);
3038 return py_module;
3039 bad:
3040 Py_XDECREF(py_name);
3041 return 0;
3043 #endif
3045 #ifndef __PYX_HAVE_RT_ImportType
3046 #define __PYX_HAVE_RT_ImportType
3047 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
3048 size_t size, int strict)
3050 PyObject *py_module = 0;
3051 PyObject *result = 0;
3052 PyObject *py_name = 0;
3053 char warning[200];
3054 py_module = __Pyx_ImportModule(module_name);
3055 if (!py_module)
3056 goto bad;
3057 py_name = __Pyx_PyIdentifier_FromString(class_name);
3058 if (!py_name)
3059 goto bad;
3060 result = PyObject_GetAttr(py_module, py_name);
3061 Py_DECREF(py_name);
3062 py_name = 0;
3063 Py_DECREF(py_module);
3064 py_module = 0;
3065 if (!result)
3066 goto bad;
3067 if (!PyType_Check(result)) {
3068 PyErr_Format(PyExc_TypeError,
3069 "%s.%s is not a type object",
3070 module_name, class_name);
3071 goto bad;
3073 if (!strict && (size_t)((PyTypeObject *)result)->tp_basicsize > size) {
3074 PyOS_snprintf(warning, sizeof(warning),
3075 "%s.%s size changed, may indicate binary incompatibility",
3076 module_name, class_name);
3077 #if PY_VERSION_HEX < 0x02050000
3078 if (PyErr_Warn(NULL, warning) < 0) goto bad;
3079 #else
3080 if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
3081 #endif
3083 else if ((size_t)((PyTypeObject *)result)->tp_basicsize != size) {
3084 PyErr_Format(PyExc_ValueError,
3085 "%s.%s has the wrong size, try recompiling",
3086 module_name, class_name);
3087 goto bad;
3089 return (PyTypeObject *)result;
3090 bad:
3091 Py_XDECREF(py_module);
3092 Py_XDECREF(result);
3093 return NULL;
3095 #endif
3097 static void* __Pyx_GetVtable(PyObject *dict) {
3098 void* ptr;
3099 PyObject *ob = PyMapping_GetItemString(dict, (char *)"__pyx_vtable__");
3100 if (!ob)
3101 goto bad;
3102 #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
3103 ptr = PyCapsule_GetPointer(ob, 0);
3104 #else
3105 ptr = PyCObject_AsVoidPtr(ob);
3106 #endif
3107 if (!ptr && !PyErr_Occurred())
3108 PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
3109 Py_DECREF(ob);
3110 return ptr;
3111 bad:
3112 Py_XDECREF(ob);
3113 return NULL;
3116 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
3117 int start = 0, mid = 0, end = count - 1;
3118 if (end >= 0 && code_line > entries[end].code_line) {
3119 return count;
3121 while (start < end) {
3122 mid = (start + end) / 2;
3123 if (code_line < entries[mid].code_line) {
3124 end = mid;
3125 } else if (code_line > entries[mid].code_line) {
3126 start = mid + 1;
3127 } else {
3128 return mid;
3131 if (code_line <= entries[mid].code_line) {
3132 return mid;
3133 } else {
3134 return mid + 1;
3137 static PyCodeObject *__pyx_find_code_object(int code_line) {
3138 PyCodeObject* code_object;
3139 int pos;
3140 if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
3141 return NULL;
3143 pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
3144 if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
3145 return NULL;
3147 code_object = __pyx_code_cache.entries[pos].code_object;
3148 Py_INCREF(code_object);
3149 return code_object;
3151 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
3152 int pos, i;
3153 __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
3154 if (unlikely(!code_line)) {
3155 return;
3157 if (unlikely(!entries)) {
3158 entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
3159 if (likely(entries)) {
3160 __pyx_code_cache.entries = entries;
3161 __pyx_code_cache.max_count = 64;
3162 __pyx_code_cache.count = 1;
3163 entries[0].code_line = code_line;
3164 entries[0].code_object = code_object;
3165 Py_INCREF(code_object);
3167 return;
3169 pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
3170 if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
3171 PyCodeObject* tmp = entries[pos].code_object;
3172 entries[pos].code_object = code_object;
3173 Py_DECREF(tmp);
3174 return;
3176 if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
3177 int new_max = __pyx_code_cache.max_count + 64;
3178 entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
3179 __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
3180 if (unlikely(!entries)) {
3181 return;
3183 __pyx_code_cache.entries = entries;
3184 __pyx_code_cache.max_count = new_max;
3186 for (i=__pyx_code_cache.count; i>pos; i--) {
3187 entries[i] = entries[i-1];
3189 entries[pos].code_line = code_line;
3190 entries[pos].code_object = code_object;
3191 __pyx_code_cache.count++;
3192 Py_INCREF(code_object);
3195 #include "compile.h"
3196 #include "frameobject.h"
3197 #include "traceback.h"
3198 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
3199 const char *funcname, int c_line,
3200 int py_line, const char *filename) {
3201 PyCodeObject *py_code = 0;
3202 PyObject *py_srcfile = 0;
3203 PyObject *py_funcname = 0;
3204 #if PY_MAJOR_VERSION < 3
3205 py_srcfile = PyString_FromString(filename);
3206 #else
3207 py_srcfile = PyUnicode_FromString(filename);
3208 #endif
3209 if (!py_srcfile) goto bad;
3210 if (c_line) {
3211 #if PY_MAJOR_VERSION < 3
3212 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
3213 #else
3214 py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
3215 #endif
3217 else {
3218 #if PY_MAJOR_VERSION < 3
3219 py_funcname = PyString_FromString(funcname);
3220 #else
3221 py_funcname = PyUnicode_FromString(funcname);
3222 #endif
3224 if (!py_funcname) goto bad;
3225 py_code = __Pyx_PyCode_New(
3226 0, /*int argcount,*/
3227 0, /*int kwonlyargcount,*/
3228 0, /*int nlocals,*/
3229 0, /*int stacksize,*/
3230 0, /*int flags,*/
3231 __pyx_empty_bytes, /*PyObject *code,*/
3232 __pyx_empty_tuple, /*PyObject *consts,*/
3233 __pyx_empty_tuple, /*PyObject *names,*/
3234 __pyx_empty_tuple, /*PyObject *varnames,*/
3235 __pyx_empty_tuple, /*PyObject *freevars,*/
3236 __pyx_empty_tuple, /*PyObject *cellvars,*/
3237 py_srcfile, /*PyObject *filename,*/
3238 py_funcname, /*PyObject *name,*/
3239 py_line, /*int firstlineno,*/
3240 __pyx_empty_bytes /*PyObject *lnotab*/
3242 Py_DECREF(py_srcfile);
3243 Py_DECREF(py_funcname);
3244 return py_code;
3245 bad:
3246 Py_XDECREF(py_srcfile);
3247 Py_XDECREF(py_funcname);
3248 return NULL;
3250 static void __Pyx_AddTraceback(const char *funcname, int c_line,
3251 int py_line, const char *filename) {
3252 PyCodeObject *py_code = 0;
3253 PyObject *py_globals = 0;
3254 PyFrameObject *py_frame = 0;
3255 py_code = __pyx_find_code_object(c_line ? c_line : py_line);
3256 if (!py_code) {
3257 py_code = __Pyx_CreateCodeObjectForTraceback(
3258 funcname, c_line, py_line, filename);
3259 if (!py_code) goto bad;
3260 __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
3262 py_globals = PyModule_GetDict(__pyx_m);
3263 if (!py_globals) goto bad;
3264 py_frame = PyFrame_New(
3265 PyThreadState_GET(), /*PyThreadState *tstate,*/
3266 py_code, /*PyCodeObject *code,*/
3267 py_globals, /*PyObject *globals,*/
3268 0 /*PyObject *locals*/
3270 if (!py_frame) goto bad;
3271 py_frame->f_lineno = py_line;
3272 PyTraceBack_Here(py_frame);
3273 bad:
3274 Py_XDECREF(py_code);
3275 Py_XDECREF(py_frame);
3278 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
3279 while (t->p) {
3280 #if PY_MAJOR_VERSION < 3
3281 if (t->is_unicode) {
3282 *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
3283 } else if (t->intern) {
3284 *t->p = PyString_InternFromString(t->s);
3285 } else {
3286 *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
3288 #else /* Python 3+ has unicode identifiers */
3289 if (t->is_unicode | t->is_str) {
3290 if (t->intern) {
3291 *t->p = PyUnicode_InternFromString(t->s);
3292 } else if (t->encoding) {
3293 *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
3294 } else {
3295 *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
3297 } else {
3298 *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
3300 #endif
3301 if (!*t->p)
3302 return -1;
3303 ++t;
3305 return 0;
3309 /* Type Conversion Functions */
3311 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
3312 int is_true = x == Py_True;
3313 if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
3314 else return PyObject_IsTrue(x);
3317 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
3318 PyNumberMethods *m;
3319 const char *name = NULL;
3320 PyObject *res = NULL;
3321 #if PY_VERSION_HEX < 0x03000000
3322 if (PyInt_Check(x) || PyLong_Check(x))
3323 #else
3324 if (PyLong_Check(x))
3325 #endif
3326 return Py_INCREF(x), x;
3327 m = Py_TYPE(x)->tp_as_number;
3328 #if PY_VERSION_HEX < 0x03000000
3329 if (m && m->nb_int) {
3330 name = "int";
3331 res = PyNumber_Int(x);
3333 else if (m && m->nb_long) {
3334 name = "long";
3335 res = PyNumber_Long(x);
3337 #else
3338 if (m && m->nb_int) {
3339 name = "int";
3340 res = PyNumber_Long(x);
3342 #endif
3343 if (res) {
3344 #if PY_VERSION_HEX < 0x03000000
3345 if (!PyInt_Check(res) && !PyLong_Check(res)) {
3346 #else
3347 if (!PyLong_Check(res)) {
3348 #endif
3349 PyErr_Format(PyExc_TypeError,
3350 "__%s__ returned non-%s (type %.200s)",
3351 name, name, Py_TYPE(res)->tp_name);
3352 Py_DECREF(res);
3353 return NULL;
3356 else if (!PyErr_Occurred()) {
3357 PyErr_SetString(PyExc_TypeError,
3358 "an integer is required");
3360 return res;
3363 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
3364 Py_ssize_t ival;
3365 PyObject* x = PyNumber_Index(b);
3366 if (!x) return -1;
3367 ival = PyInt_AsSsize_t(x);
3368 Py_DECREF(x);
3369 return ival;
3372 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
3373 #if PY_VERSION_HEX < 0x02050000
3374 if (ival <= LONG_MAX)
3375 return PyInt_FromLong((long)ival);
3376 else {
3377 unsigned char *bytes = (unsigned char *) &ival;
3378 int one = 1; int little = (int)*(unsigned char*)&one;
3379 return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
3381 #else
3382 return PyInt_FromSize_t(ival);
3383 #endif
3386 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
3387 unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
3388 if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
3389 return (size_t)-1;
3390 } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
3391 PyErr_SetString(PyExc_OverflowError,
3392 "value too large to convert to size_t");
3393 return (size_t)-1;
3395 return (size_t)val;
3399 #endif /* Py_PYTHON_H */