- add sources.
[platform/framework/web/crosswalk.git] / src / third_party / bintrees / bintrees / ctrees.h
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