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
14typedef struct tree_node node_t;
15
16struct tree_node {
17	node_t *link[2];
18	PyObject *key;
19	PyObject *value;
20	int xdata;
21};
22
23typedef node_t* nodeptr;
24
25/* common binary tree functions */
26void ct_delete_tree(node_t *root);
27int ct_compare(PyObject *key1, PyObject *key2);
28PyObject *ct_get_item(node_t *root, PyObject *key);
29node_t *ct_find_node(node_t *root, PyObject *key);
30node_t *ct_succ_node(node_t *root, PyObject *key);
31node_t *ct_prev_node(node_t *root, PyObject *key);
32node_t *ct_max_node(node_t *root);
33node_t *ct_min_node(node_t *root);
34node_t *ct_floor_node(node_t *root, PyObject *key);
35node_t *ct_ceiling_node(node_t *root, PyObject *key);
36int ct_index_of(node_t *root, PyObject *key);
37node_t *ct_node_at(node_t *root, int index);
38
39/* unbalanced binary tree */
40int ct_bintree_insert(node_t **root, PyObject *key, PyObject *value);
41int ct_bintree_remove(node_t **root, PyObject *key);
42
43/* avl-tree functions */
44int avl_insert(node_t **root, PyObject *key, PyObject *value);
45int avl_remove(node_t **root, PyObject *key);
46
47/* rb-tree functions */
48int rb_insert(node_t **root, PyObject *key, PyObject *value);
49int rb_remove(node_t **root, PyObject *key);
50
51#endif
52