Data Structures | |
| struct | di_tree |
| Tree. More... | |
| struct | di_tree_node |
| Node of a tree. More... | |
Functions | |
| di_tree * | di_tree_new (di_compare_func key_compare_func) |
| di_tree * | di_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) |
| 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.
| tree | a di_tree. |
| 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.
| 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.
| 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 | |||
| ) |
| di_tree* di_tree_new | ( | di_compare_func | key_compare_func | ) |
Creates a new di_tree.
| key_compare_func | a function to compare two keys. This is used when looking up keys in the 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
| 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. |
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 | ) |
1.5.1