src/rbtree.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define SEARCH_EQUAL   0x1
#define SEARCH_GTEQ   0x2
#define SEARCH_LTEQ   0x3
#define SEARCH_GT   0x4
#define SEARCH_LT   0x5
#define SEARCH_NEXT   0x6
#define SEARCH_PREV   0x7
#define SEARCH_FIRST   0x8
#define SEARCH_LAST   0x9
#define WALK_PREORDER   0x100
#define WALK_INORDER   0x101
#define WALK_POSTORDER   0x102

Typedefs

typedef void * rbtree

Functions

rbtree rb_init (int(*)(void *, void *, void *), void *)
void rb_destroy (rbtree)
void rb_insert (rbtree, void *, void *)
void * rb_find (rbtree, void *)
int rb_exists (rbtree, void *)
void * rb_delete (rbtree, void *)
void * rb_release (rbtree, void(*)(void *, void *, void *), void *)
void rb_walk (rbtree, int, int(*)(void *, void *, int, void *), void *)
unsigned int rb_size (rbtree)
void * rb_search (rbtree, int, void *)
void * rb_index (rbtree, int)


Define Documentation

#define SEARCH_EQUAL   0x1

Definition at line 25 of file rbtree.h.

#define SEARCH_FIRST   0x8

Definition at line 32 of file rbtree.h.

#define SEARCH_GT   0x4

Definition at line 28 of file rbtree.h.

#define SEARCH_GTEQ   0x2

Definition at line 26 of file rbtree.h.

#define SEARCH_LAST   0x9

Definition at line 33 of file rbtree.h.

#define SEARCH_LT   0x5

Definition at line 29 of file rbtree.h.

#define SEARCH_LTEQ   0x3

Definition at line 27 of file rbtree.h.

#define SEARCH_NEXT   0x6

Definition at line 30 of file rbtree.h.

#define SEARCH_PREV   0x7

Definition at line 31 of file rbtree.h.

#define WALK_INORDER   0x101

Definition at line 36 of file rbtree.h.

#define WALK_POSTORDER   0x102

Definition at line 37 of file rbtree.h.

#define WALK_PREORDER   0x100

Definition at line 35 of file rbtree.h.


Typedef Documentation

typedef void* rbtree

Definition at line 40 of file rbtree.h.


Function Documentation

void* rb_delete ( rbtree  ,
void *   
)

void rb_destroy ( rbtree   ) 

int rb_exists ( rbtree  ,
void *   
)

void* rb_find ( rbtree  ,
void *   
)

void* rb_index ( rbtree  ,
int   
)

Definition at line 895 of file rbtree.c.

References rbtree_node_t::count, rbtree_node_t::data, rbtree_head_t::head, rbtree_node_t::left, rbfail, and rbtree_node_t::right.

00896 {
00897     rbtree_node *iter;
00898     int leftcount;
00899     iter = bt->head;
00900 
00901     while (iter) {
00902         leftcount = (iter->left ? iter->left->count : 0);
00903 
00904         if(index == leftcount) {
00905             return iter->data;
00906         }
00907         if(index < leftcount) {
00908             iter = iter->left;
00909         } else {
00910             index -= leftcount + 1;
00911             iter = iter->right;
00912         }
00913     }
00914     rbfail("major braindamage.");
00915 }

rbtree rb_init ( int(*)(void *, void *, void *)  ,
void *   
)

void rb_insert ( rbtree  ,
void *  ,
void *   
)

void* rb_release ( rbtree  ,
void(*)(void *, void *, void *)  ,
void *   
)

Definition at line 152 of file rbtree.c.

References rbtree_node_t::data, rbtree_head_t::head, rbtree_node_t::key, rbtree_node_t::left, rbtree_node_t::parent, and rbtree_node_t::right.

Referenced by auto_astar_generate_path().

00154 {
00155     rbtree_node *node, *parent;
00156     node = bt->head;
00157 
00158     if(bt->head) {
00159         while (node != NULL) {
00160             if(node->left != NULL) {
00161                 node = node->left;
00162                 continue;
00163             } else if(node->right != NULL) {
00164                 node = node->right;
00165                 continue;
00166             } else {
00167                 parent = node->parent;
00168                 if(parent && parent->left == node)
00169                     parent->left = NULL;
00170                 else if(parent && parent->right == node)
00171                     parent->right = NULL;
00172                 else if(parent) {
00173                     fprintf(stderr, "serious braindamage.\n");
00174                     exit(1);
00175                 }
00176                 release(node->key, node->data, arg);
00177                 free(node);
00178                 node = parent;
00179             }
00180         }
00181     }
00182     free(bt);
00183     return;
00184 }

void* rb_search ( rbtree  ,
int  ,
void *   
)

unsigned int rb_size ( rbtree   ) 

void rb_walk ( rbtree  ,
int  ,
int(*)(void *, void *, int, void *)  ,
void *   
)


Generated on Mon May 28 04:25:47 2007 for BattletechMUX by  doxygen 1.4.7