• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * ctrees.h
3  *
4  *  Author: mozman
5  *  Copyright (c) 2010-2013 by Manfred Moitzi
6  *  License: MIT-License
7  */
8 
9 #ifndef __CTREES_H
10 #define __CTREES_H
11 
12 #include <Python.h>
13 
14 typedef struct tree_node node_t;
15 
16 struct tree_node {
17 	node_t *link[2];
18 	PyObject *key;
19 	PyObject *value;
20 	int xdata;
21 };
22 
23 typedef node_t* nodeptr;
24 
25 /* common binary tree functions */
26 void ct_delete_tree(node_t *root);
27 int ct_compare(PyObject *key1, PyObject *key2);
28 PyObject *ct_get_item(node_t *root, PyObject *key);
29 node_t *ct_find_node(node_t *root, PyObject *key);
30 node_t *ct_succ_node(node_t *root, PyObject *key);
31 node_t *ct_prev_node(node_t *root, PyObject *key);
32 node_t *ct_max_node(node_t *root);
33 node_t *ct_min_node(node_t *root);
34 node_t *ct_floor_node(node_t *root, PyObject *key);
35 node_t *ct_ceiling_node(node_t *root, PyObject *key);
36 int ct_index_of(node_t *root, PyObject *key);
37 node_t *ct_node_at(node_t *root, int index);
38 
39 /* unbalanced binary tree */
40 int ct_bintree_insert(node_t **root, PyObject *key, PyObject *value);
41 int ct_bintree_remove(node_t **root, PyObject *key);
42 
43 /* avl-tree functions */
44 int avl_insert(node_t **root, PyObject *key, PyObject *value);
45 int avl_remove(node_t **root, PyObject *key);
46 
47 /* rb-tree functions */
48 int rb_insert(node_t **root, PyObject *key, PyObject *value);
49 int rb_remove(node_t **root, PyObject *key);
50 
51 #endif
52