* PARAMETERS
* `t' AVL-tree to store the data in.
* `key' Key used to store the value under. This is used to get back to
- * the value again.
+ * the value again. The pointer is stored in an internal structure
+ * and _not_ copied. So the memory pointed to may _not_ be freed
+ * before this entry is removed. You can use the `rkey' argument
+ * to `avl_remove' to get the original pointer back and free it.
* `value' Value to be stored.
*
* RETURN VALUE
- * Zero upon success and non-zero upon failure and if the key is already
- * stored in the tree.
+ * Zero upon success, non-zero otherwise. It's less than zero if an error
+ * occurred or greater than zero if the key is already stored in the tree.
*/
int avl_insert (avl_tree_t *t, void *key, void *value);
* `t' AVL-tree to remove key-value-pair from.
* `key' Key to identify the entry.
* `rkey' Pointer to a pointer in which to store the key. May be NULL.
+ * Since the `key' pointer is not copied when creating an entry,
+ * the pointer may not be available anymore from outside the tree.
+ * You can use this argument to get the actual pointer back and
+ * free the memory pointed to by it.
* `rvalue' Pointer to a pointer in which to store the value. May be NULL.
*
* RETURN VALUE
* Zero upon success or non-zero if the key isn't found in the tree.
*/
-int avl_remove (avl_tree_t *t, void *key, void **rkey, void **rvalue);
+int avl_remove (avl_tree_t *t, const void *key, void **rkey, void **rvalue);
/*
* NAME
*/
int avl_pick (avl_tree_t *t, void **key, void **value);
-#if 0
-/* This code disabled until a need arises. */
avl_iterator_t *avl_get_iterator (avl_tree_t *t);
-void *avl_iterator_next (avl_iterator_t *iter);
-void *avl_iterator_prev (avl_iterator_t *iter);
+int avl_iterator_next (avl_iterator_t *iter, void **key, void **value);
+int avl_iterator_prev (avl_iterator_t *iter, void **key, void **value);
void avl_iterator_destroy (avl_iterator_t *iter);
-#endif
#endif /* UTILS_AVLTREE_H */