Di_tree


Data Structures

struct  di_tree
 Tree. More...
struct  di_tree_node
 Node of a tree. More...

Functions

di_treedi_tree_new (di_compare_func key_compare_func)
di_treedi_tree_new_full (di_compare_func key_compare_func, di_destroy_notify key_destroy_func, di_destroy_notify value_destroy_func)
void di_tree_destroy (di_tree *tree)
void di_tree_insert (di_tree *tree, void *key, void *value)
void * di_tree_lookup (di_tree *tree, const void *key)
void di_tree_foreach (di_tree *tree, di_hfunc *func, void *user_data)
di_ksize_t di_tree_size (di_tree *tree)

Function Documentation

void di_tree_destroy ( di_tree tree  ) 

Destroys the di_tree. If keys and/or values are dynamically allocated, you should either free them first or create the di_tree using di_tree_new_full. In the latter case the destroy functions you supplied will be called on all keys and values before destroying the di_hash_table.

Parameters:
tree a di_tree.
00100 {
00101   di_tree_node_destroy (tree, tree->root);
00102   di_free (tree);
00103 }

void di_tree_foreach ( di_tree tree,
di_hfunc *  func,
void *  user_data 
)

Calls the given function for each of the key/value pairs in the di_tree. The function is passed the key and value of each pair, and the given user_data parameter.

Postcondition:
The hash table may not be modified while iterating over it (you can't add/remove items).
Parameters:
tree a di_tree.
func the function to call for each key/value pair.
user_data user data to pass to the function.
00274 {
00275   di_tree_node_foreach (tree->root, func, user_data);
00276 }

void di_tree_insert ( di_tree tree,
void *  key,
void *  value 
)

Inserts a new key and value into a di_tree.

If the key already exists in the di_tree its current value is replaced with the new value. If you supplied a value_destroy_func when creating the di_tree, the old value is freed using that function. If you supplied a key_destroy_func when creating the di_tree, the passed key is freed using that function.

Parameters:
tree a di_tree.
key a key to insert.
value the value to associate with the key.
00254 {
00255   if (!tree->root)
00256   {
00257     tree->root = di_tree_node_new (key, value);
00258     tree->nnodes++;
00259   }
00260   else
00261     tree->root = di_tree_node_insert (tree, tree->root, key, value);
00262 }

void* di_tree_lookup ( di_tree tree,
const void *  key 
)

Looks up a key in a di_tree.

Parameters:
tree a di_tree.,
key the key to look up.
Returns:
the associated value, or NULL if the key is not found.
00301 {
00302   return di_tree_node_lookup (tree, tree->root, key);
00303 }

di_tree* di_tree_new ( di_compare_func  key_compare_func  ) 

Creates a new di_tree.

Parameters:
key_compare_func a function to compare two keys. This is used when looking up keys in the di_tree.
Returns:
a new di_tree.
00068 {
00069   return di_tree_new_full (key_compare_func, NULL, NULL);
00070 }

di_tree* di_tree_new_full ( di_compare_func  key_compare_func,
di_destroy_notify  key_destroy_func,
di_destroy_notify  value_destroy_func 
)

Creates a new di_tree like di_tree_new and allows to specify functions to free the memory allocated for the key and value that get called when removing the entry from the di_tree

Parameters:
key_compare_func a function to check two keys for equality. This is used when looking up keys in the di_tree.
key_destroy_func a function to free the memory allocated for the key used when removing the entry from the di_tree or NULL if you don't want to supply such a function.
value_destroy_func a function to free the memory allocated for the value used when removing the entry from the di_tree or NULL if you don't want to supply such a function.
Returns:
a new di_tree.
00073 {
00074   di_tree *tree;
00075 
00076   tree = di_new (di_tree, 1);
00077   tree->nnodes             = 0;
00078   tree->key_compare_func   = key_compare_func;
00079   tree->key_destroy_func   = key_destroy_func;
00080   tree->value_destroy_func = value_destroy_func;
00081   tree->root               = 0;
00082 
00083   return tree;
00084 }

di_ksize_t di_tree_size ( di_tree tree  ) 

Returns the number of elements contained in the di_tree.

Parameters:
hash_table a di_tree.
Returns:
the number of key/value pairs.
00279 {
00280   return tree->nnodes;
00281 }


Generated on Sat Sep 29 08:45:17 2007 for libdebian-installer by  doxygen 1.5.1