1 /* Generated by Cython 0.17.4 on Sun Feb 24 19:48:34 2013 */ 2 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 230 231 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 239 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 247 248 #if defined(WIN32) || defined(MS_WINDOWS) 249 #define _USE_MATH_DEFINES 250 #endif 251 #include <math.h> 252 #define __PYX_HAVE__bintrees__cwalker 253 #define __PYX_HAVE_API__bintrees__cwalker 254 #include "ctrees.h" 255 #include "stack.h" 256 #ifdef _OPENMP 257 #include <omp.h> 258 #endif /* _OPENMP */ 259 260 #ifdef PYREX_WITHOUT_ASSERTIONS 261 #define CYTHON_WITHOUT_ASSERTIONS 262 #endif 263 264 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 277 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 292 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*/ 294 295 296 /* Type Conversion Predeclarations */ 297 298 #define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) 299 #define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) 300 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); 305 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*); 309 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)) 316 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__ */ 330 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; 339 340 341 static const char *__pyx_f[] = { 342 "cwalker.pyx", 343 }; 344 345 /*--- Type declarations ---*/ 346 struct __pyx_obj_8bintrees_7cwalker_cWalker; 347 348 /* "bintrees\cwalker.pxd":11 349 * from stack cimport node_stack_t 350 * 351 * cdef class cWalker: # <<<<<<<<<<<<<< 352 * cdef node_t *node 353 * cdef node_t *root 354 */ 355 struct __pyx_obj_8bintrees_7cwalker_cWalker { 356 PyObject_HEAD 357 struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *__pyx_vtab; 358 node_t *node; 359 node_t *root; 360 node_stack_t *stack; 361 }; 362 363 364 365 /* "bintrees\cwalker.pyx":14 366 * from ctrees cimport * 367 * 368 * cdef class cWalker: # <<<<<<<<<<<<<< 369 * def __cinit__(self): 370 * self.root = NULL 371 */ 372 373 struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker { 374 void (*set_tree)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, node_t *); 375 PyObject *(*reset)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch); 376 PyObject *(*push)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch); 377 PyObject *(*pop)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch); 378 }; 379 static struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *__pyx_vtabptr_8bintrees_7cwalker_cWalker; 380 #ifndef CYTHON_REFNANNY 381 #define CYTHON_REFNANNY 0 382 #endif 383 #if CYTHON_REFNANNY 384 typedef struct { 385 void (*INCREF)(void*, PyObject*, int); 386 void (*DECREF)(void*, PyObject*, int); 387 void (*GOTREF)(void*, PyObject*, int); 388 void (*GIVEREF)(void*, PyObject*, int); 389 void* (*SetupContext)(const char*, int, const char*); 390 void (*FinishContext)(void**); 391 } __Pyx_RefNannyAPIStruct; 392 static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; 393 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ 394 #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; 395 #ifdef WITH_THREAD 396 #define __Pyx_RefNannySetupContext(name, acquire_gil) \ 397 if (acquire_gil) { \ 398 PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ 399 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ 400 PyGILState_Release(__pyx_gilstate_save); \ 401 } else { \ 402 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ 403 } 404 #else 405 #define __Pyx_RefNannySetupContext(name, acquire_gil) \ 406 __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) 407 #endif 408 #define __Pyx_RefNannyFinishContext() \ 409 __Pyx_RefNanny->FinishContext(&__pyx_refnanny) 410 #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 411 #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 412 #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 413 #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) 414 #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) 415 #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) 416 #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) 417 #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) 418 #else 419 #define __Pyx_RefNannyDeclarations 420 #define __Pyx_RefNannySetupContext(name, acquire_gil) 421 #define __Pyx_RefNannyFinishContext() 422 #define __Pyx_INCREF(r) Py_INCREF(r) 423 #define __Pyx_DECREF(r) Py_DECREF(r) 424 #define __Pyx_GOTREF(r) 425 #define __Pyx_GIVEREF(r) 426 #define __Pyx_XINCREF(r) Py_XINCREF(r) 427 #define __Pyx_XDECREF(r) Py_XDECREF(r) 428 #define __Pyx_XGOTREF(r) 429 #define __Pyx_XGIVEREF(r) 430 #endif /* CYTHON_REFNANNY */ 431 #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) 432 #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) 433 434 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ 435 436 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, 437 Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ 438 439 static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); /*proto*/ 440 441 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ 442 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ 443 444 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ 445 446 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); 447 448 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); 449 450 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); 451 452 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); 453 454 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); 455 456 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); 457 458 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); 459 460 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); 461 462 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); 463 464 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); 465 466 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); 467 468 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); 469 470 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); 471 472 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); 473 474 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); 475 476 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); 477 478 static void __Pyx_WriteUnraisable(const char *name, int clineno, 479 int lineno, const char *filename); /*proto*/ 480 481 static int __Pyx_check_binary_version(void); 482 483 static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ 484 485 typedef struct { 486 int code_line; 487 PyCodeObject* code_object; 488 } __Pyx_CodeObjectCacheEntry; 489 struct __Pyx_CodeObjectCache { 490 int count; 491 int max_count; 492 __Pyx_CodeObjectCacheEntry* entries; 493 }; 494 static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; 495 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); 496 static PyCodeObject *__pyx_find_code_object(int code_line); 497 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); 498 499 static void __Pyx_AddTraceback(const char *funcname, int c_line, 500 int py_line, const char *filename); /*proto*/ 501 502 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ 503 504 505 /* Module declarations from 'bintrees.ctrees' */ 506 507 /* Module declarations from 'bintrees.stack' */ 508 509 /* Module declarations from 'bintrees.cwalker' */ 510 static PyTypeObject *__pyx_ptype_8bintrees_7cwalker_cWalker = 0; 511 #define __Pyx_MODULE_NAME "bintrees.cwalker" 512 int __pyx_module_is_main_bintrees__cwalker = 0; 513 514 /* Implementation of 'bintrees.cwalker' */ 515 static PyObject *__pyx_builtin_property; 516 static PyObject *__pyx_builtin_IndexError; 517 static PyObject *__pyx_builtin_KeyError; 518 static int __pyx_pf_8bintrees_7cwalker_7cWalker___cinit__(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 519 static void __pyx_pf_8bintrees_7cwalker_7cWalker_2__dealloc__(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 520 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_4reset(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 521 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_6key(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 522 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_8value(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 523 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_10item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 524 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_12is_valid(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 525 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_14goto(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ 526 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_16push(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 527 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_18pop(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 528 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_20stack_is_empty(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 529 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_22goto_leaf(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 530 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_24has_child(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, int __pyx_v_direction); /* proto */ 531 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_26down(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, int __pyx_v_direction); /* proto */ 532 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_28go_left(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 533 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_30go_right(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 534 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_32has_left(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 535 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_34has_right(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self); /* proto */ 536 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_36succ_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ 537 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_38prev_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ 538 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_40floor_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ 539 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_42ceiling_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ 540 static char __pyx_k_1[] = "pop(): stack is empty"; 541 static char __pyx_k__key[] = "key"; 542 static char __pyx_k__pop[] = "pop"; 543 static char __pyx_k__item[] = "item"; 544 static char __pyx_k__push[] = "push"; 545 static char __pyx_k__reset[] = "reset"; 546 static char __pyx_k__value[] = "value"; 547 static char __pyx_k__KeyError[] = "KeyError"; 548 static char __pyx_k____main__[] = "__main__"; 549 static char __pyx_k____test__[] = "__test__"; 550 static char __pyx_k__is_valid[] = "is_valid"; 551 static char __pyx_k__property[] = "property"; 552 static char __pyx_k__IndexError[] = "IndexError"; 553 static PyObject *__pyx_kp_s_1; 554 static PyObject *__pyx_n_s__IndexError; 555 static PyObject *__pyx_n_s__KeyError; 556 static PyObject *__pyx_n_s____main__; 557 static PyObject *__pyx_n_s____test__; 558 static PyObject *__pyx_n_s__is_valid; 559 static PyObject *__pyx_n_s__item; 560 static PyObject *__pyx_n_s__key; 561 static PyObject *__pyx_n_s__pop; 562 static PyObject *__pyx_n_s__property; 563 static PyObject *__pyx_n_s__push; 564 static PyObject *__pyx_n_s__reset; 565 static PyObject *__pyx_n_s__value; 566 static PyObject *__pyx_k_tuple_2; 567 568 /* Python wrapper */ 569 static int __pyx_pw_8bintrees_7cwalker_7cWalker_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ 570 static int __pyx_pw_8bintrees_7cwalker_7cWalker_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { 571 int __pyx_r; 572 __Pyx_RefNannyDeclarations 573 __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); 574 if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { 575 __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} 576 if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1; 577 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker___cinit__(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 578 __Pyx_RefNannyFinishContext(); 579 return __pyx_r; 580 } 581 582 /* "bintrees\cwalker.pyx":15 583 * 584 * cdef class cWalker: 585 * def __cinit__(self): # <<<<<<<<<<<<<< 586 * self.root = NULL 587 * self.node = NULL 588 */ 589 590 static int __pyx_pf_8bintrees_7cwalker_7cWalker___cinit__(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 591 int __pyx_r; 592 __Pyx_RefNannyDeclarations 593 __Pyx_RefNannySetupContext("__cinit__", 0); 594 595 /* "bintrees\cwalker.pyx":16 596 * cdef class cWalker: 597 * def __cinit__(self): 598 * self.root = NULL # <<<<<<<<<<<<<< 599 * self.node = NULL 600 * self.stack = stack_init(MAXSTACK) 601 */ 602 __pyx_v_self->root = NULL; 603 604 /* "bintrees\cwalker.pyx":17 605 * def __cinit__(self): 606 * self.root = NULL 607 * self.node = NULL # <<<<<<<<<<<<<< 608 * self.stack = stack_init(MAXSTACK) 609 * 610 */ 611 __pyx_v_self->node = NULL; 612 613 /* "bintrees\cwalker.pyx":18 614 * self.root = NULL 615 * self.node = NULL 616 * self.stack = stack_init(MAXSTACK) # <<<<<<<<<<<<<< 617 * 618 * def __dealloc__(self): 619 */ 620 __pyx_v_self->stack = stack_init(32); 621 622 __pyx_r = 0; 623 __Pyx_RefNannyFinishContext(); 624 return __pyx_r; 625 } 626 627 /* Python wrapper */ 628 static void __pyx_pw_8bintrees_7cwalker_7cWalker_3__dealloc__(PyObject *__pyx_v_self); /*proto*/ 629 static void __pyx_pw_8bintrees_7cwalker_7cWalker_3__dealloc__(PyObject *__pyx_v_self) { 630 __Pyx_RefNannyDeclarations 631 __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); 632 __pyx_pf_8bintrees_7cwalker_7cWalker_2__dealloc__(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 633 __Pyx_RefNannyFinishContext(); 634 } 635 636 /* "bintrees\cwalker.pyx":20 637 * self.stack = stack_init(MAXSTACK) 638 * 639 * def __dealloc__(self): # <<<<<<<<<<<<<< 640 * stack_delete(self.stack) 641 * 642 */ 643 644 static void __pyx_pf_8bintrees_7cwalker_7cWalker_2__dealloc__(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 645 __Pyx_RefNannyDeclarations 646 __Pyx_RefNannySetupContext("__dealloc__", 0); 647 648 /* "bintrees\cwalker.pyx":21 649 * 650 * def __dealloc__(self): 651 * stack_delete(self.stack) # <<<<<<<<<<<<<< 652 * 653 * cdef void set_tree(self, node_t *root): 654 */ 655 stack_delete(__pyx_v_self->stack); 656 657 __Pyx_RefNannyFinishContext(); 658 } 659 660 /* "bintrees\cwalker.pyx":23 661 * stack_delete(self.stack) 662 * 663 * cdef void set_tree(self, node_t *root): # <<<<<<<<<<<<<< 664 * self.root = root 665 * self.reset() 666 */ 667 668 static void __pyx_f_8bintrees_7cwalker_7cWalker_set_tree(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, node_t *__pyx_v_root) { 669 __Pyx_RefNannyDeclarations 670 PyObject *__pyx_t_1 = NULL; 671 int __pyx_lineno = 0; 672 const char *__pyx_filename = NULL; 673 int __pyx_clineno = 0; 674 __Pyx_RefNannySetupContext("set_tree", 0); 675 676 /* "bintrees\cwalker.pyx":24 677 * 678 * cdef void set_tree(self, node_t *root): 679 * self.root = root # <<<<<<<<<<<<<< 680 * self.reset() 681 * 682 */ 683 __pyx_v_self->root = __pyx_v_root; 684 685 /* "bintrees\cwalker.pyx":25 686 * cdef void set_tree(self, node_t *root): 687 * self.root = root 688 * self.reset() # <<<<<<<<<<<<<< 689 * 690 * cpdef reset(self): 691 */ 692 __pyx_t_1 = ((struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *)__pyx_v_self->__pyx_vtab)->reset(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 693 __Pyx_GOTREF(__pyx_t_1); 694 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 695 696 goto __pyx_L0; 697 __pyx_L1_error:; 698 __Pyx_XDECREF(__pyx_t_1); 699 __Pyx_WriteUnraisable("bintrees.cwalker.cWalker.set_tree", __pyx_clineno, __pyx_lineno, __pyx_filename); 700 __pyx_L0:; 701 __Pyx_RefNannyFinishContext(); 702 } 703 704 /* "bintrees\cwalker.pyx":27 705 * self.reset() 706 * 707 * cpdef reset(self): # <<<<<<<<<<<<<< 708 * stack_reset(self.stack) 709 * self.node = self.root 710 */ 711 712 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_5reset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 713 static PyObject *__pyx_f_8bintrees_7cwalker_7cWalker_reset(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, int __pyx_skip_dispatch) { 714 PyObject *__pyx_r = NULL; 715 __Pyx_RefNannyDeclarations 716 PyObject *__pyx_t_1 = NULL; 717 PyObject *__pyx_t_2 = NULL; 718 node_t *__pyx_t_3; 719 int __pyx_lineno = 0; 720 const char *__pyx_filename = NULL; 721 int __pyx_clineno = 0; 722 __Pyx_RefNannySetupContext("reset", 0); 723 /* Check if called by wrapper */ 724 if (unlikely(__pyx_skip_dispatch)) ; 725 /* Check if overriden in Python */ 726 else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) { 727 __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__reset); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 728 __Pyx_GOTREF(__pyx_t_1); 729 if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_5reset)) { 730 __Pyx_XDECREF(__pyx_r); 731 __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 = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 732 __Pyx_GOTREF(__pyx_t_2); 733 __pyx_r = __pyx_t_2; 734 __pyx_t_2 = 0; 735 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 736 goto __pyx_L0; 737 } 738 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 739 } 740 741 /* "bintrees\cwalker.pyx":28 742 * 743 * cpdef reset(self): 744 * stack_reset(self.stack) # <<<<<<<<<<<<<< 745 * self.node = self.root 746 * 747 */ 748 stack_reset(__pyx_v_self->stack); 749 750 /* "bintrees\cwalker.pyx":29 751 * cpdef reset(self): 752 * stack_reset(self.stack) 753 * self.node = self.root # <<<<<<<<<<<<<< 754 * 755 * @property 756 */ 757 __pyx_t_3 = __pyx_v_self->root; 758 __pyx_v_self->node = __pyx_t_3; 759 760 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 761 goto __pyx_L0; 762 __pyx_L1_error:; 763 __Pyx_XDECREF(__pyx_t_1); 764 __Pyx_XDECREF(__pyx_t_2); 765 __Pyx_AddTraceback("bintrees.cwalker.cWalker.reset", __pyx_clineno, __pyx_lineno, __pyx_filename); 766 __pyx_r = 0; 767 __pyx_L0:; 768 __Pyx_XGIVEREF(__pyx_r); 769 __Pyx_RefNannyFinishContext(); 770 return __pyx_r; 771 } 772 773 /* Python wrapper */ 774 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_5reset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 775 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_5reset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 776 PyObject *__pyx_r = 0; 777 __Pyx_RefNannyDeclarations 778 __Pyx_RefNannySetupContext("reset (wrapper)", 0); 779 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_4reset(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 780 __Pyx_RefNannyFinishContext(); 781 return __pyx_r; 782 } 783 784 /* "bintrees\cwalker.pyx":27 785 * self.reset() 786 * 787 * cpdef reset(self): # <<<<<<<<<<<<<< 788 * stack_reset(self.stack) 789 * self.node = self.root 790 */ 791 792 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_4reset(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 793 PyObject *__pyx_r = NULL; 794 __Pyx_RefNannyDeclarations 795 PyObject *__pyx_t_1 = NULL; 796 int __pyx_lineno = 0; 797 const char *__pyx_filename = NULL; 798 int __pyx_clineno = 0; 799 __Pyx_RefNannySetupContext("reset", 0); 800 __Pyx_XDECREF(__pyx_r); 801 __pyx_t_1 = ((struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *)__pyx_v_self->__pyx_vtab)->reset(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 802 __Pyx_GOTREF(__pyx_t_1); 803 __pyx_r = __pyx_t_1; 804 __pyx_t_1 = 0; 805 goto __pyx_L0; 806 807 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 808 goto __pyx_L0; 809 __pyx_L1_error:; 810 __Pyx_XDECREF(__pyx_t_1); 811 __Pyx_AddTraceback("bintrees.cwalker.cWalker.reset", __pyx_clineno, __pyx_lineno, __pyx_filename); 812 __pyx_r = NULL; 813 __pyx_L0:; 814 __Pyx_XGIVEREF(__pyx_r); 815 __Pyx_RefNannyFinishContext(); 816 return __pyx_r; 817 } 818 819 /* Python wrapper */ 820 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_7key(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 821 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_7key(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 822 PyObject *__pyx_r = 0; 823 __Pyx_RefNannyDeclarations 824 __Pyx_RefNannySetupContext("key (wrapper)", 0); 825 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_6key(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 826 __Pyx_RefNannyFinishContext(); 827 return __pyx_r; 828 } 829 830 /* "bintrees\cwalker.pyx":32 831 * 832 * @property 833 * def key(self): # <<<<<<<<<<<<<< 834 * return <object> self.node.key 835 * 836 */ 837 838 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_6key(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 839 PyObject *__pyx_r = NULL; 840 __Pyx_RefNannyDeclarations 841 __Pyx_RefNannySetupContext("key", 0); 842 843 /* "bintrees\cwalker.pyx":33 844 * @property 845 * def key(self): 846 * return <object> self.node.key # <<<<<<<<<<<<<< 847 * 848 * @property 849 */ 850 __Pyx_XDECREF(__pyx_r); 851 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->key)); 852 __pyx_r = ((PyObject *)__pyx_v_self->node->key); 853 goto __pyx_L0; 854 855 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 856 __pyx_L0:; 857 __Pyx_XGIVEREF(__pyx_r); 858 __Pyx_RefNannyFinishContext(); 859 return __pyx_r; 860 } 861 862 /* Python wrapper */ 863 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_9value(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 864 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_9value(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 865 PyObject *__pyx_r = 0; 866 __Pyx_RefNannyDeclarations 867 __Pyx_RefNannySetupContext("value (wrapper)", 0); 868 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_8value(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 869 __Pyx_RefNannyFinishContext(); 870 return __pyx_r; 871 } 872 873 /* "bintrees\cwalker.pyx":36 874 * 875 * @property 876 * def value(self): # <<<<<<<<<<<<<< 877 * return <object> self.node.value 878 * 879 */ 880 881 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_8value(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 882 PyObject *__pyx_r = NULL; 883 __Pyx_RefNannyDeclarations 884 __Pyx_RefNannySetupContext("value", 0); 885 886 /* "bintrees\cwalker.pyx":37 887 * @property 888 * def value(self): 889 * return <object> self.node.value # <<<<<<<<<<<<<< 890 * 891 * @property 892 */ 893 __Pyx_XDECREF(__pyx_r); 894 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->value)); 895 __pyx_r = ((PyObject *)__pyx_v_self->node->value); 896 goto __pyx_L0; 897 898 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 899 __pyx_L0:; 900 __Pyx_XGIVEREF(__pyx_r); 901 __Pyx_RefNannyFinishContext(); 902 return __pyx_r; 903 } 904 905 /* Python wrapper */ 906 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_11item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 907 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_11item(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 908 PyObject *__pyx_r = 0; 909 __Pyx_RefNannyDeclarations 910 __Pyx_RefNannySetupContext("item (wrapper)", 0); 911 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_10item(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 912 __Pyx_RefNannyFinishContext(); 913 return __pyx_r; 914 } 915 916 /* "bintrees\cwalker.pyx":40 917 * 918 * @property 919 * def item(self): # <<<<<<<<<<<<<< 920 * return (<object>self.node.key, <object>self.node.value) 921 * 922 */ 923 924 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_10item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 925 PyObject *__pyx_r = NULL; 926 __Pyx_RefNannyDeclarations 927 PyObject *__pyx_t_1 = NULL; 928 int __pyx_lineno = 0; 929 const char *__pyx_filename = NULL; 930 int __pyx_clineno = 0; 931 __Pyx_RefNannySetupContext("item", 0); 932 933 /* "bintrees\cwalker.pyx":41 934 * @property 935 * def item(self): 936 * return (<object>self.node.key, <object>self.node.value) # <<<<<<<<<<<<<< 937 * 938 * @property 939 */ 940 __Pyx_XDECREF(__pyx_r); 941 __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 942 __Pyx_GOTREF(__pyx_t_1); 943 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->key)); 944 PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->node->key)); 945 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->key)); 946 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->value)); 947 PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self->node->value)); 948 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->value)); 949 __pyx_r = ((PyObject *)__pyx_t_1); 950 __pyx_t_1 = 0; 951 goto __pyx_L0; 952 953 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 954 goto __pyx_L0; 955 __pyx_L1_error:; 956 __Pyx_XDECREF(__pyx_t_1); 957 __Pyx_AddTraceback("bintrees.cwalker.cWalker.item", __pyx_clineno, __pyx_lineno, __pyx_filename); 958 __pyx_r = NULL; 959 __pyx_L0:; 960 __Pyx_XGIVEREF(__pyx_r); 961 __Pyx_RefNannyFinishContext(); 962 return __pyx_r; 963 } 964 965 /* Python wrapper */ 966 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_13is_valid(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 967 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_13is_valid(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 968 PyObject *__pyx_r = 0; 969 __Pyx_RefNannyDeclarations 970 __Pyx_RefNannySetupContext("is_valid (wrapper)", 0); 971 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_12is_valid(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 972 __Pyx_RefNannyFinishContext(); 973 return __pyx_r; 974 } 975 976 /* "bintrees\cwalker.pyx":44 977 * 978 * @property 979 * def is_valid(self): # <<<<<<<<<<<<<< 980 * return self.node != NULL 981 * 982 */ 983 984 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_12is_valid(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 985 PyObject *__pyx_r = NULL; 986 __Pyx_RefNannyDeclarations 987 PyObject *__pyx_t_1 = NULL; 988 int __pyx_lineno = 0; 989 const char *__pyx_filename = NULL; 990 int __pyx_clineno = 0; 991 __Pyx_RefNannySetupContext("is_valid", 0); 992 993 /* "bintrees\cwalker.pyx":45 994 * @property 995 * def is_valid(self): 996 * return self.node != NULL # <<<<<<<<<<<<<< 997 * 998 * def goto(self, key): 999 */ 1000 __Pyx_XDECREF(__pyx_r); 1001 __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_self->node != NULL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1002 __Pyx_GOTREF(__pyx_t_1); 1003 __pyx_r = __pyx_t_1; 1004 __pyx_t_1 = 0; 1005 goto __pyx_L0; 1006 1007 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1008 goto __pyx_L0; 1009 __pyx_L1_error:; 1010 __Pyx_XDECREF(__pyx_t_1); 1011 __Pyx_AddTraceback("bintrees.cwalker.cWalker.is_valid", __pyx_clineno, __pyx_lineno, __pyx_filename); 1012 __pyx_r = NULL; 1013 __pyx_L0:; 1014 __Pyx_XGIVEREF(__pyx_r); 1015 __Pyx_RefNannyFinishContext(); 1016 return __pyx_r; 1017 } 1018 1019 /* Python wrapper */ 1020 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_15goto(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/ 1021 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_15goto(PyObject *__pyx_v_self, PyObject *__pyx_v_key) { 1022 PyObject *__pyx_r = 0; 1023 __Pyx_RefNannyDeclarations 1024 __Pyx_RefNannySetupContext("goto (wrapper)", 0); 1025 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_14goto(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self), ((PyObject *)__pyx_v_key)); 1026 __Pyx_RefNannyFinishContext(); 1027 return __pyx_r; 1028 } 1029 1030 /* "bintrees\cwalker.pyx":47 1031 * return self.node != NULL 1032 * 1033 * def goto(self, key): # <<<<<<<<<<<<<< 1034 * cdef int cval 1035 * self.node = self.root 1036 */ 1037 1038 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_14goto(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key) { 1039 int __pyx_v_cval; 1040 PyObject *__pyx_r = NULL; 1041 __Pyx_RefNannyDeclarations 1042 node_t *__pyx_t_1; 1043 int __pyx_t_2; 1044 PyObject *__pyx_t_3 = NULL; 1045 int __pyx_lineno = 0; 1046 const char *__pyx_filename = NULL; 1047 int __pyx_clineno = 0; 1048 __Pyx_RefNannySetupContext("goto", 0); 1049 1050 /* "bintrees\cwalker.pyx":49 1051 * def goto(self, key): 1052 * cdef int cval 1053 * self.node = self.root # <<<<<<<<<<<<<< 1054 * while self.node != NULL: 1055 * cval = ct_compare(key, <object> self.node.key) 1056 */ 1057 __pyx_t_1 = __pyx_v_self->root; 1058 __pyx_v_self->node = __pyx_t_1; 1059 1060 /* "bintrees\cwalker.pyx":50 1061 * cdef int cval 1062 * self.node = self.root 1063 * while self.node != NULL: # <<<<<<<<<<<<<< 1064 * cval = ct_compare(key, <object> self.node.key) 1065 * if cval == 0: 1066 */ 1067 while (1) { 1068 __pyx_t_2 = (__pyx_v_self->node != NULL); 1069 if (!__pyx_t_2) break; 1070 1071 /* "bintrees\cwalker.pyx":51 1072 * self.node = self.root 1073 * while self.node != NULL: 1074 * cval = ct_compare(key, <object> self.node.key) # <<<<<<<<<<<<<< 1075 * if cval == 0: 1076 * return True 1077 */ 1078 __pyx_t_3 = ((PyObject *)__pyx_v_self->node->key); 1079 __Pyx_INCREF(__pyx_t_3); 1080 __pyx_v_cval = ct_compare(__pyx_v_key, __pyx_t_3); 1081 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 1082 1083 /* "bintrees\cwalker.pyx":52 1084 * while self.node != NULL: 1085 * cval = ct_compare(key, <object> self.node.key) 1086 * if cval == 0: # <<<<<<<<<<<<<< 1087 * return True 1088 * elif cval < 0: 1089 */ 1090 __pyx_t_2 = (__pyx_v_cval == 0); 1091 if (__pyx_t_2) { 1092 1093 /* "bintrees\cwalker.pyx":53 1094 * cval = ct_compare(key, <object> self.node.key) 1095 * if cval == 0: 1096 * return True # <<<<<<<<<<<<<< 1097 * elif cval < 0: 1098 * self.node = self.node.link[0] 1099 */ 1100 __Pyx_XDECREF(__pyx_r); 1101 __pyx_t_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1102 __Pyx_GOTREF(__pyx_t_3); 1103 __pyx_r = __pyx_t_3; 1104 __pyx_t_3 = 0; 1105 goto __pyx_L0; 1106 goto __pyx_L5; 1107 } 1108 1109 /* "bintrees\cwalker.pyx":54 1110 * if cval == 0: 1111 * return True 1112 * elif cval < 0: # <<<<<<<<<<<<<< 1113 * self.node = self.node.link[0] 1114 * else: 1115 */ 1116 __pyx_t_2 = (__pyx_v_cval < 0); 1117 if (__pyx_t_2) { 1118 1119 /* "bintrees\cwalker.pyx":55 1120 * return True 1121 * elif cval < 0: 1122 * self.node = self.node.link[0] # <<<<<<<<<<<<<< 1123 * else: 1124 * self.node = self.node.link[1] 1125 */ 1126 __pyx_v_self->node = (__pyx_v_self->node->link[0]); 1127 goto __pyx_L5; 1128 } 1129 /*else*/ { 1130 1131 /* "bintrees\cwalker.pyx":57 1132 * self.node = self.node.link[0] 1133 * else: 1134 * self.node = self.node.link[1] # <<<<<<<<<<<<<< 1135 * return False 1136 * 1137 */ 1138 __pyx_v_self->node = (__pyx_v_self->node->link[1]); 1139 } 1140 __pyx_L5:; 1141 } 1142 1143 /* "bintrees\cwalker.pyx":58 1144 * else: 1145 * self.node = self.node.link[1] 1146 * return False # <<<<<<<<<<<<<< 1147 * 1148 * cpdef push(self): 1149 */ 1150 __Pyx_XDECREF(__pyx_r); 1151 __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1152 __Pyx_GOTREF(__pyx_t_3); 1153 __pyx_r = __pyx_t_3; 1154 __pyx_t_3 = 0; 1155 goto __pyx_L0; 1156 1157 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1158 goto __pyx_L0; 1159 __pyx_L1_error:; 1160 __Pyx_XDECREF(__pyx_t_3); 1161 __Pyx_AddTraceback("bintrees.cwalker.cWalker.goto", __pyx_clineno, __pyx_lineno, __pyx_filename); 1162 __pyx_r = NULL; 1163 __pyx_L0:; 1164 __Pyx_XGIVEREF(__pyx_r); 1165 __Pyx_RefNannyFinishContext(); 1166 return __pyx_r; 1167 } 1168 1169 /* "bintrees\cwalker.pyx":60 1170 * return False 1171 * 1172 * cpdef push(self): # <<<<<<<<<<<<<< 1173 * stack_push(self.stack, self.node) 1174 * 1175 */ 1176 1177 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_17push(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1178 static PyObject *__pyx_f_8bintrees_7cwalker_7cWalker_push(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, int __pyx_skip_dispatch) { 1179 PyObject *__pyx_r = NULL; 1180 __Pyx_RefNannyDeclarations 1181 PyObject *__pyx_t_1 = NULL; 1182 PyObject *__pyx_t_2 = NULL; 1183 int __pyx_lineno = 0; 1184 const char *__pyx_filename = NULL; 1185 int __pyx_clineno = 0; 1186 __Pyx_RefNannySetupContext("push", 0); 1187 /* Check if called by wrapper */ 1188 if (unlikely(__pyx_skip_dispatch)) ; 1189 /* Check if overriden in Python */ 1190 else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) { 1191 __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__push); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1192 __Pyx_GOTREF(__pyx_t_1); 1193 if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_17push)) { 1194 __Pyx_XDECREF(__pyx_r); 1195 __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 = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1196 __Pyx_GOTREF(__pyx_t_2); 1197 __pyx_r = __pyx_t_2; 1198 __pyx_t_2 = 0; 1199 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1200 goto __pyx_L0; 1201 } 1202 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1203 } 1204 1205 /* "bintrees\cwalker.pyx":61 1206 * 1207 * cpdef push(self): 1208 * stack_push(self.stack, self.node) # <<<<<<<<<<<<<< 1209 * 1210 * cpdef pop(self): 1211 */ 1212 stack_push(__pyx_v_self->stack, __pyx_v_self->node); 1213 1214 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1215 goto __pyx_L0; 1216 __pyx_L1_error:; 1217 __Pyx_XDECREF(__pyx_t_1); 1218 __Pyx_XDECREF(__pyx_t_2); 1219 __Pyx_AddTraceback("bintrees.cwalker.cWalker.push", __pyx_clineno, __pyx_lineno, __pyx_filename); 1220 __pyx_r = 0; 1221 __pyx_L0:; 1222 __Pyx_XGIVEREF(__pyx_r); 1223 __Pyx_RefNannyFinishContext(); 1224 return __pyx_r; 1225 } 1226 1227 /* Python wrapper */ 1228 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_17push(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1229 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_17push(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1230 PyObject *__pyx_r = 0; 1231 __Pyx_RefNannyDeclarations 1232 __Pyx_RefNannySetupContext("push (wrapper)", 0); 1233 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_16push(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1234 __Pyx_RefNannyFinishContext(); 1235 return __pyx_r; 1236 } 1237 1238 /* "bintrees\cwalker.pyx":60 1239 * return False 1240 * 1241 * cpdef push(self): # <<<<<<<<<<<<<< 1242 * stack_push(self.stack, self.node) 1243 * 1244 */ 1245 1246 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_16push(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1247 PyObject *__pyx_r = NULL; 1248 __Pyx_RefNannyDeclarations 1249 PyObject *__pyx_t_1 = NULL; 1250 int __pyx_lineno = 0; 1251 const char *__pyx_filename = NULL; 1252 int __pyx_clineno = 0; 1253 __Pyx_RefNannySetupContext("push", 0); 1254 __Pyx_XDECREF(__pyx_r); 1255 __pyx_t_1 = ((struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *)__pyx_v_self->__pyx_vtab)->push(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1256 __Pyx_GOTREF(__pyx_t_1); 1257 __pyx_r = __pyx_t_1; 1258 __pyx_t_1 = 0; 1259 goto __pyx_L0; 1260 1261 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1262 goto __pyx_L0; 1263 __pyx_L1_error:; 1264 __Pyx_XDECREF(__pyx_t_1); 1265 __Pyx_AddTraceback("bintrees.cwalker.cWalker.push", __pyx_clineno, __pyx_lineno, __pyx_filename); 1266 __pyx_r = NULL; 1267 __pyx_L0:; 1268 __Pyx_XGIVEREF(__pyx_r); 1269 __Pyx_RefNannyFinishContext(); 1270 return __pyx_r; 1271 } 1272 1273 /* "bintrees\cwalker.pyx":63 1274 * stack_push(self.stack, self.node) 1275 * 1276 * cpdef pop(self): # <<<<<<<<<<<<<< 1277 * if stack_is_empty(self.stack) != 0: 1278 * raise IndexError('pop(): stack is empty') 1279 */ 1280 1281 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_19pop(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1282 static PyObject *__pyx_f_8bintrees_7cwalker_7cWalker_pop(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, int __pyx_skip_dispatch) { 1283 PyObject *__pyx_r = NULL; 1284 __Pyx_RefNannyDeclarations 1285 PyObject *__pyx_t_1 = NULL; 1286 PyObject *__pyx_t_2 = NULL; 1287 int __pyx_t_3; 1288 int __pyx_lineno = 0; 1289 const char *__pyx_filename = NULL; 1290 int __pyx_clineno = 0; 1291 __Pyx_RefNannySetupContext("pop", 0); 1292 /* Check if called by wrapper */ 1293 if (unlikely(__pyx_skip_dispatch)) ; 1294 /* Check if overriden in Python */ 1295 else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) { 1296 __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__pop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1297 __Pyx_GOTREF(__pyx_t_1); 1298 if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_19pop)) { 1299 __Pyx_XDECREF(__pyx_r); 1300 __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 = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1301 __Pyx_GOTREF(__pyx_t_2); 1302 __pyx_r = __pyx_t_2; 1303 __pyx_t_2 = 0; 1304 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1305 goto __pyx_L0; 1306 } 1307 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1308 } 1309 1310 /* "bintrees\cwalker.pyx":64 1311 * 1312 * cpdef pop(self): 1313 * if stack_is_empty(self.stack) != 0: # <<<<<<<<<<<<<< 1314 * raise IndexError('pop(): stack is empty') 1315 * self.node = stack_pop(self.stack) 1316 */ 1317 __pyx_t_3 = (stack_is_empty(__pyx_v_self->stack) != 0); 1318 if (__pyx_t_3) { 1319 1320 /* "bintrees\cwalker.pyx":65 1321 * cpdef pop(self): 1322 * if stack_is_empty(self.stack) != 0: 1323 * raise IndexError('pop(): stack is empty') # <<<<<<<<<<<<<< 1324 * self.node = stack_pop(self.stack) 1325 * 1326 */ 1327 __pyx_t_1 = PyObject_Call(__pyx_builtin_IndexError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1328 __Pyx_GOTREF(__pyx_t_1); 1329 __Pyx_Raise(__pyx_t_1, 0, 0, 0); 1330 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 1331 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1332 goto __pyx_L3; 1333 } 1334 __pyx_L3:; 1335 1336 /* "bintrees\cwalker.pyx":66 1337 * if stack_is_empty(self.stack) != 0: 1338 * raise IndexError('pop(): stack is empty') 1339 * self.node = stack_pop(self.stack) # <<<<<<<<<<<<<< 1340 * 1341 * def stack_is_empty(self): 1342 */ 1343 __pyx_v_self->node = stack_pop(__pyx_v_self->stack); 1344 1345 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1346 goto __pyx_L0; 1347 __pyx_L1_error:; 1348 __Pyx_XDECREF(__pyx_t_1); 1349 __Pyx_XDECREF(__pyx_t_2); 1350 __Pyx_AddTraceback("bintrees.cwalker.cWalker.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); 1351 __pyx_r = 0; 1352 __pyx_L0:; 1353 __Pyx_XGIVEREF(__pyx_r); 1354 __Pyx_RefNannyFinishContext(); 1355 return __pyx_r; 1356 } 1357 1358 /* Python wrapper */ 1359 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_19pop(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1360 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_19pop(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1361 PyObject *__pyx_r = 0; 1362 __Pyx_RefNannyDeclarations 1363 __Pyx_RefNannySetupContext("pop (wrapper)", 0); 1364 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_18pop(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1365 __Pyx_RefNannyFinishContext(); 1366 return __pyx_r; 1367 } 1368 1369 /* "bintrees\cwalker.pyx":63 1370 * stack_push(self.stack, self.node) 1371 * 1372 * cpdef pop(self): # <<<<<<<<<<<<<< 1373 * if stack_is_empty(self.stack) != 0: 1374 * raise IndexError('pop(): stack is empty') 1375 */ 1376 1377 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_18pop(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1378 PyObject *__pyx_r = NULL; 1379 __Pyx_RefNannyDeclarations 1380 PyObject *__pyx_t_1 = NULL; 1381 int __pyx_lineno = 0; 1382 const char *__pyx_filename = NULL; 1383 int __pyx_clineno = 0; 1384 __Pyx_RefNannySetupContext("pop", 0); 1385 __Pyx_XDECREF(__pyx_r); 1386 __pyx_t_1 = ((struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker *)__pyx_v_self->__pyx_vtab)->pop(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1387 __Pyx_GOTREF(__pyx_t_1); 1388 __pyx_r = __pyx_t_1; 1389 __pyx_t_1 = 0; 1390 goto __pyx_L0; 1391 1392 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1393 goto __pyx_L0; 1394 __pyx_L1_error:; 1395 __Pyx_XDECREF(__pyx_t_1); 1396 __Pyx_AddTraceback("bintrees.cwalker.cWalker.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); 1397 __pyx_r = NULL; 1398 __pyx_L0:; 1399 __Pyx_XGIVEREF(__pyx_r); 1400 __Pyx_RefNannyFinishContext(); 1401 return __pyx_r; 1402 } 1403 1404 /* Python wrapper */ 1405 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_21stack_is_empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1406 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_21stack_is_empty(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1407 PyObject *__pyx_r = 0; 1408 __Pyx_RefNannyDeclarations 1409 __Pyx_RefNannySetupContext("stack_is_empty (wrapper)", 0); 1410 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_20stack_is_empty(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1411 __Pyx_RefNannyFinishContext(); 1412 return __pyx_r; 1413 } 1414 1415 /* "bintrees\cwalker.pyx":68 1416 * self.node = stack_pop(self.stack) 1417 * 1418 * def stack_is_empty(self): # <<<<<<<<<<<<<< 1419 * return <bint> stack_is_empty(self.stack) 1420 * 1421 */ 1422 1423 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_20stack_is_empty(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1424 PyObject *__pyx_r = NULL; 1425 __Pyx_RefNannyDeclarations 1426 PyObject *__pyx_t_1 = NULL; 1427 int __pyx_lineno = 0; 1428 const char *__pyx_filename = NULL; 1429 int __pyx_clineno = 0; 1430 __Pyx_RefNannySetupContext("stack_is_empty", 0); 1431 1432 /* "bintrees\cwalker.pyx":69 1433 * 1434 * def stack_is_empty(self): 1435 * return <bint> stack_is_empty(self.stack) # <<<<<<<<<<<<<< 1436 * 1437 * def goto_leaf(self): 1438 */ 1439 __Pyx_XDECREF(__pyx_r); 1440 __pyx_t_1 = __Pyx_PyBool_FromLong(((int)stack_is_empty(__pyx_v_self->stack))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1441 __Pyx_GOTREF(__pyx_t_1); 1442 __pyx_r = __pyx_t_1; 1443 __pyx_t_1 = 0; 1444 goto __pyx_L0; 1445 1446 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1447 goto __pyx_L0; 1448 __pyx_L1_error:; 1449 __Pyx_XDECREF(__pyx_t_1); 1450 __Pyx_AddTraceback("bintrees.cwalker.cWalker.stack_is_empty", __pyx_clineno, __pyx_lineno, __pyx_filename); 1451 __pyx_r = NULL; 1452 __pyx_L0:; 1453 __Pyx_XGIVEREF(__pyx_r); 1454 __Pyx_RefNannyFinishContext(); 1455 return __pyx_r; 1456 } 1457 1458 /* Python wrapper */ 1459 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_23goto_leaf(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1460 static char __pyx_doc_8bintrees_7cwalker_7cWalker_22goto_leaf[] = " get a leaf node "; 1461 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_23goto_leaf(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1462 PyObject *__pyx_r = 0; 1463 __Pyx_RefNannyDeclarations 1464 __Pyx_RefNannySetupContext("goto_leaf (wrapper)", 0); 1465 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_22goto_leaf(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1466 __Pyx_RefNannyFinishContext(); 1467 return __pyx_r; 1468 } 1469 1470 /* "bintrees\cwalker.pyx":71 1471 * return <bint> stack_is_empty(self.stack) 1472 * 1473 * def goto_leaf(self): # <<<<<<<<<<<<<< 1474 * """ get a leaf node """ 1475 * while self.node != NULL: 1476 */ 1477 1478 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_22goto_leaf(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1479 PyObject *__pyx_r = NULL; 1480 __Pyx_RefNannyDeclarations 1481 int __pyx_t_1; 1482 __Pyx_RefNannySetupContext("goto_leaf", 0); 1483 1484 /* "bintrees\cwalker.pyx":73 1485 * def goto_leaf(self): 1486 * """ get a leaf node """ 1487 * while self.node != NULL: # <<<<<<<<<<<<<< 1488 * if self.node.link[0] != NULL: 1489 * self.node = self.node.link[0] 1490 */ 1491 while (1) { 1492 __pyx_t_1 = (__pyx_v_self->node != NULL); 1493 if (!__pyx_t_1) break; 1494 1495 /* "bintrees\cwalker.pyx":74 1496 * """ get a leaf node """ 1497 * while self.node != NULL: 1498 * if self.node.link[0] != NULL: # <<<<<<<<<<<<<< 1499 * self.node = self.node.link[0] 1500 * elif self.node.link[1] != NULL: 1501 */ 1502 __pyx_t_1 = ((__pyx_v_self->node->link[0]) != NULL); 1503 if (__pyx_t_1) { 1504 1505 /* "bintrees\cwalker.pyx":75 1506 * while self.node != NULL: 1507 * if self.node.link[0] != NULL: 1508 * self.node = self.node.link[0] # <<<<<<<<<<<<<< 1509 * elif self.node.link[1] != NULL: 1510 * self.node = self.node.link[1] 1511 */ 1512 __pyx_v_self->node = (__pyx_v_self->node->link[0]); 1513 goto __pyx_L5; 1514 } 1515 1516 /* "bintrees\cwalker.pyx":76 1517 * if self.node.link[0] != NULL: 1518 * self.node = self.node.link[0] 1519 * elif self.node.link[1] != NULL: # <<<<<<<<<<<<<< 1520 * self.node = self.node.link[1] 1521 * else: 1522 */ 1523 __pyx_t_1 = ((__pyx_v_self->node->link[1]) != NULL); 1524 if (__pyx_t_1) { 1525 1526 /* "bintrees\cwalker.pyx":77 1527 * self.node = self.node.link[0] 1528 * elif self.node.link[1] != NULL: 1529 * self.node = self.node.link[1] # <<<<<<<<<<<<<< 1530 * else: 1531 * return 1532 */ 1533 __pyx_v_self->node = (__pyx_v_self->node->link[1]); 1534 goto __pyx_L5; 1535 } 1536 /*else*/ { 1537 1538 /* "bintrees\cwalker.pyx":79 1539 * self.node = self.node.link[1] 1540 * else: 1541 * return # <<<<<<<<<<<<<< 1542 * 1543 * def has_child(self, int direction): 1544 */ 1545 __Pyx_XDECREF(__pyx_r); 1546 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1547 goto __pyx_L0; 1548 } 1549 __pyx_L5:; 1550 } 1551 1552 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1553 __pyx_L0:; 1554 __Pyx_XGIVEREF(__pyx_r); 1555 __Pyx_RefNannyFinishContext(); 1556 return __pyx_r; 1557 } 1558 1559 /* Python wrapper */ 1560 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_25has_child(PyObject *__pyx_v_self, PyObject *__pyx_arg_direction); /*proto*/ 1561 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_25has_child(PyObject *__pyx_v_self, PyObject *__pyx_arg_direction) { 1562 int __pyx_v_direction; 1563 PyObject *__pyx_r = 0; 1564 __Pyx_RefNannyDeclarations 1565 __Pyx_RefNannySetupContext("has_child (wrapper)", 0); 1566 assert(__pyx_arg_direction); { 1567 __pyx_v_direction = __Pyx_PyInt_AsInt(__pyx_arg_direction); if (unlikely((__pyx_v_direction == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} 1568 } 1569 goto __pyx_L4_argument_unpacking_done; 1570 __pyx_L3_error:; 1571 __Pyx_AddTraceback("bintrees.cwalker.cWalker.has_child", __pyx_clineno, __pyx_lineno, __pyx_filename); 1572 __Pyx_RefNannyFinishContext(); 1573 return NULL; 1574 __pyx_L4_argument_unpacking_done:; 1575 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_24has_child(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self), ((int)__pyx_v_direction)); 1576 __Pyx_RefNannyFinishContext(); 1577 return __pyx_r; 1578 } 1579 1580 /* "bintrees\cwalker.pyx":81 1581 * return 1582 * 1583 * def has_child(self, int direction): # <<<<<<<<<<<<<< 1584 * return self.node.link[direction] != NULL 1585 * 1586 */ 1587 1588 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_24has_child(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, int __pyx_v_direction) { 1589 PyObject *__pyx_r = NULL; 1590 __Pyx_RefNannyDeclarations 1591 PyObject *__pyx_t_1 = NULL; 1592 int __pyx_lineno = 0; 1593 const char *__pyx_filename = NULL; 1594 int __pyx_clineno = 0; 1595 __Pyx_RefNannySetupContext("has_child", 0); 1596 1597 /* "bintrees\cwalker.pyx":82 1598 * 1599 * def has_child(self, int direction): 1600 * return self.node.link[direction] != NULL # <<<<<<<<<<<<<< 1601 * 1602 * def down(self, int direction): 1603 */ 1604 __Pyx_XDECREF(__pyx_r); 1605 __pyx_t_1 = __Pyx_PyBool_FromLong(((__pyx_v_self->node->link[__pyx_v_direction]) != NULL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1606 __Pyx_GOTREF(__pyx_t_1); 1607 __pyx_r = __pyx_t_1; 1608 __pyx_t_1 = 0; 1609 goto __pyx_L0; 1610 1611 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1612 goto __pyx_L0; 1613 __pyx_L1_error:; 1614 __Pyx_XDECREF(__pyx_t_1); 1615 __Pyx_AddTraceback("bintrees.cwalker.cWalker.has_child", __pyx_clineno, __pyx_lineno, __pyx_filename); 1616 __pyx_r = NULL; 1617 __pyx_L0:; 1618 __Pyx_XGIVEREF(__pyx_r); 1619 __Pyx_RefNannyFinishContext(); 1620 return __pyx_r; 1621 } 1622 1623 /* Python wrapper */ 1624 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_27down(PyObject *__pyx_v_self, PyObject *__pyx_arg_direction); /*proto*/ 1625 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_27down(PyObject *__pyx_v_self, PyObject *__pyx_arg_direction) { 1626 int __pyx_v_direction; 1627 PyObject *__pyx_r = 0; 1628 __Pyx_RefNannyDeclarations 1629 __Pyx_RefNannySetupContext("down (wrapper)", 0); 1630 assert(__pyx_arg_direction); { 1631 __pyx_v_direction = __Pyx_PyInt_AsInt(__pyx_arg_direction); if (unlikely((__pyx_v_direction == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} 1632 } 1633 goto __pyx_L4_argument_unpacking_done; 1634 __pyx_L3_error:; 1635 __Pyx_AddTraceback("bintrees.cwalker.cWalker.down", __pyx_clineno, __pyx_lineno, __pyx_filename); 1636 __Pyx_RefNannyFinishContext(); 1637 return NULL; 1638 __pyx_L4_argument_unpacking_done:; 1639 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_26down(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self), ((int)__pyx_v_direction)); 1640 __Pyx_RefNannyFinishContext(); 1641 return __pyx_r; 1642 } 1643 1644 /* "bintrees\cwalker.pyx":84 1645 * return self.node.link[direction] != NULL 1646 * 1647 * def down(self, int direction): # <<<<<<<<<<<<<< 1648 * self.node = self.node.link[direction] 1649 * 1650 */ 1651 1652 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_26down(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, int __pyx_v_direction) { 1653 PyObject *__pyx_r = NULL; 1654 __Pyx_RefNannyDeclarations 1655 __Pyx_RefNannySetupContext("down", 0); 1656 1657 /* "bintrees\cwalker.pyx":85 1658 * 1659 * def down(self, int direction): 1660 * self.node = self.node.link[direction] # <<<<<<<<<<<<<< 1661 * 1662 * def go_left(self): 1663 */ 1664 __pyx_v_self->node = (__pyx_v_self->node->link[__pyx_v_direction]); 1665 1666 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1667 __Pyx_XGIVEREF(__pyx_r); 1668 __Pyx_RefNannyFinishContext(); 1669 return __pyx_r; 1670 } 1671 1672 /* Python wrapper */ 1673 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_29go_left(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1674 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_29go_left(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1675 PyObject *__pyx_r = 0; 1676 __Pyx_RefNannyDeclarations 1677 __Pyx_RefNannySetupContext("go_left (wrapper)", 0); 1678 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_28go_left(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1679 __Pyx_RefNannyFinishContext(); 1680 return __pyx_r; 1681 } 1682 1683 /* "bintrees\cwalker.pyx":87 1684 * self.node = self.node.link[direction] 1685 * 1686 * def go_left(self): # <<<<<<<<<<<<<< 1687 * self.node = self.node.link[0] 1688 * 1689 */ 1690 1691 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_28go_left(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1692 PyObject *__pyx_r = NULL; 1693 __Pyx_RefNannyDeclarations 1694 __Pyx_RefNannySetupContext("go_left", 0); 1695 1696 /* "bintrees\cwalker.pyx":88 1697 * 1698 * def go_left(self): 1699 * self.node = self.node.link[0] # <<<<<<<<<<<<<< 1700 * 1701 * def go_right(self): 1702 */ 1703 __pyx_v_self->node = (__pyx_v_self->node->link[0]); 1704 1705 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1706 __Pyx_XGIVEREF(__pyx_r); 1707 __Pyx_RefNannyFinishContext(); 1708 return __pyx_r; 1709 } 1710 1711 /* Python wrapper */ 1712 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_31go_right(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1713 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_31go_right(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1714 PyObject *__pyx_r = 0; 1715 __Pyx_RefNannyDeclarations 1716 __Pyx_RefNannySetupContext("go_right (wrapper)", 0); 1717 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_30go_right(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1718 __Pyx_RefNannyFinishContext(); 1719 return __pyx_r; 1720 } 1721 1722 /* "bintrees\cwalker.pyx":90 1723 * self.node = self.node.link[0] 1724 * 1725 * def go_right(self): # <<<<<<<<<<<<<< 1726 * self.node = self.node.link[1] 1727 * 1728 */ 1729 1730 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_30go_right(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1731 PyObject *__pyx_r = NULL; 1732 __Pyx_RefNannyDeclarations 1733 __Pyx_RefNannySetupContext("go_right", 0); 1734 1735 /* "bintrees\cwalker.pyx":91 1736 * 1737 * def go_right(self): 1738 * self.node = self.node.link[1] # <<<<<<<<<<<<<< 1739 * 1740 * def has_left(self): 1741 */ 1742 __pyx_v_self->node = (__pyx_v_self->node->link[1]); 1743 1744 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1745 __Pyx_XGIVEREF(__pyx_r); 1746 __Pyx_RefNannyFinishContext(); 1747 return __pyx_r; 1748 } 1749 1750 /* Python wrapper */ 1751 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_33has_left(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1752 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_33has_left(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1753 PyObject *__pyx_r = 0; 1754 __Pyx_RefNannyDeclarations 1755 __Pyx_RefNannySetupContext("has_left (wrapper)", 0); 1756 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_32has_left(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1757 __Pyx_RefNannyFinishContext(); 1758 return __pyx_r; 1759 } 1760 1761 /* "bintrees\cwalker.pyx":93 1762 * self.node = self.node.link[1] 1763 * 1764 * def has_left(self): # <<<<<<<<<<<<<< 1765 * return self.node.link[0] != NULL 1766 * 1767 */ 1768 1769 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_32has_left(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1770 PyObject *__pyx_r = NULL; 1771 __Pyx_RefNannyDeclarations 1772 PyObject *__pyx_t_1 = NULL; 1773 int __pyx_lineno = 0; 1774 const char *__pyx_filename = NULL; 1775 int __pyx_clineno = 0; 1776 __Pyx_RefNannySetupContext("has_left", 0); 1777 1778 /* "bintrees\cwalker.pyx":94 1779 * 1780 * def has_left(self): 1781 * return self.node.link[0] != NULL # <<<<<<<<<<<<<< 1782 * 1783 * def has_right(self): 1784 */ 1785 __Pyx_XDECREF(__pyx_r); 1786 __pyx_t_1 = __Pyx_PyBool_FromLong(((__pyx_v_self->node->link[0]) != NULL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1787 __Pyx_GOTREF(__pyx_t_1); 1788 __pyx_r = __pyx_t_1; 1789 __pyx_t_1 = 0; 1790 goto __pyx_L0; 1791 1792 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1793 goto __pyx_L0; 1794 __pyx_L1_error:; 1795 __Pyx_XDECREF(__pyx_t_1); 1796 __Pyx_AddTraceback("bintrees.cwalker.cWalker.has_left", __pyx_clineno, __pyx_lineno, __pyx_filename); 1797 __pyx_r = NULL; 1798 __pyx_L0:; 1799 __Pyx_XGIVEREF(__pyx_r); 1800 __Pyx_RefNannyFinishContext(); 1801 return __pyx_r; 1802 } 1803 1804 /* Python wrapper */ 1805 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_35has_right(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ 1806 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_35has_right(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { 1807 PyObject *__pyx_r = 0; 1808 __Pyx_RefNannyDeclarations 1809 __Pyx_RefNannySetupContext("has_right (wrapper)", 0); 1810 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_34has_right(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self)); 1811 __Pyx_RefNannyFinishContext(); 1812 return __pyx_r; 1813 } 1814 1815 /* "bintrees\cwalker.pyx":96 1816 * return self.node.link[0] != NULL 1817 * 1818 * def has_right(self): # <<<<<<<<<<<<<< 1819 * return self.node.link[1] != NULL 1820 * 1821 */ 1822 1823 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_34has_right(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self) { 1824 PyObject *__pyx_r = NULL; 1825 __Pyx_RefNannyDeclarations 1826 PyObject *__pyx_t_1 = NULL; 1827 int __pyx_lineno = 0; 1828 const char *__pyx_filename = NULL; 1829 int __pyx_clineno = 0; 1830 __Pyx_RefNannySetupContext("has_right", 0); 1831 1832 /* "bintrees\cwalker.pyx":97 1833 * 1834 * def has_right(self): 1835 * return self.node.link[1] != NULL # <<<<<<<<<<<<<< 1836 * 1837 * def succ_item(self, key): 1838 */ 1839 __Pyx_XDECREF(__pyx_r); 1840 __pyx_t_1 = __Pyx_PyBool_FromLong(((__pyx_v_self->node->link[1]) != NULL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1841 __Pyx_GOTREF(__pyx_t_1); 1842 __pyx_r = __pyx_t_1; 1843 __pyx_t_1 = 0; 1844 goto __pyx_L0; 1845 1846 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1847 goto __pyx_L0; 1848 __pyx_L1_error:; 1849 __Pyx_XDECREF(__pyx_t_1); 1850 __Pyx_AddTraceback("bintrees.cwalker.cWalker.has_right", __pyx_clineno, __pyx_lineno, __pyx_filename); 1851 __pyx_r = NULL; 1852 __pyx_L0:; 1853 __Pyx_XGIVEREF(__pyx_r); 1854 __Pyx_RefNannyFinishContext(); 1855 return __pyx_r; 1856 } 1857 1858 /* Python wrapper */ 1859 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_37succ_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/ 1860 static char __pyx_doc_8bintrees_7cwalker_7cWalker_36succ_item[] = " Get successor (k,v) pair of key, raises KeyError if key is max key\n or key does not exist.\n "; 1861 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_37succ_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key) { 1862 PyObject *__pyx_r = 0; 1863 __Pyx_RefNannyDeclarations 1864 __Pyx_RefNannySetupContext("succ_item (wrapper)", 0); 1865 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_36succ_item(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self), ((PyObject *)__pyx_v_key)); 1866 __Pyx_RefNannyFinishContext(); 1867 return __pyx_r; 1868 } 1869 1870 /* "bintrees\cwalker.pyx":99 1871 * return self.node.link[1] != NULL 1872 * 1873 * def succ_item(self, key): # <<<<<<<<<<<<<< 1874 * """ Get successor (k,v) pair of key, raises KeyError if key is max key 1875 * or key does not exist. 1876 */ 1877 1878 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_36succ_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key) { 1879 PyObject *__pyx_r = NULL; 1880 __Pyx_RefNannyDeclarations 1881 int __pyx_t_1; 1882 PyObject *__pyx_t_2 = NULL; 1883 PyObject *__pyx_t_3 = NULL; 1884 int __pyx_lineno = 0; 1885 const char *__pyx_filename = NULL; 1886 int __pyx_clineno = 0; 1887 __Pyx_RefNannySetupContext("succ_item", 0); 1888 1889 /* "bintrees\cwalker.pyx":103 1890 * or key does not exist. 1891 * """ 1892 * self.node = ct_succ_node(self.root, key) # <<<<<<<<<<<<<< 1893 * if self.node == NULL: # given key is biggest in tree 1894 * raise KeyError(str(key)) 1895 */ 1896 __pyx_v_self->node = ct_succ_node(__pyx_v_self->root, __pyx_v_key); 1897 1898 /* "bintrees\cwalker.pyx":104 1899 * """ 1900 * self.node = ct_succ_node(self.root, key) 1901 * if self.node == NULL: # given key is biggest in tree # <<<<<<<<<<<<<< 1902 * raise KeyError(str(key)) 1903 * return (<object> self.node.key, <object> self.node.value) 1904 */ 1905 __pyx_t_1 = (__pyx_v_self->node == NULL); 1906 if (__pyx_t_1) { 1907 1908 /* "bintrees\cwalker.pyx":105 1909 * self.node = ct_succ_node(self.root, key) 1910 * if self.node == NULL: # given key is biggest in tree 1911 * raise KeyError(str(key)) # <<<<<<<<<<<<<< 1912 * return (<object> self.node.key, <object> self.node.value) 1913 * 1914 */ 1915 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1916 __Pyx_GOTREF(__pyx_t_2); 1917 __Pyx_INCREF(__pyx_v_key); 1918 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); 1919 __Pyx_GIVEREF(__pyx_v_key); 1920 __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 = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1921 __Pyx_GOTREF(__pyx_t_3); 1922 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 1923 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1924 __Pyx_GOTREF(__pyx_t_2); 1925 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); 1926 __Pyx_GIVEREF(__pyx_t_3); 1927 __pyx_t_3 = 0; 1928 __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 = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1929 __Pyx_GOTREF(__pyx_t_3); 1930 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 1931 __Pyx_Raise(__pyx_t_3, 0, 0, 0); 1932 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 1933 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1934 goto __pyx_L3; 1935 } 1936 __pyx_L3:; 1937 1938 /* "bintrees\cwalker.pyx":106 1939 * if self.node == NULL: # given key is biggest in tree 1940 * raise KeyError(str(key)) 1941 * return (<object> self.node.key, <object> self.node.value) # <<<<<<<<<<<<<< 1942 * 1943 * def prev_item(self, key): 1944 */ 1945 __Pyx_XDECREF(__pyx_r); 1946 __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 1947 __Pyx_GOTREF(__pyx_t_3); 1948 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->key)); 1949 PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self->node->key)); 1950 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->key)); 1951 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->value)); 1952 PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self->node->value)); 1953 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->value)); 1954 __pyx_r = ((PyObject *)__pyx_t_3); 1955 __pyx_t_3 = 0; 1956 goto __pyx_L0; 1957 1958 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 1959 goto __pyx_L0; 1960 __pyx_L1_error:; 1961 __Pyx_XDECREF(__pyx_t_2); 1962 __Pyx_XDECREF(__pyx_t_3); 1963 __Pyx_AddTraceback("bintrees.cwalker.cWalker.succ_item", __pyx_clineno, __pyx_lineno, __pyx_filename); 1964 __pyx_r = NULL; 1965 __pyx_L0:; 1966 __Pyx_XGIVEREF(__pyx_r); 1967 __Pyx_RefNannyFinishContext(); 1968 return __pyx_r; 1969 } 1970 1971 /* Python wrapper */ 1972 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_39prev_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/ 1973 static char __pyx_doc_8bintrees_7cwalker_7cWalker_38prev_item[] = " Get predecessor (k,v) pair of key, raises KeyError if key is min key\n or key does not exist.\n "; 1974 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_39prev_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key) { 1975 PyObject *__pyx_r = 0; 1976 __Pyx_RefNannyDeclarations 1977 __Pyx_RefNannySetupContext("prev_item (wrapper)", 0); 1978 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_38prev_item(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self), ((PyObject *)__pyx_v_key)); 1979 __Pyx_RefNannyFinishContext(); 1980 return __pyx_r; 1981 } 1982 1983 /* "bintrees\cwalker.pyx":108 1984 * return (<object> self.node.key, <object> self.node.value) 1985 * 1986 * def prev_item(self, key): # <<<<<<<<<<<<<< 1987 * """ Get predecessor (k,v) pair of key, raises KeyError if key is min key 1988 * or key does not exist. 1989 */ 1990 1991 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_38prev_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key) { 1992 PyObject *__pyx_r = NULL; 1993 __Pyx_RefNannyDeclarations 1994 int __pyx_t_1; 1995 PyObject *__pyx_t_2 = NULL; 1996 PyObject *__pyx_t_3 = NULL; 1997 int __pyx_lineno = 0; 1998 const char *__pyx_filename = NULL; 1999 int __pyx_clineno = 0; 2000 __Pyx_RefNannySetupContext("prev_item", 0); 2001 2002 /* "bintrees\cwalker.pyx":112 2003 * or key does not exist. 2004 * """ 2005 * self.node = ct_prev_node(self.root, key) # <<<<<<<<<<<<<< 2006 * if self.node == NULL: # given key is smallest in tree 2007 * raise KeyError(str(key)) 2008 */ 2009 __pyx_v_self->node = ct_prev_node(__pyx_v_self->root, __pyx_v_key); 2010 2011 /* "bintrees\cwalker.pyx":113 2012 * """ 2013 * self.node = ct_prev_node(self.root, key) 2014 * if self.node == NULL: # given key is smallest in tree # <<<<<<<<<<<<<< 2015 * raise KeyError(str(key)) 2016 * return (<object> self.node.key, <object> self.node.value) 2017 */ 2018 __pyx_t_1 = (__pyx_v_self->node == NULL); 2019 if (__pyx_t_1) { 2020 2021 /* "bintrees\cwalker.pyx":114 2022 * self.node = ct_prev_node(self.root, key) 2023 * if self.node == NULL: # given key is smallest in tree 2024 * raise KeyError(str(key)) # <<<<<<<<<<<<<< 2025 * return (<object> self.node.key, <object> self.node.value) 2026 * 2027 */ 2028 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2029 __Pyx_GOTREF(__pyx_t_2); 2030 __Pyx_INCREF(__pyx_v_key); 2031 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); 2032 __Pyx_GIVEREF(__pyx_v_key); 2033 __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 = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2034 __Pyx_GOTREF(__pyx_t_3); 2035 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2036 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2037 __Pyx_GOTREF(__pyx_t_2); 2038 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); 2039 __Pyx_GIVEREF(__pyx_t_3); 2040 __pyx_t_3 = 0; 2041 __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 = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2042 __Pyx_GOTREF(__pyx_t_3); 2043 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2044 __Pyx_Raise(__pyx_t_3, 0, 0, 0); 2045 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 2046 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2047 goto __pyx_L3; 2048 } 2049 __pyx_L3:; 2050 2051 /* "bintrees\cwalker.pyx":115 2052 * if self.node == NULL: # given key is smallest in tree 2053 * raise KeyError(str(key)) 2054 * return (<object> self.node.key, <object> self.node.value) # <<<<<<<<<<<<<< 2055 * 2056 * def floor_item(self, key): 2057 */ 2058 __Pyx_XDECREF(__pyx_r); 2059 __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2060 __Pyx_GOTREF(__pyx_t_3); 2061 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->key)); 2062 PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self->node->key)); 2063 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->key)); 2064 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->value)); 2065 PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self->node->value)); 2066 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->value)); 2067 __pyx_r = ((PyObject *)__pyx_t_3); 2068 __pyx_t_3 = 0; 2069 goto __pyx_L0; 2070 2071 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 2072 goto __pyx_L0; 2073 __pyx_L1_error:; 2074 __Pyx_XDECREF(__pyx_t_2); 2075 __Pyx_XDECREF(__pyx_t_3); 2076 __Pyx_AddTraceback("bintrees.cwalker.cWalker.prev_item", __pyx_clineno, __pyx_lineno, __pyx_filename); 2077 __pyx_r = NULL; 2078 __pyx_L0:; 2079 __Pyx_XGIVEREF(__pyx_r); 2080 __Pyx_RefNannyFinishContext(); 2081 return __pyx_r; 2082 } 2083 2084 /* Python wrapper */ 2085 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_41floor_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/ 2086 static char __pyx_doc_8bintrees_7cwalker_7cWalker_40floor_item[] = " Get the element (k,v) pair associated with the greatest key less\n than or equal to the given key, raises KeyError if there is no such key.\n "; 2087 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_41floor_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key) { 2088 PyObject *__pyx_r = 0; 2089 __Pyx_RefNannyDeclarations 2090 __Pyx_RefNannySetupContext("floor_item (wrapper)", 0); 2091 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_40floor_item(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self), ((PyObject *)__pyx_v_key)); 2092 __Pyx_RefNannyFinishContext(); 2093 return __pyx_r; 2094 } 2095 2096 /* "bintrees\cwalker.pyx":117 2097 * return (<object> self.node.key, <object> self.node.value) 2098 * 2099 * def floor_item(self, key): # <<<<<<<<<<<<<< 2100 * """ Get the element (k,v) pair associated with the greatest key less 2101 * than or equal to the given key, raises KeyError if there is no such key. 2102 */ 2103 2104 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_40floor_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key) { 2105 PyObject *__pyx_r = NULL; 2106 __Pyx_RefNannyDeclarations 2107 int __pyx_t_1; 2108 PyObject *__pyx_t_2 = NULL; 2109 PyObject *__pyx_t_3 = NULL; 2110 int __pyx_lineno = 0; 2111 const char *__pyx_filename = NULL; 2112 int __pyx_clineno = 0; 2113 __Pyx_RefNannySetupContext("floor_item", 0); 2114 2115 /* "bintrees\cwalker.pyx":121 2116 * than or equal to the given key, raises KeyError if there is no such key. 2117 * """ 2118 * self.node = ct_floor_node(self.root, key) # <<<<<<<<<<<<<< 2119 * if self.node == NULL: # given key is smaller than min-key in tree 2120 * raise KeyError(str(key)) 2121 */ 2122 __pyx_v_self->node = ct_floor_node(__pyx_v_self->root, __pyx_v_key); 2123 2124 /* "bintrees\cwalker.pyx":122 2125 * """ 2126 * self.node = ct_floor_node(self.root, key) 2127 * if self.node == NULL: # given key is smaller than min-key in tree # <<<<<<<<<<<<<< 2128 * raise KeyError(str(key)) 2129 * return (<object> self.node.key, <object> self.node.value) 2130 */ 2131 __pyx_t_1 = (__pyx_v_self->node == NULL); 2132 if (__pyx_t_1) { 2133 2134 /* "bintrees\cwalker.pyx":123 2135 * self.node = ct_floor_node(self.root, key) 2136 * if self.node == NULL: # given key is smaller than min-key in tree 2137 * raise KeyError(str(key)) # <<<<<<<<<<<<<< 2138 * return (<object> self.node.key, <object> self.node.value) 2139 * 2140 */ 2141 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2142 __Pyx_GOTREF(__pyx_t_2); 2143 __Pyx_INCREF(__pyx_v_key); 2144 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); 2145 __Pyx_GIVEREF(__pyx_v_key); 2146 __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 = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2147 __Pyx_GOTREF(__pyx_t_3); 2148 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2149 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2150 __Pyx_GOTREF(__pyx_t_2); 2151 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); 2152 __Pyx_GIVEREF(__pyx_t_3); 2153 __pyx_t_3 = 0; 2154 __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 = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2155 __Pyx_GOTREF(__pyx_t_3); 2156 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2157 __Pyx_Raise(__pyx_t_3, 0, 0, 0); 2158 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 2159 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2160 goto __pyx_L3; 2161 } 2162 __pyx_L3:; 2163 2164 /* "bintrees\cwalker.pyx":124 2165 * if self.node == NULL: # given key is smaller than min-key in tree 2166 * raise KeyError(str(key)) 2167 * return (<object> self.node.key, <object> self.node.value) # <<<<<<<<<<<<<< 2168 * 2169 * def ceiling_item(self, key): 2170 */ 2171 __Pyx_XDECREF(__pyx_r); 2172 __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2173 __Pyx_GOTREF(__pyx_t_3); 2174 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->key)); 2175 PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self->node->key)); 2176 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->key)); 2177 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->value)); 2178 PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self->node->value)); 2179 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->value)); 2180 __pyx_r = ((PyObject *)__pyx_t_3); 2181 __pyx_t_3 = 0; 2182 goto __pyx_L0; 2183 2184 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 2185 goto __pyx_L0; 2186 __pyx_L1_error:; 2187 __Pyx_XDECREF(__pyx_t_2); 2188 __Pyx_XDECREF(__pyx_t_3); 2189 __Pyx_AddTraceback("bintrees.cwalker.cWalker.floor_item", __pyx_clineno, __pyx_lineno, __pyx_filename); 2190 __pyx_r = NULL; 2191 __pyx_L0:; 2192 __Pyx_XGIVEREF(__pyx_r); 2193 __Pyx_RefNannyFinishContext(); 2194 return __pyx_r; 2195 } 2196 2197 /* Python wrapper */ 2198 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_43ceiling_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/ 2199 static char __pyx_doc_8bintrees_7cwalker_7cWalker_42ceiling_item[] = " Get the element (k,v) pair associated with the smallest key greater\n than or equal to the given key, raises KeyError if there is no such key.\n "; 2200 static PyObject *__pyx_pw_8bintrees_7cwalker_7cWalker_43ceiling_item(PyObject *__pyx_v_self, PyObject *__pyx_v_key) { 2201 PyObject *__pyx_r = 0; 2202 __Pyx_RefNannyDeclarations 2203 __Pyx_RefNannySetupContext("ceiling_item (wrapper)", 0); 2204 __pyx_r = __pyx_pf_8bintrees_7cwalker_7cWalker_42ceiling_item(((struct __pyx_obj_8bintrees_7cwalker_cWalker *)__pyx_v_self), ((PyObject *)__pyx_v_key)); 2205 __Pyx_RefNannyFinishContext(); 2206 return __pyx_r; 2207 } 2208 2209 /* "bintrees\cwalker.pyx":126 2210 * return (<object> self.node.key, <object> self.node.value) 2211 * 2212 * def ceiling_item(self, key): # <<<<<<<<<<<<<< 2213 * """ Get the element (k,v) pair associated with the smallest key greater 2214 * than or equal to the given key, raises KeyError if there is no such key. 2215 */ 2216 2217 static PyObject *__pyx_pf_8bintrees_7cwalker_7cWalker_42ceiling_item(struct __pyx_obj_8bintrees_7cwalker_cWalker *__pyx_v_self, PyObject *__pyx_v_key) { 2218 PyObject *__pyx_r = NULL; 2219 __Pyx_RefNannyDeclarations 2220 int __pyx_t_1; 2221 PyObject *__pyx_t_2 = NULL; 2222 PyObject *__pyx_t_3 = NULL; 2223 int __pyx_lineno = 0; 2224 const char *__pyx_filename = NULL; 2225 int __pyx_clineno = 0; 2226 __Pyx_RefNannySetupContext("ceiling_item", 0); 2227 2228 /* "bintrees\cwalker.pyx":130 2229 * than or equal to the given key, raises KeyError if there is no such key. 2230 * """ 2231 * self.node = ct_ceiling_node(self.root, key) # <<<<<<<<<<<<<< 2232 * if self.node == NULL: # given key is greater than max-key in tree 2233 * raise KeyError(str(key)) 2234 */ 2235 __pyx_v_self->node = ct_ceiling_node(__pyx_v_self->root, __pyx_v_key); 2236 2237 /* "bintrees\cwalker.pyx":131 2238 * """ 2239 * self.node = ct_ceiling_node(self.root, key) 2240 * if self.node == NULL: # given key is greater than max-key in tree # <<<<<<<<<<<<<< 2241 * raise KeyError(str(key)) 2242 * return (<object> self.node.key, <object> self.node.value) 2243 */ 2244 __pyx_t_1 = (__pyx_v_self->node == NULL); 2245 if (__pyx_t_1) { 2246 2247 /* "bintrees\cwalker.pyx":132 2248 * self.node = ct_ceiling_node(self.root, key) 2249 * if self.node == NULL: # given key is greater than max-key in tree 2250 * raise KeyError(str(key)) # <<<<<<<<<<<<<< 2251 * return (<object> self.node.key, <object> self.node.value) 2252 */ 2253 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2254 __Pyx_GOTREF(__pyx_t_2); 2255 __Pyx_INCREF(__pyx_v_key); 2256 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); 2257 __Pyx_GIVEREF(__pyx_v_key); 2258 __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 = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2259 __Pyx_GOTREF(__pyx_t_3); 2260 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2261 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2262 __Pyx_GOTREF(__pyx_t_2); 2263 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); 2264 __Pyx_GIVEREF(__pyx_t_3); 2265 __pyx_t_3 = 0; 2266 __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 = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2267 __Pyx_GOTREF(__pyx_t_3); 2268 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2269 __Pyx_Raise(__pyx_t_3, 0, 0, 0); 2270 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; 2271 {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2272 goto __pyx_L3; 2273 } 2274 __pyx_L3:; 2275 2276 /* "bintrees\cwalker.pyx":133 2277 * if self.node == NULL: # given key is greater than max-key in tree 2278 * raise KeyError(str(key)) 2279 * return (<object> self.node.key, <object> self.node.value) # <<<<<<<<<<<<<< 2280 */ 2281 __Pyx_XDECREF(__pyx_r); 2282 __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2283 __Pyx_GOTREF(__pyx_t_3); 2284 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->key)); 2285 PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self->node->key)); 2286 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->key)); 2287 __Pyx_INCREF(((PyObject *)__pyx_v_self->node->value)); 2288 PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self->node->value)); 2289 __Pyx_GIVEREF(((PyObject *)__pyx_v_self->node->value)); 2290 __pyx_r = ((PyObject *)__pyx_t_3); 2291 __pyx_t_3 = 0; 2292 goto __pyx_L0; 2293 2294 __pyx_r = Py_None; __Pyx_INCREF(Py_None); 2295 goto __pyx_L0; 2296 __pyx_L1_error:; 2297 __Pyx_XDECREF(__pyx_t_2); 2298 __Pyx_XDECREF(__pyx_t_3); 2299 __Pyx_AddTraceback("bintrees.cwalker.cWalker.ceiling_item", __pyx_clineno, __pyx_lineno, __pyx_filename); 2300 __pyx_r = NULL; 2301 __pyx_L0:; 2302 __Pyx_XGIVEREF(__pyx_r); 2303 __Pyx_RefNannyFinishContext(); 2304 return __pyx_r; 2305 } 2306 static struct __pyx_vtabstruct_8bintrees_7cwalker_cWalker __pyx_vtable_8bintrees_7cwalker_cWalker; 2307 2308 static PyObject *__pyx_tp_new_8bintrees_7cwalker_cWalker(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { 2309 struct __pyx_obj_8bintrees_7cwalker_cWalker *p; 2310 PyObject *o = (*t->tp_alloc)(t, 0); 2311 if (!o) return 0; 2312 p = ((struct __pyx_obj_8bintrees_7cwalker_cWalker *)o); 2313 p->__pyx_vtab = __pyx_vtabptr_8bintrees_7cwalker_cWalker; 2314 if (__pyx_pw_8bintrees_7cwalker_7cWalker_1__cinit__(o, __pyx_empty_tuple, NULL) < 0) { 2315 Py_DECREF(o); o = 0; 2316 } 2317 return o; 2318 } 2319 2320 static void __pyx_tp_dealloc_8bintrees_7cwalker_cWalker(PyObject *o) { 2321 { 2322 PyObject *etype, *eval, *etb; 2323 PyErr_Fetch(&etype, &eval, &etb); 2324 ++Py_REFCNT(o); 2325 __pyx_pw_8bintrees_7cwalker_7cWalker_3__dealloc__(o); 2326 if (PyErr_Occurred()) PyErr_WriteUnraisable(o); 2327 --Py_REFCNT(o); 2328 PyErr_Restore(etype, eval, etb); 2329 } 2330 (*Py_TYPE(o)->tp_free)(o); 2331 } 2332 2333 static PyMethodDef __pyx_methods_8bintrees_7cwalker_cWalker[] = { 2334 {__Pyx_NAMESTR("reset"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_5reset, METH_NOARGS, __Pyx_DOCSTR(0)}, 2335 {__Pyx_NAMESTR("key"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_7key, METH_NOARGS, __Pyx_DOCSTR(0)}, 2336 {__Pyx_NAMESTR("value"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_9value, METH_NOARGS, __Pyx_DOCSTR(0)}, 2337 {__Pyx_NAMESTR("item"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_11item, METH_NOARGS, __Pyx_DOCSTR(0)}, 2338 {__Pyx_NAMESTR("is_valid"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_13is_valid, METH_NOARGS, __Pyx_DOCSTR(0)}, 2339 {__Pyx_NAMESTR("goto"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_15goto, METH_O, __Pyx_DOCSTR(0)}, 2340 {__Pyx_NAMESTR("push"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_17push, METH_NOARGS, __Pyx_DOCSTR(0)}, 2341 {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_19pop, METH_NOARGS, __Pyx_DOCSTR(0)}, 2342 {__Pyx_NAMESTR("stack_is_empty"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_21stack_is_empty, METH_NOARGS, __Pyx_DOCSTR(0)}, 2343 {__Pyx_NAMESTR("goto_leaf"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_23goto_leaf, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_8bintrees_7cwalker_7cWalker_22goto_leaf)}, 2344 {__Pyx_NAMESTR("has_child"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_25has_child, METH_O, __Pyx_DOCSTR(0)}, 2345 {__Pyx_NAMESTR("down"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_27down, METH_O, __Pyx_DOCSTR(0)}, 2346 {__Pyx_NAMESTR("go_left"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_29go_left, METH_NOARGS, __Pyx_DOCSTR(0)}, 2347 {__Pyx_NAMESTR("go_right"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_31go_right, METH_NOARGS, __Pyx_DOCSTR(0)}, 2348 {__Pyx_NAMESTR("has_left"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_33has_left, METH_NOARGS, __Pyx_DOCSTR(0)}, 2349 {__Pyx_NAMESTR("has_right"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_35has_right, METH_NOARGS, __Pyx_DOCSTR(0)}, 2350 {__Pyx_NAMESTR("succ_item"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_37succ_item, METH_O, __Pyx_DOCSTR(__pyx_doc_8bintrees_7cwalker_7cWalker_36succ_item)}, 2351 {__Pyx_NAMESTR("prev_item"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_39prev_item, METH_O, __Pyx_DOCSTR(__pyx_doc_8bintrees_7cwalker_7cWalker_38prev_item)}, 2352 {__Pyx_NAMESTR("floor_item"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_41floor_item, METH_O, __Pyx_DOCSTR(__pyx_doc_8bintrees_7cwalker_7cWalker_40floor_item)}, 2353 {__Pyx_NAMESTR("ceiling_item"), (PyCFunction)__pyx_pw_8bintrees_7cwalker_7cWalker_43ceiling_item, METH_O, __Pyx_DOCSTR(__pyx_doc_8bintrees_7cwalker_7cWalker_42ceiling_item)}, 2354 {0, 0, 0, 0} 2355 }; 2356 2357 static PyNumberMethods __pyx_tp_as_number_cWalker = { 2358 0, /*nb_add*/ 2359 0, /*nb_subtract*/ 2360 0, /*nb_multiply*/ 2361 #if PY_MAJOR_VERSION < 3 2362 0, /*nb_divide*/ 2363 #endif 2364 0, /*nb_remainder*/ 2365 0, /*nb_divmod*/ 2366 0, /*nb_power*/ 2367 0, /*nb_negative*/ 2368 0, /*nb_positive*/ 2369 0, /*nb_absolute*/ 2370 0, /*nb_nonzero*/ 2371 0, /*nb_invert*/ 2372 0, /*nb_lshift*/ 2373 0, /*nb_rshift*/ 2374 0, /*nb_and*/ 2375 0, /*nb_xor*/ 2376 0, /*nb_or*/ 2377 #if PY_MAJOR_VERSION < 3 2378 0, /*nb_coerce*/ 2379 #endif 2380 0, /*nb_int*/ 2381 #if PY_MAJOR_VERSION < 3 2382 0, /*nb_long*/ 2383 #else 2384 0, /*reserved*/ 2385 #endif 2386 0, /*nb_float*/ 2387 #if PY_MAJOR_VERSION < 3 2388 0, /*nb_oct*/ 2389 #endif 2390 #if PY_MAJOR_VERSION < 3 2391 0, /*nb_hex*/ 2392 #endif 2393 0, /*nb_inplace_add*/ 2394 0, /*nb_inplace_subtract*/ 2395 0, /*nb_inplace_multiply*/ 2396 #if PY_MAJOR_VERSION < 3 2397 0, /*nb_inplace_divide*/ 2398 #endif 2399 0, /*nb_inplace_remainder*/ 2400 0, /*nb_inplace_power*/ 2401 0, /*nb_inplace_lshift*/ 2402 0, /*nb_inplace_rshift*/ 2403 0, /*nb_inplace_and*/ 2404 0, /*nb_inplace_xor*/ 2405 0, /*nb_inplace_or*/ 2406 0, /*nb_floor_divide*/ 2407 0, /*nb_true_divide*/ 2408 0, /*nb_inplace_floor_divide*/ 2409 0, /*nb_inplace_true_divide*/ 2410 #if PY_VERSION_HEX >= 0x02050000 2411 0, /*nb_index*/ 2412 #endif 2413 }; 2414 2415 static PySequenceMethods __pyx_tp_as_sequence_cWalker = { 2416 0, /*sq_length*/ 2417 0, /*sq_concat*/ 2418 0, /*sq_repeat*/ 2419 0, /*sq_item*/ 2420 0, /*sq_slice*/ 2421 0, /*sq_ass_item*/ 2422 0, /*sq_ass_slice*/ 2423 0, /*sq_contains*/ 2424 0, /*sq_inplace_concat*/ 2425 0, /*sq_inplace_repeat*/ 2426 }; 2427 2428 static PyMappingMethods __pyx_tp_as_mapping_cWalker = { 2429 0, /*mp_length*/ 2430 0, /*mp_subscript*/ 2431 0, /*mp_ass_subscript*/ 2432 }; 2433 2434 static PyBufferProcs __pyx_tp_as_buffer_cWalker = { 2435 #if PY_MAJOR_VERSION < 3 2436 0, /*bf_getreadbuffer*/ 2437 #endif 2438 #if PY_MAJOR_VERSION < 3 2439 0, /*bf_getwritebuffer*/ 2440 #endif 2441 #if PY_MAJOR_VERSION < 3 2442 0, /*bf_getsegcount*/ 2443 #endif 2444 #if PY_MAJOR_VERSION < 3 2445 0, /*bf_getcharbuffer*/ 2446 #endif 2447 #if PY_VERSION_HEX >= 0x02060000 2448 0, /*bf_getbuffer*/ 2449 #endif 2450 #if PY_VERSION_HEX >= 0x02060000 2451 0, /*bf_releasebuffer*/ 2452 #endif 2453 }; 2454 2455 static PyTypeObject __pyx_type_8bintrees_7cwalker_cWalker = { 2456 PyVarObject_HEAD_INIT(0, 0) 2457 __Pyx_NAMESTR("bintrees.cwalker.cWalker"), /*tp_name*/ 2458 sizeof(struct __pyx_obj_8bintrees_7cwalker_cWalker), /*tp_basicsize*/ 2459 0, /*tp_itemsize*/ 2460 __pyx_tp_dealloc_8bintrees_7cwalker_cWalker, /*tp_dealloc*/ 2461 0, /*tp_print*/ 2462 0, /*tp_getattr*/ 2463 0, /*tp_setattr*/ 2464 #if PY_MAJOR_VERSION < 3 2465 0, /*tp_compare*/ 2466 #else 2467 0, /*reserved*/ 2468 #endif 2469 0, /*tp_repr*/ 2470 &__pyx_tp_as_number_cWalker, /*tp_as_number*/ 2471 &__pyx_tp_as_sequence_cWalker, /*tp_as_sequence*/ 2472 &__pyx_tp_as_mapping_cWalker, /*tp_as_mapping*/ 2473 0, /*tp_hash*/ 2474 0, /*tp_call*/ 2475 0, /*tp_str*/ 2476 0, /*tp_getattro*/ 2477 0, /*tp_setattro*/ 2478 &__pyx_tp_as_buffer_cWalker, /*tp_as_buffer*/ 2479 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ 2480 0, /*tp_doc*/ 2481 0, /*tp_traverse*/ 2482 0, /*tp_clear*/ 2483 0, /*tp_richcompare*/ 2484 0, /*tp_weaklistoffset*/ 2485 0, /*tp_iter*/ 2486 0, /*tp_iternext*/ 2487 __pyx_methods_8bintrees_7cwalker_cWalker, /*tp_methods*/ 2488 0, /*tp_members*/ 2489 0, /*tp_getset*/ 2490 0, /*tp_base*/ 2491 0, /*tp_dict*/ 2492 0, /*tp_descr_get*/ 2493 0, /*tp_descr_set*/ 2494 0, /*tp_dictoffset*/ 2495 0, /*tp_init*/ 2496 0, /*tp_alloc*/ 2497 __pyx_tp_new_8bintrees_7cwalker_cWalker, /*tp_new*/ 2498 0, /*tp_free*/ 2499 0, /*tp_is_gc*/ 2500 0, /*tp_bases*/ 2501 0, /*tp_mro*/ 2502 0, /*tp_cache*/ 2503 0, /*tp_subclasses*/ 2504 0, /*tp_weaklist*/ 2505 0, /*tp_del*/ 2506 #if PY_VERSION_HEX >= 0x02060000 2507 0, /*tp_version_tag*/ 2508 #endif 2509 }; 2510 2511 static PyMethodDef __pyx_methods[] = { 2512 {0, 0, 0, 0} 2513 }; 2514 2515 #if PY_MAJOR_VERSION >= 3 2516 static struct PyModuleDef __pyx_moduledef = { 2517 PyModuleDef_HEAD_INIT, 2518 __Pyx_NAMESTR("cwalker"), 2519 0, /* m_doc */ 2520 -1, /* m_size */ 2521 __pyx_methods /* m_methods */, 2522 NULL, /* m_reload */ 2523 NULL, /* m_traverse */ 2524 NULL, /* m_clear */ 2525 NULL /* m_free */ 2526 }; 2527 #endif 2528 2529 static __Pyx_StringTabEntry __pyx_string_tab[] = { 2530 {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, 2531 {&__pyx_n_s__IndexError, __pyx_k__IndexError, sizeof(__pyx_k__IndexError), 0, 0, 1, 1}, 2532 {&__pyx_n_s__KeyError, __pyx_k__KeyError, sizeof(__pyx_k__KeyError), 0, 0, 1, 1}, 2533 {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, 2534 {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, 2535 {&__pyx_n_s__is_valid, __pyx_k__is_valid, sizeof(__pyx_k__is_valid), 0, 0, 1, 1}, 2536 {&__pyx_n_s__item, __pyx_k__item, sizeof(__pyx_k__item), 0, 0, 1, 1}, 2537 {&__pyx_n_s__key, __pyx_k__key, sizeof(__pyx_k__key), 0, 0, 1, 1}, 2538 {&__pyx_n_s__pop, __pyx_k__pop, sizeof(__pyx_k__pop), 0, 0, 1, 1}, 2539 {&__pyx_n_s__property, __pyx_k__property, sizeof(__pyx_k__property), 0, 0, 1, 1}, 2540 {&__pyx_n_s__push, __pyx_k__push, sizeof(__pyx_k__push), 0, 0, 1, 1}, 2541 {&__pyx_n_s__reset, __pyx_k__reset, sizeof(__pyx_k__reset), 0, 0, 1, 1}, 2542 {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1}, 2543 {0, 0, 0, 0, 0, 0, 0} 2544 }; 2545 static int __Pyx_InitCachedBuiltins(void) { 2546 __pyx_builtin_property = __Pyx_GetName(__pyx_b, __pyx_n_s__property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2547 __pyx_builtin_IndexError = __Pyx_GetName(__pyx_b, __pyx_n_s__IndexError); if (!__pyx_builtin_IndexError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2548 __pyx_builtin_KeyError = __Pyx_GetName(__pyx_b, __pyx_n_s__KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2549 return 0; 2550 __pyx_L1_error:; 2551 return -1; 2552 } 2553 2554 static int __Pyx_InitCachedConstants(void) { 2555 __Pyx_RefNannyDeclarations 2556 __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); 2557 2558 /* "bintrees\cwalker.pyx":65 2559 * cpdef pop(self): 2560 * if stack_is_empty(self.stack) != 0: 2561 * raise IndexError('pop(): stack is empty') # <<<<<<<<<<<<<< 2562 * self.node = stack_pop(self.stack) 2563 * 2564 */ 2565 __pyx_k_tuple_2 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2566 __Pyx_GOTREF(__pyx_k_tuple_2); 2567 __Pyx_INCREF(((PyObject *)__pyx_kp_s_1)); 2568 PyTuple_SET_ITEM(__pyx_k_tuple_2, 0, ((PyObject *)__pyx_kp_s_1)); 2569 __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1)); 2570 __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2)); 2571 __Pyx_RefNannyFinishContext(); 2572 return 0; 2573 __pyx_L1_error:; 2574 __Pyx_RefNannyFinishContext(); 2575 return -1; 2576 } 2577 2578 static int __Pyx_InitGlobals(void) { 2579 if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; 2580 return 0; 2581 __pyx_L1_error:; 2582 return -1; 2583 } 2584 2585 #if PY_MAJOR_VERSION < 3 2586 PyMODINIT_FUNC initcwalker(void); /*proto*/ 2587 PyMODINIT_FUNC initcwalker(void) 2588 #else 2589 PyMODINIT_FUNC PyInit_cwalker(void); /*proto*/ 2590 PyMODINIT_FUNC PyInit_cwalker(void) 2591 #endif 2592 { 2593 PyObject *__pyx_t_1 = NULL; 2594 PyObject *__pyx_t_2 = NULL; 2595 __Pyx_RefNannyDeclarations 2596 #if CYTHON_REFNANNY 2597 __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); 2598 if (!__Pyx_RefNanny) { 2599 PyErr_Clear(); 2600 __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); 2601 if (!__Pyx_RefNanny) 2602 Py_FatalError("failed to import 'refnanny' module"); 2603 } 2604 #endif 2605 __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_cwalker(void)", 0); 2606 if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2607 __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;} 2608 __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;} 2609 #ifdef __Pyx_CyFunction_USED 2610 if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2611 #endif 2612 #ifdef __Pyx_FusedFunction_USED 2613 if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2614 #endif 2615 #ifdef __Pyx_Generator_USED 2616 if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2617 #endif 2618 /*--- Library function declarations ---*/ 2619 /*--- Threads initialization code ---*/ 2620 #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS 2621 #ifdef WITH_THREAD /* Python build with threading support? */ 2622 PyEval_InitThreads(); 2623 #endif 2624 #endif 2625 /*--- Module creation code ---*/ 2626 #if PY_MAJOR_VERSION < 3 2627 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("cwalker"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); 2628 #else 2629 __pyx_m = PyModule_Create(&__pyx_moduledef); 2630 #endif 2631 if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2632 #if PY_MAJOR_VERSION >= 3 2633 { 2634 PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2635 if (!PyDict_GetItemString(modules, "bintrees.cwalker")) { 2636 if (unlikely(PyDict_SetItemString(modules, "bintrees.cwalker", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2637 } 2638 } 2639 #endif 2640 __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;} 2641 #if CYTHON_COMPILING_IN_PYPY 2642 Py_INCREF(__pyx_b); 2643 #endif 2644 if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; 2645 /*--- Initialize various global constants etc. ---*/ 2646 if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2647 if (__pyx_module_is_main_bintrees__cwalker) { 2648 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;}; 2649 } 2650 /*--- Builtin init code ---*/ 2651 if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2652 /*--- Constants init code ---*/ 2653 if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2654 /*--- Global init code ---*/ 2655 /*--- Variable export code ---*/ 2656 /*--- Function export code ---*/ 2657 /*--- Type init code ---*/ 2658 __pyx_vtabptr_8bintrees_7cwalker_cWalker = &__pyx_vtable_8bintrees_7cwalker_cWalker; 2659 __pyx_vtable_8bintrees_7cwalker_cWalker.set_tree = (void (*)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, node_t *))__pyx_f_8bintrees_7cwalker_7cWalker_set_tree; 2660 __pyx_vtable_8bintrees_7cwalker_cWalker.reset = (PyObject *(*)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch))__pyx_f_8bintrees_7cwalker_7cWalker_reset; 2661 __pyx_vtable_8bintrees_7cwalker_cWalker.push = (PyObject *(*)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch))__pyx_f_8bintrees_7cwalker_7cWalker_push; 2662 __pyx_vtable_8bintrees_7cwalker_cWalker.pop = (PyObject *(*)(struct __pyx_obj_8bintrees_7cwalker_cWalker *, int __pyx_skip_dispatch))__pyx_f_8bintrees_7cwalker_7cWalker_pop; 2663 if (PyType_Ready(&__pyx_type_8bintrees_7cwalker_cWalker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2664 if (__Pyx_SetVtable(__pyx_type_8bintrees_7cwalker_cWalker.tp_dict, __pyx_vtabptr_8bintrees_7cwalker_cWalker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2665 if (__Pyx_SetAttrString(__pyx_m, "cWalker", (PyObject *)&__pyx_type_8bintrees_7cwalker_cWalker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2666 __pyx_ptype_8bintrees_7cwalker_cWalker = &__pyx_type_8bintrees_7cwalker_cWalker; 2667 /*--- Type import code ---*/ 2668 /*--- Variable import code ---*/ 2669 /*--- Function import code ---*/ 2670 /*--- Execution code ---*/ 2671 2672 /* "bintrees\cwalker.pyx":32 2673 * 2674 * @property 2675 * def key(self): # <<<<<<<<<<<<<< 2676 * return <object> self.node.key 2677 * 2678 */ 2679 __pyx_t_1 = __Pyx_GetName((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker, __pyx_n_s__key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2680 __Pyx_GOTREF(__pyx_t_1); 2681 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2682 __Pyx_GOTREF(__pyx_t_2); 2683 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); 2684 __Pyx_GIVEREF(__pyx_t_1); 2685 __pyx_t_1 = 0; 2686 __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2687 __Pyx_GOTREF(__pyx_t_1); 2688 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2689 if (PyDict_SetItem((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker->tp_dict, __pyx_n_s__key, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2690 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 2691 PyType_Modified(__pyx_ptype_8bintrees_7cwalker_cWalker); 2692 2693 /* "bintrees\cwalker.pyx":36 2694 * 2695 * @property 2696 * def value(self): # <<<<<<<<<<<<<< 2697 * return <object> self.node.value 2698 * 2699 */ 2700 __pyx_t_1 = __Pyx_GetName((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2701 __Pyx_GOTREF(__pyx_t_1); 2702 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2703 __Pyx_GOTREF(__pyx_t_2); 2704 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); 2705 __Pyx_GIVEREF(__pyx_t_1); 2706 __pyx_t_1 = 0; 2707 __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2708 __Pyx_GOTREF(__pyx_t_1); 2709 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2710 if (PyDict_SetItem((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker->tp_dict, __pyx_n_s__value, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2711 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 2712 PyType_Modified(__pyx_ptype_8bintrees_7cwalker_cWalker); 2713 2714 /* "bintrees\cwalker.pyx":40 2715 * 2716 * @property 2717 * def item(self): # <<<<<<<<<<<<<< 2718 * return (<object>self.node.key, <object>self.node.value) 2719 * 2720 */ 2721 __pyx_t_1 = __Pyx_GetName((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker, __pyx_n_s__item); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2722 __Pyx_GOTREF(__pyx_t_1); 2723 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2724 __Pyx_GOTREF(__pyx_t_2); 2725 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); 2726 __Pyx_GIVEREF(__pyx_t_1); 2727 __pyx_t_1 = 0; 2728 __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2729 __Pyx_GOTREF(__pyx_t_1); 2730 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2731 if (PyDict_SetItem((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker->tp_dict, __pyx_n_s__item, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2732 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 2733 PyType_Modified(__pyx_ptype_8bintrees_7cwalker_cWalker); 2734 2735 /* "bintrees\cwalker.pyx":44 2736 * 2737 * @property 2738 * def is_valid(self): # <<<<<<<<<<<<<< 2739 * return self.node != NULL 2740 * 2741 */ 2742 __pyx_t_1 = __Pyx_GetName((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker, __pyx_n_s__is_valid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2743 __Pyx_GOTREF(__pyx_t_1); 2744 __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2745 __Pyx_GOTREF(__pyx_t_2); 2746 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); 2747 __Pyx_GIVEREF(__pyx_t_1); 2748 __pyx_t_1 = 0; 2749 __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2750 __Pyx_GOTREF(__pyx_t_1); 2751 __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; 2752 if (PyDict_SetItem((PyObject *)__pyx_ptype_8bintrees_7cwalker_cWalker->tp_dict, __pyx_n_s__is_valid, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2753 __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; 2754 PyType_Modified(__pyx_ptype_8bintrees_7cwalker_cWalker); 2755 2756 /* "bintrees\cwalker.pyx":1 2757 * #!/usr/bin/env python # <<<<<<<<<<<<<< 2758 * #coding:utf-8 2759 * # Author: mozman 2760 */ 2761 __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2762 __Pyx_GOTREF(((PyObject *)__pyx_t_1)); 2763 if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} 2764 __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; 2765 goto __pyx_L0; 2766 __pyx_L1_error:; 2767 __Pyx_XDECREF(__pyx_t_1); 2768 __Pyx_XDECREF(__pyx_t_2); 2769 if (__pyx_m) { 2770 __Pyx_AddTraceback("init bintrees.cwalker", __pyx_clineno, __pyx_lineno, __pyx_filename); 2771 Py_DECREF(__pyx_m); __pyx_m = 0; 2772 } else if (!PyErr_Occurred()) { 2773 PyErr_SetString(PyExc_ImportError, "init bintrees.cwalker"); 2774 } 2775 __pyx_L0:; 2776 __Pyx_RefNannyFinishContext(); 2777 #if PY_MAJOR_VERSION < 3 2778 return; 2779 #else 2780 return __pyx_m; 2781 #endif 2782 } 2783 2784 /* Runtime support code */ 2785 #if CYTHON_REFNANNY 2786 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { 2787 PyObject *m = NULL, *p = NULL; 2788 void *r = NULL; 2789 m = PyImport_ImportModule((char *)modname); 2790 if (!m) goto end; 2791 p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); 2792 if (!p) goto end; 2793 r = PyLong_AsVoidPtr(p); 2794 end: 2795 Py_XDECREF(p); 2796 Py_XDECREF(m); 2797 return (__Pyx_RefNannyAPIStruct *)r; 2798 } 2799 #endif /* CYTHON_REFNANNY */ 2800 2801 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { 2802 PyObject *result; 2803 result = PyObject_GetAttr(dict, name); 2804 if (!result) { 2805 if (dict != __pyx_b) { 2806 PyErr_Clear(); 2807 result = PyObject_GetAttr(__pyx_b, name); 2808 } 2809 if (!result) { 2810 PyErr_SetObject(PyExc_NameError, name); 2811 } 2812 } 2813 return result; 2814 } 2815 2816 static void __Pyx_RaiseArgtupleInvalid( 2817 const char* func_name, 2818 int exact, 2819 Py_ssize_t num_min, 2820 Py_ssize_t num_max, 2821 Py_ssize_t num_found) 2822 { 2823 Py_ssize_t num_expected; 2824 const char *more_or_less; 2825 if (num_found < num_min) { 2826 num_expected = num_min; 2827 more_or_less = "at least"; 2828 } else { 2829 num_expected = num_max; 2830 more_or_less = "at most"; 2831 } 2832 if (exact) { 2833 more_or_less = "exactly"; 2834 } 2835 PyErr_Format(PyExc_TypeError, 2836 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", 2837 func_name, more_or_less, num_expected, 2838 (num_expected == 1) ? "" : "s", num_found); 2839 } 2840 2841 static CYTHON_INLINE int __Pyx_CheckKeywordStrings( 2842 PyObject *kwdict, 2843 const char* function_name, 2844 int kw_allowed) 2845 { 2846 PyObject* key = 0; 2847 Py_ssize_t pos = 0; 2848 #if CPYTHON_COMPILING_IN_PYPY 2849 if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) 2850 goto invalid_keyword; 2851 return 1; 2852 #else 2853 while (PyDict_Next(kwdict, &pos, &key, 0)) { 2854 #if PY_MAJOR_VERSION < 3 2855 if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) 2856 #endif 2857 if (unlikely(!PyUnicode_Check(key))) 2858 goto invalid_keyword_type; 2859 } 2860 if ((!kw_allowed) && unlikely(key)) 2861 goto invalid_keyword; 2862 return 1; 2863 invalid_keyword_type: 2864 PyErr_Format(PyExc_TypeError, 2865 "%s() keywords must be strings", function_name); 2866 return 0; 2867 #endif 2868 invalid_keyword: 2869 PyErr_Format(PyExc_TypeError, 2870 #if PY_MAJOR_VERSION < 3 2871 "%s() got an unexpected keyword argument '%s'", 2872 function_name, PyString_AsString(key)); 2873 #else 2874 "%s() got an unexpected keyword argument '%U'", 2875 function_name, key); 2876 #endif 2877 return 0; 2878 } 2879 2880 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { 2881 #if CYTHON_COMPILING_IN_CPYTHON 2882 PyObject *tmp_type, *tmp_value, *tmp_tb; 2883 PyThreadState *tstate = PyThreadState_GET(); 2884 tmp_type = tstate->curexc_type; 2885 tmp_value = tstate->curexc_value; 2886 tmp_tb = tstate->curexc_traceback; 2887 tstate->curexc_type = type; 2888 tstate->curexc_value = value; 2889 tstate->curexc_traceback = tb; 2890 Py_XDECREF(tmp_type); 2891 Py_XDECREF(tmp_value); 2892 Py_XDECREF(tmp_tb); 2893 #else 2894 PyErr_Restore(type, value, tb); 2895 #endif 2896 } 2897 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { 2898 #if CYTHON_COMPILING_IN_CPYTHON 2899 PyThreadState *tstate = PyThreadState_GET(); 2900 *type = tstate->curexc_type; 2901 *value = tstate->curexc_value; 2902 *tb = tstate->curexc_traceback; 2903 tstate->curexc_type = 0; 2904 tstate->curexc_value = 0; 2905 tstate->curexc_traceback = 0; 2906 #else 2907 PyErr_Fetch(type, value, tb); 2908 #endif 2909 } 2910 2911 #if PY_MAJOR_VERSION < 3 2912 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, 2913 CYTHON_UNUSED PyObject *cause) { 2914 Py_XINCREF(type); 2915 if (!value || value == Py_None) 2916 value = NULL; 2917 else 2918 Py_INCREF(value); 2919 if (!tb || tb == Py_None) 2920 tb = NULL; 2921 else { 2922 Py_INCREF(tb); 2923 if (!PyTraceBack_Check(tb)) { 2924 PyErr_SetString(PyExc_TypeError, 2925 "raise: arg 3 must be a traceback or None"); 2926 goto raise_error; 2927 } 2928 } 2929 #if PY_VERSION_HEX < 0x02050000 2930 if (PyClass_Check(type)) { 2931 #else 2932 if (PyType_Check(type)) { 2933 #endif 2934 #if CYTHON_COMPILING_IN_PYPY 2935 if (!value) { 2936 Py_INCREF(Py_None); 2937 value = Py_None; 2938 } 2939 #endif 2940 PyErr_NormalizeException(&type, &value, &tb); 2941 } else { 2942 if (value) { 2943 PyErr_SetString(PyExc_TypeError, 2944 "instance exception may not have a separate value"); 2945 goto raise_error; 2946 } 2947 value = type; 2948 #if PY_VERSION_HEX < 0x02050000 2949 if (PyInstance_Check(type)) { 2950 type = (PyObject*) ((PyInstanceObject*)type)->in_class; 2951 Py_INCREF(type); 2952 } 2953 else { 2954 type = 0; 2955 PyErr_SetString(PyExc_TypeError, 2956 "raise: exception must be an old-style class or instance"); 2957 goto raise_error; 2958 } 2959 #else 2960 type = (PyObject*) Py_TYPE(type); 2961 Py_INCREF(type); 2962 if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { 2963 PyErr_SetString(PyExc_TypeError, 2964 "raise: exception class must be a subclass of BaseException"); 2965 goto raise_error; 2966 } 2967 #endif 2968 } 2969 __Pyx_ErrRestore(type, value, tb); 2970 return; 2971 raise_error: 2972 Py_XDECREF(value); 2973 Py_XDECREF(type); 2974 Py_XDECREF(tb); 2975 return; 2976 } 2977 #else /* Python 3+ */ 2978 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { 2979 PyObject* owned_instance = NULL; 2980 if (tb == Py_None) { 2981 tb = 0; 2982 } else if (tb && !PyTraceBack_Check(tb)) { 2983 PyErr_SetString(PyExc_TypeError, 2984 "raise: arg 3 must be a traceback or None"); 2985 goto bad; 2986 } 2987 if (value == Py_None) 2988 value = 0; 2989 if (PyExceptionInstance_Check(type)) { 2990 if (value) { 2991 PyErr_SetString(PyExc_TypeError, 2992 "instance exception may not have a separate value"); 2993 goto bad; 2994 } 2995 value = type; 2996 type = (PyObject*) Py_TYPE(value); 2997 } else if (PyExceptionClass_Check(type)) { 2998 PyObject *args; 2999 if (!value) 3000 args = PyTuple_New(0); 3001 else if (PyTuple_Check(value)) { 3002 Py_INCREF(value); 3003 args = value; 3004 } 3005 else 3006 args = PyTuple_Pack(1, value); 3007 if (!args) 3008 goto bad; 3009 owned_instance = PyEval_CallObject(type, args); 3010 Py_DECREF(args); 3011 if (!owned_instance) 3012 goto bad; 3013 value = owned_instance; 3014 if (!PyExceptionInstance_Check(value)) { 3015 PyErr_Format(PyExc_TypeError, 3016 "calling %R should have returned an instance of " 3017 "BaseException, not %R", 3018 type, Py_TYPE(value)); 3019 goto bad; 3020 } 3021 } else { 3022 PyErr_SetString(PyExc_TypeError, 3023 "raise: exception class must be a subclass of BaseException"); 3024 goto bad; 3025 } 3026 if (cause && cause != Py_None) { 3027 PyObject *fixed_cause; 3028 if (PyExceptionClass_Check(cause)) { 3029 fixed_cause = PyObject_CallObject(cause, NULL); 3030 if (fixed_cause == NULL) 3031 goto bad; 3032 } 3033 else if (PyExceptionInstance_Check(cause)) { 3034 fixed_cause = cause; 3035 Py_INCREF(fixed_cause); 3036 } 3037 else { 3038 PyErr_SetString(PyExc_TypeError, 3039 "exception causes must derive from " 3040 "BaseException"); 3041 goto bad; 3042 } 3043 PyException_SetCause(value, fixed_cause); 3044 } 3045 PyErr_SetObject(type, value); 3046 if (tb) { 3047 PyThreadState *tstate = PyThreadState_GET(); 3048 PyObject* tmp_tb = tstate->curexc_traceback; 3049 if (tb != tmp_tb) { 3050 Py_INCREF(tb); 3051 tstate->curexc_traceback = tb; 3052 Py_XDECREF(tmp_tb); 3053 } 3054 } 3055 bad: 3056 Py_XDECREF(owned_instance); 3057 return; 3058 } 3059 #endif 3060 3061 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { 3062 const unsigned char neg_one = (unsigned char)-1, const_zero = 0; 3063 const int is_unsigned = neg_one > const_zero; 3064 if (sizeof(unsigned char) < sizeof(long)) { 3065 long val = __Pyx_PyInt_AsLong(x); 3066 if (unlikely(val != (long)(unsigned char)val)) { 3067 if (!unlikely(val == -1 && PyErr_Occurred())) { 3068 PyErr_SetString(PyExc_OverflowError, 3069 (is_unsigned && unlikely(val < 0)) ? 3070 "can't convert negative value to unsigned char" : 3071 "value too large to convert to unsigned char"); 3072 } 3073 return (unsigned char)-1; 3074 } 3075 return (unsigned char)val; 3076 } 3077 return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); 3078 } 3079 3080 static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { 3081 const unsigned short neg_one = (unsigned short)-1, const_zero = 0; 3082 const int is_unsigned = neg_one > const_zero; 3083 if (sizeof(unsigned short) < sizeof(long)) { 3084 long val = __Pyx_PyInt_AsLong(x); 3085 if (unlikely(val != (long)(unsigned short)val)) { 3086 if (!unlikely(val == -1 && PyErr_Occurred())) { 3087 PyErr_SetString(PyExc_OverflowError, 3088 (is_unsigned && unlikely(val < 0)) ? 3089 "can't convert negative value to unsigned short" : 3090 "value too large to convert to unsigned short"); 3091 } 3092 return (unsigned short)-1; 3093 } 3094 return (unsigned short)val; 3095 } 3096 return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); 3097 } 3098 3099 static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { 3100 const unsigned int neg_one = (unsigned int)-1, const_zero = 0; 3101 const int is_unsigned = neg_one > const_zero; 3102 if (sizeof(unsigned int) < sizeof(long)) { 3103 long val = __Pyx_PyInt_AsLong(x); 3104 if (unlikely(val != (long)(unsigned int)val)) { 3105 if (!unlikely(val == -1 && PyErr_Occurred())) { 3106 PyErr_SetString(PyExc_OverflowError, 3107 (is_unsigned && unlikely(val < 0)) ? 3108 "can't convert negative value to unsigned int" : 3109 "value too large to convert to unsigned int"); 3110 } 3111 return (unsigned int)-1; 3112 } 3113 return (unsigned int)val; 3114 } 3115 return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); 3116 } 3117 3118 static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { 3119 const char neg_one = (char)-1, const_zero = 0; 3120 const int is_unsigned = neg_one > const_zero; 3121 if (sizeof(char) < sizeof(long)) { 3122 long val = __Pyx_PyInt_AsLong(x); 3123 if (unlikely(val != (long)(char)val)) { 3124 if (!unlikely(val == -1 && PyErr_Occurred())) { 3125 PyErr_SetString(PyExc_OverflowError, 3126 (is_unsigned && unlikely(val < 0)) ? 3127 "can't convert negative value to char" : 3128 "value too large to convert to char"); 3129 } 3130 return (char)-1; 3131 } 3132 return (char)val; 3133 } 3134 return (char)__Pyx_PyInt_AsLong(x); 3135 } 3136 3137 static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { 3138 const short neg_one = (short)-1, const_zero = 0; 3139 const int is_unsigned = neg_one > const_zero; 3140 if (sizeof(short) < sizeof(long)) { 3141 long val = __Pyx_PyInt_AsLong(x); 3142 if (unlikely(val != (long)(short)val)) { 3143 if (!unlikely(val == -1 && PyErr_Occurred())) { 3144 PyErr_SetString(PyExc_OverflowError, 3145 (is_unsigned && unlikely(val < 0)) ? 3146 "can't convert negative value to short" : 3147 "value too large to convert to short"); 3148 } 3149 return (short)-1; 3150 } 3151 return (short)val; 3152 } 3153 return (short)__Pyx_PyInt_AsLong(x); 3154 } 3155 3156 static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { 3157 const int neg_one = (int)-1, const_zero = 0; 3158 const int is_unsigned = neg_one > const_zero; 3159 if (sizeof(int) < sizeof(long)) { 3160 long val = __Pyx_PyInt_AsLong(x); 3161 if (unlikely(val != (long)(int)val)) { 3162 if (!unlikely(val == -1 && PyErr_Occurred())) { 3163 PyErr_SetString(PyExc_OverflowError, 3164 (is_unsigned && unlikely(val < 0)) ? 3165 "can't convert negative value to int" : 3166 "value too large to convert to int"); 3167 } 3168 return (int)-1; 3169 } 3170 return (int)val; 3171 } 3172 return (int)__Pyx_PyInt_AsLong(x); 3173 } 3174 3175 static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { 3176 const signed char neg_one = (signed char)-1, const_zero = 0; 3177 const int is_unsigned = neg_one > const_zero; 3178 if (sizeof(signed char) < sizeof(long)) { 3179 long val = __Pyx_PyInt_AsLong(x); 3180 if (unlikely(val != (long)(signed char)val)) { 3181 if (!unlikely(val == -1 && PyErr_Occurred())) { 3182 PyErr_SetString(PyExc_OverflowError, 3183 (is_unsigned && unlikely(val < 0)) ? 3184 "can't convert negative value to signed char" : 3185 "value too large to convert to signed char"); 3186 } 3187 return (signed char)-1; 3188 } 3189 return (signed char)val; 3190 } 3191 return (signed char)__Pyx_PyInt_AsSignedLong(x); 3192 } 3193 3194 static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { 3195 const signed short neg_one = (signed short)-1, const_zero = 0; 3196 const int is_unsigned = neg_one > const_zero; 3197 if (sizeof(signed short) < sizeof(long)) { 3198 long val = __Pyx_PyInt_AsLong(x); 3199 if (unlikely(val != (long)(signed short)val)) { 3200 if (!unlikely(val == -1 && PyErr_Occurred())) { 3201 PyErr_SetString(PyExc_OverflowError, 3202 (is_unsigned && unlikely(val < 0)) ? 3203 "can't convert negative value to signed short" : 3204 "value too large to convert to signed short"); 3205 } 3206 return (signed short)-1; 3207 } 3208 return (signed short)val; 3209 } 3210 return (signed short)__Pyx_PyInt_AsSignedLong(x); 3211 } 3212 3213 static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { 3214 const signed int neg_one = (signed int)-1, const_zero = 0; 3215 const int is_unsigned = neg_one > const_zero; 3216 if (sizeof(signed int) < sizeof(long)) { 3217 long val = __Pyx_PyInt_AsLong(x); 3218 if (unlikely(val != (long)(signed int)val)) { 3219 if (!unlikely(val == -1 && PyErr_Occurred())) { 3220 PyErr_SetString(PyExc_OverflowError, 3221 (is_unsigned && unlikely(val < 0)) ? 3222 "can't convert negative value to signed int" : 3223 "value too large to convert to signed int"); 3224 } 3225 return (signed int)-1; 3226 } 3227 return (signed int)val; 3228 } 3229 return (signed int)__Pyx_PyInt_AsSignedLong(x); 3230 } 3231 3232 static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { 3233 const int neg_one = (int)-1, const_zero = 0; 3234 const int is_unsigned = neg_one > const_zero; 3235 if (sizeof(int) < sizeof(long)) { 3236 long val = __Pyx_PyInt_AsLong(x); 3237 if (unlikely(val != (long)(int)val)) { 3238 if (!unlikely(val == -1 && PyErr_Occurred())) { 3239 PyErr_SetString(PyExc_OverflowError, 3240 (is_unsigned && unlikely(val < 0)) ? 3241 "can't convert negative value to int" : 3242 "value too large to convert to int"); 3243 } 3244 return (int)-1; 3245 } 3246 return (int)val; 3247 } 3248 return (int)__Pyx_PyInt_AsLong(x); 3249 } 3250 3251 static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { 3252 const unsigned long neg_one = (unsigned long)-1, const_zero = 0; 3253 const int is_unsigned = neg_one > const_zero; 3254 #if PY_VERSION_HEX < 0x03000000 3255 if (likely(PyInt_Check(x))) { 3256 long val = PyInt_AS_LONG(x); 3257 if (is_unsigned && unlikely(val < 0)) { 3258 PyErr_SetString(PyExc_OverflowError, 3259 "can't convert negative value to unsigned long"); 3260 return (unsigned long)-1; 3261 } 3262 return (unsigned long)val; 3263 } else 3264 #endif 3265 if (likely(PyLong_Check(x))) { 3266 if (is_unsigned) { 3267 if (unlikely(Py_SIZE(x) < 0)) { 3268 PyErr_SetString(PyExc_OverflowError, 3269 "can't convert negative value to unsigned long"); 3270 return (unsigned long)-1; 3271 } 3272 return (unsigned long)PyLong_AsUnsignedLong(x); 3273 } else { 3274 return (unsigned long)PyLong_AsLong(x); 3275 } 3276 } else { 3277 unsigned long val; 3278 PyObject *tmp = __Pyx_PyNumber_Int(x); 3279 if (!tmp) return (unsigned long)-1; 3280 val = __Pyx_PyInt_AsUnsignedLong(tmp); 3281 Py_DECREF(tmp); 3282 return val; 3283 } 3284 } 3285 3286 static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { 3287 const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; 3288 const int is_unsigned = neg_one > const_zero; 3289 #if PY_VERSION_HEX < 0x03000000 3290 if (likely(PyInt_Check(x))) { 3291 long val = PyInt_AS_LONG(x); 3292 if (is_unsigned && unlikely(val < 0)) { 3293 PyErr_SetString(PyExc_OverflowError, 3294 "can't convert negative value to unsigned PY_LONG_LONG"); 3295 return (unsigned PY_LONG_LONG)-1; 3296 } 3297 return (unsigned PY_LONG_LONG)val; 3298 } else 3299 #endif 3300 if (likely(PyLong_Check(x))) { 3301 if (is_unsigned) { 3302 if (unlikely(Py_SIZE(x) < 0)) { 3303 PyErr_SetString(PyExc_OverflowError, 3304 "can't convert negative value to unsigned PY_LONG_LONG"); 3305 return (unsigned PY_LONG_LONG)-1; 3306 } 3307 return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); 3308 } else { 3309 return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); 3310 } 3311 } else { 3312 unsigned PY_LONG_LONG val; 3313 PyObject *tmp = __Pyx_PyNumber_Int(x); 3314 if (!tmp) return (unsigned PY_LONG_LONG)-1; 3315 val = __Pyx_PyInt_AsUnsignedLongLong(tmp); 3316 Py_DECREF(tmp); 3317 return val; 3318 } 3319 } 3320 3321 static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { 3322 const long neg_one = (long)-1, const_zero = 0; 3323 const int is_unsigned = neg_one > const_zero; 3324 #if PY_VERSION_HEX < 0x03000000 3325 if (likely(PyInt_Check(x))) { 3326 long val = PyInt_AS_LONG(x); 3327 if (is_unsigned && unlikely(val < 0)) { 3328 PyErr_SetString(PyExc_OverflowError, 3329 "can't convert negative value to long"); 3330 return (long)-1; 3331 } 3332 return (long)val; 3333 } else 3334 #endif 3335 if (likely(PyLong_Check(x))) { 3336 if (is_unsigned) { 3337 if (unlikely(Py_SIZE(x) < 0)) { 3338 PyErr_SetString(PyExc_OverflowError, 3339 "can't convert negative value to long"); 3340 return (long)-1; 3341 } 3342 return (long)PyLong_AsUnsignedLong(x); 3343 } else { 3344 return (long)PyLong_AsLong(x); 3345 } 3346 } else { 3347 long val; 3348 PyObject *tmp = __Pyx_PyNumber_Int(x); 3349 if (!tmp) return (long)-1; 3350 val = __Pyx_PyInt_AsLong(tmp); 3351 Py_DECREF(tmp); 3352 return val; 3353 } 3354 } 3355 3356 static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { 3357 const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; 3358 const int is_unsigned = neg_one > const_zero; 3359 #if PY_VERSION_HEX < 0x03000000 3360 if (likely(PyInt_Check(x))) { 3361 long val = PyInt_AS_LONG(x); 3362 if (is_unsigned && unlikely(val < 0)) { 3363 PyErr_SetString(PyExc_OverflowError, 3364 "can't convert negative value to PY_LONG_LONG"); 3365 return (PY_LONG_LONG)-1; 3366 } 3367 return (PY_LONG_LONG)val; 3368 } else 3369 #endif 3370 if (likely(PyLong_Check(x))) { 3371 if (is_unsigned) { 3372 if (unlikely(Py_SIZE(x) < 0)) { 3373 PyErr_SetString(PyExc_OverflowError, 3374 "can't convert negative value to PY_LONG_LONG"); 3375 return (PY_LONG_LONG)-1; 3376 } 3377 return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); 3378 } else { 3379 return (PY_LONG_LONG)PyLong_AsLongLong(x); 3380 } 3381 } else { 3382 PY_LONG_LONG val; 3383 PyObject *tmp = __Pyx_PyNumber_Int(x); 3384 if (!tmp) return (PY_LONG_LONG)-1; 3385 val = __Pyx_PyInt_AsLongLong(tmp); 3386 Py_DECREF(tmp); 3387 return val; 3388 } 3389 } 3390 3391 static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { 3392 const signed long neg_one = (signed long)-1, const_zero = 0; 3393 const int is_unsigned = neg_one > const_zero; 3394 #if PY_VERSION_HEX < 0x03000000 3395 if (likely(PyInt_Check(x))) { 3396 long val = PyInt_AS_LONG(x); 3397 if (is_unsigned && unlikely(val < 0)) { 3398 PyErr_SetString(PyExc_OverflowError, 3399 "can't convert negative value to signed long"); 3400 return (signed long)-1; 3401 } 3402 return (signed long)val; 3403 } else 3404 #endif 3405 if (likely(PyLong_Check(x))) { 3406 if (is_unsigned) { 3407 if (unlikely(Py_SIZE(x) < 0)) { 3408 PyErr_SetString(PyExc_OverflowError, 3409 "can't convert negative value to signed long"); 3410 return (signed long)-1; 3411 } 3412 return (signed long)PyLong_AsUnsignedLong(x); 3413 } else { 3414 return (signed long)PyLong_AsLong(x); 3415 } 3416 } else { 3417 signed long val; 3418 PyObject *tmp = __Pyx_PyNumber_Int(x); 3419 if (!tmp) return (signed long)-1; 3420 val = __Pyx_PyInt_AsSignedLong(tmp); 3421 Py_DECREF(tmp); 3422 return val; 3423 } 3424 } 3425 3426 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { 3427 const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; 3428 const int is_unsigned = neg_one > const_zero; 3429 #if PY_VERSION_HEX < 0x03000000 3430 if (likely(PyInt_Check(x))) { 3431 long val = PyInt_AS_LONG(x); 3432 if (is_unsigned && unlikely(val < 0)) { 3433 PyErr_SetString(PyExc_OverflowError, 3434 "can't convert negative value to signed PY_LONG_LONG"); 3435 return (signed PY_LONG_LONG)-1; 3436 } 3437 return (signed PY_LONG_LONG)val; 3438 } else 3439 #endif 3440 if (likely(PyLong_Check(x))) { 3441 if (is_unsigned) { 3442 if (unlikely(Py_SIZE(x) < 0)) { 3443 PyErr_SetString(PyExc_OverflowError, 3444 "can't convert negative value to signed PY_LONG_LONG"); 3445 return (signed PY_LONG_LONG)-1; 3446 } 3447 return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); 3448 } else { 3449 return (signed PY_LONG_LONG)PyLong_AsLongLong(x); 3450 } 3451 } else { 3452 signed PY_LONG_LONG val; 3453 PyObject *tmp = __Pyx_PyNumber_Int(x); 3454 if (!tmp) return (signed PY_LONG_LONG)-1; 3455 val = __Pyx_PyInt_AsSignedLongLong(tmp); 3456 Py_DECREF(tmp); 3457 return val; 3458 } 3459 } 3460 3461 static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, 3462 CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) { 3463 PyObject *old_exc, *old_val, *old_tb; 3464 PyObject *ctx; 3465 __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); 3466 #if PY_MAJOR_VERSION < 3 3467 ctx = PyString_FromString(name); 3468 #else 3469 ctx = PyUnicode_FromString(name); 3470 #endif 3471 __Pyx_ErrRestore(old_exc, old_val, old_tb); 3472 if (!ctx) { 3473 PyErr_WriteUnraisable(Py_None); 3474 } else { 3475 PyErr_WriteUnraisable(ctx); 3476 Py_DECREF(ctx); 3477 } 3478 } 3479 3480 static int __Pyx_check_binary_version(void) { 3481 char ctversion[4], rtversion[4]; 3482 PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); 3483 PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); 3484 if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { 3485 char message[200]; 3486 PyOS_snprintf(message, sizeof(message), 3487 "compiletime version %s of module '%.100s' " 3488 "does not match runtime version %s", 3489 ctversion, __Pyx_MODULE_NAME, rtversion); 3490 #if PY_VERSION_HEX < 0x02050000 3491 return PyErr_Warn(NULL, message); 3492 #else 3493 return PyErr_WarnEx(NULL, message, 1); 3494 #endif 3495 } 3496 return 0; 3497 } 3498 3499 static int __Pyx_SetVtable(PyObject *dict, void *vtable) { 3500 #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0) 3501 PyObject *ob = PyCapsule_New(vtable, 0, 0); 3502 #else 3503 PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); 3504 #endif 3505 if (!ob) 3506 goto bad; 3507 if (PyDict_SetItemString(dict, "__pyx_vtable__", ob) < 0) 3508 goto bad; 3509 Py_DECREF(ob); 3510 return 0; 3511 bad: 3512 Py_XDECREF(ob); 3513 return -1; 3514 } 3515 3516 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { 3517 int start = 0, mid = 0, end = count - 1; 3518 if (end >= 0 && code_line > entries[end].code_line) { 3519 return count; 3520 } 3521 while (start < end) { 3522 mid = (start + end) / 2; 3523 if (code_line < entries[mid].code_line) { 3524 end = mid; 3525 } else if (code_line > entries[mid].code_line) { 3526 start = mid + 1; 3527 } else { 3528 return mid; 3529 } 3530 } 3531 if (code_line <= entries[mid].code_line) { 3532 return mid; 3533 } else { 3534 return mid + 1; 3535 } 3536 } 3537 static PyCodeObject *__pyx_find_code_object(int code_line) { 3538 PyCodeObject* code_object; 3539 int pos; 3540 if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { 3541 return NULL; 3542 } 3543 pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); 3544 if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { 3545 return NULL; 3546 } 3547 code_object = __pyx_code_cache.entries[pos].code_object; 3548 Py_INCREF(code_object); 3549 return code_object; 3550 } 3551 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { 3552 int pos, i; 3553 __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; 3554 if (unlikely(!code_line)) { 3555 return; 3556 } 3557 if (unlikely(!entries)) { 3558 entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); 3559 if (likely(entries)) { 3560 __pyx_code_cache.entries = entries; 3561 __pyx_code_cache.max_count = 64; 3562 __pyx_code_cache.count = 1; 3563 entries[0].code_line = code_line; 3564 entries[0].code_object = code_object; 3565 Py_INCREF(code_object); 3566 } 3567 return; 3568 } 3569 pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); 3570 if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { 3571 PyCodeObject* tmp = entries[pos].code_object; 3572 entries[pos].code_object = code_object; 3573 Py_DECREF(tmp); 3574 return; 3575 } 3576 if (__pyx_code_cache.count == __pyx_code_cache.max_count) { 3577 int new_max = __pyx_code_cache.max_count + 64; 3578 entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( 3579 __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); 3580 if (unlikely(!entries)) { 3581 return; 3582 } 3583 __pyx_code_cache.entries = entries; 3584 __pyx_code_cache.max_count = new_max; 3585 } 3586 for (i=__pyx_code_cache.count; i>pos; i--) { 3587 entries[i] = entries[i-1]; 3588 } 3589 entries[pos].code_line = code_line; 3590 entries[pos].code_object = code_object; 3591 __pyx_code_cache.count++; 3592 Py_INCREF(code_object); 3593 } 3594 3595 #include "compile.h" 3596 #include "frameobject.h" 3597 #include "traceback.h" 3598 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( 3599 const char *funcname, int c_line, 3600 int py_line, const char *filename) { 3601 PyCodeObject *py_code = 0; 3602 PyObject *py_srcfile = 0; 3603 PyObject *py_funcname = 0; 3604 #if PY_MAJOR_VERSION < 3 3605 py_srcfile = PyString_FromString(filename); 3606 #else 3607 py_srcfile = PyUnicode_FromString(filename); 3608 #endif 3609 if (!py_srcfile) goto bad; 3610 if (c_line) { 3611 #if PY_MAJOR_VERSION < 3 3612 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); 3613 #else 3614 py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); 3615 #endif 3616 } 3617 else { 3618 #if PY_MAJOR_VERSION < 3 3619 py_funcname = PyString_FromString(funcname); 3620 #else 3621 py_funcname = PyUnicode_FromString(funcname); 3622 #endif 3623 } 3624 if (!py_funcname) goto bad; 3625 py_code = __Pyx_PyCode_New( 3626 0, /*int argcount,*/ 3627 0, /*int kwonlyargcount,*/ 3628 0, /*int nlocals,*/ 3629 0, /*int stacksize,*/ 3630 0, /*int flags,*/ 3631 __pyx_empty_bytes, /*PyObject *code,*/ 3632 __pyx_empty_tuple, /*PyObject *consts,*/ 3633 __pyx_empty_tuple, /*PyObject *names,*/ 3634 __pyx_empty_tuple, /*PyObject *varnames,*/ 3635 __pyx_empty_tuple, /*PyObject *freevars,*/ 3636 __pyx_empty_tuple, /*PyObject *cellvars,*/ 3637 py_srcfile, /*PyObject *filename,*/ 3638 py_funcname, /*PyObject *name,*/ 3639 py_line, /*int firstlineno,*/ 3640 __pyx_empty_bytes /*PyObject *lnotab*/ 3641 ); 3642 Py_DECREF(py_srcfile); 3643 Py_DECREF(py_funcname); 3644 return py_code; 3645 bad: 3646 Py_XDECREF(py_srcfile); 3647 Py_XDECREF(py_funcname); 3648 return NULL; 3649 } 3650 static void __Pyx_AddTraceback(const char *funcname, int c_line, 3651 int py_line, const char *filename) { 3652 PyCodeObject *py_code = 0; 3653 PyObject *py_globals = 0; 3654 PyFrameObject *py_frame = 0; 3655 py_code = __pyx_find_code_object(c_line ? c_line : py_line); 3656 if (!py_code) { 3657 py_code = __Pyx_CreateCodeObjectForTraceback( 3658 funcname, c_line, py_line, filename); 3659 if (!py_code) goto bad; 3660 __pyx_insert_code_object(c_line ? c_line : py_line, py_code); 3661 } 3662 py_globals = PyModule_GetDict(__pyx_m); 3663 if (!py_globals) goto bad; 3664 py_frame = PyFrame_New( 3665 PyThreadState_GET(), /*PyThreadState *tstate,*/ 3666 py_code, /*PyCodeObject *code,*/ 3667 py_globals, /*PyObject *globals,*/ 3668 0 /*PyObject *locals*/ 3669 ); 3670 if (!py_frame) goto bad; 3671 py_frame->f_lineno = py_line; 3672 PyTraceBack_Here(py_frame); 3673 bad: 3674 Py_XDECREF(py_code); 3675 Py_XDECREF(py_frame); 3676 } 3677 3678 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { 3679 while (t->p) { 3680 #if PY_MAJOR_VERSION < 3 3681 if (t->is_unicode) { 3682 *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); 3683 } else if (t->intern) { 3684 *t->p = PyString_InternFromString(t->s); 3685 } else { 3686 *t->p = PyString_FromStringAndSize(t->s, t->n - 1); 3687 } 3688 #else /* Python 3+ has unicode identifiers */ 3689 if (t->is_unicode | t->is_str) { 3690 if (t->intern) { 3691 *t->p = PyUnicode_InternFromString(t->s); 3692 } else if (t->encoding) { 3693 *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); 3694 } else { 3695 *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); 3696 } 3697 } else { 3698 *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); 3699 } 3700 #endif 3701 if (!*t->p) 3702 return -1; 3703 ++t; 3704 } 3705 return 0; 3706 } 3707 3708 3709 /* Type Conversion Functions */ 3710 3711 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { 3712 int is_true = x == Py_True; 3713 if (is_true | (x == Py_False) | (x == Py_None)) return is_true; 3714 else return PyObject_IsTrue(x); 3715 } 3716 3717 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { 3718 PyNumberMethods *m; 3719 const char *name = NULL; 3720 PyObject *res = NULL; 3721 #if PY_VERSION_HEX < 0x03000000 3722 if (PyInt_Check(x) || PyLong_Check(x)) 3723 #else 3724 if (PyLong_Check(x)) 3725 #endif 3726 return Py_INCREF(x), x; 3727 m = Py_TYPE(x)->tp_as_number; 3728 #if PY_VERSION_HEX < 0x03000000 3729 if (m && m->nb_int) { 3730 name = "int"; 3731 res = PyNumber_Int(x); 3732 } 3733 else if (m && m->nb_long) { 3734 name = "long"; 3735 res = PyNumber_Long(x); 3736 } 3737 #else 3738 if (m && m->nb_int) { 3739 name = "int"; 3740 res = PyNumber_Long(x); 3741 } 3742 #endif 3743 if (res) { 3744 #if PY_VERSION_HEX < 0x03000000 3745 if (!PyInt_Check(res) && !PyLong_Check(res)) { 3746 #else 3747 if (!PyLong_Check(res)) { 3748 #endif 3749 PyErr_Format(PyExc_TypeError, 3750 "__%s__ returned non-%s (type %.200s)", 3751 name, name, Py_TYPE(res)->tp_name); 3752 Py_DECREF(res); 3753 return NULL; 3754 } 3755 } 3756 else if (!PyErr_Occurred()) { 3757 PyErr_SetString(PyExc_TypeError, 3758 "an integer is required"); 3759 } 3760 return res; 3761 } 3762 3763 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { 3764 Py_ssize_t ival; 3765 PyObject* x = PyNumber_Index(b); 3766 if (!x) return -1; 3767 ival = PyInt_AsSsize_t(x); 3768 Py_DECREF(x); 3769 return ival; 3770 } 3771 3772 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { 3773 #if PY_VERSION_HEX < 0x02050000 3774 if (ival <= LONG_MAX) 3775 return PyInt_FromLong((long)ival); 3776 else { 3777 unsigned char *bytes = (unsigned char *) &ival; 3778 int one = 1; int little = (int)*(unsigned char*)&one; 3779 return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); 3780 } 3781 #else 3782 return PyInt_FromSize_t(ival); 3783 #endif 3784 } 3785 3786 static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { 3787 unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); 3788 if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { 3789 return (size_t)-1; 3790 } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { 3791 PyErr_SetString(PyExc_OverflowError, 3792 "value too large to convert to size_t"); 3793 return (size_t)-1; 3794 } 3795 return (size_t)val; 3796 } 3797 3798 3799 #endif /* Py_PYTHON_H */ 3800