Lines Matching refs:tree
99 static QTreeNode *q_tree_insert_internal(QTree *tree,
103 static gboolean q_tree_remove_internal(QTree *tree,
107 static QTreeNode *q_tree_find_node(QTree *tree,
199 QTree *tree; in q_tree_new_full() local
203 tree = g_new(QTree, 1); in q_tree_new_full()
204 tree->root = NULL; in q_tree_new_full()
205 tree->key_compare = key_compare_func; in q_tree_new_full()
206 tree->key_destroy_func = key_destroy_func; in q_tree_new_full()
207 tree->value_destroy_func = value_destroy_func; in q_tree_new_full()
208 tree->key_compare_data = key_compare_data; in q_tree_new_full()
209 tree->nnodes = 0; in q_tree_new_full()
210 tree->ref_count = 1; in q_tree_new_full()
212 return tree; in q_tree_new_full()
227 q_tree_node_first(QTree *tree) in q_tree_node_first() argument
231 g_return_val_if_fail(tree != NULL, NULL); in q_tree_node_first()
233 if (!tree->root) { in q_tree_node_first()
237 tmp = tree->root; in q_tree_node_first()
314 q_tree_remove_all(QTree *tree) in q_tree_remove_all() argument
319 g_return_if_fail(tree != NULL); in q_tree_remove_all()
321 node = q_tree_node_first(tree); in q_tree_remove_all()
326 if (tree->key_destroy_func) { in q_tree_remove_all()
327 tree->key_destroy_func(node->key); in q_tree_remove_all()
329 if (tree->value_destroy_func) { in q_tree_remove_all()
330 tree->value_destroy_func(node->value); in q_tree_remove_all()
335 g_assert(tree->nnodes > 0); in q_tree_remove_all()
336 tree->nnodes--; in q_tree_remove_all()
343 g_assert(tree->nnodes == 0); in q_tree_remove_all()
346 tree->root = NULL; in q_tree_remove_all()
348 tree->nnodes = 0; in q_tree_remove_all()
365 q_tree_ref(QTree *tree) in q_tree_ref() argument
367 g_return_val_if_fail(tree != NULL, NULL); in q_tree_ref()
369 g_atomic_int_inc(&tree->ref_count); in q_tree_ref()
371 return tree; in q_tree_ref()
388 q_tree_unref(QTree *tree) in q_tree_unref() argument
390 g_return_if_fail(tree != NULL); in q_tree_unref()
392 if (g_atomic_int_dec_and_test(&tree->ref_count)) { in q_tree_unref()
393 q_tree_remove_all(tree); in q_tree_unref()
394 g_free(tree); in q_tree_unref()
410 q_tree_destroy(QTree *tree) in q_tree_destroy() argument
412 g_return_if_fail(tree != NULL); in q_tree_destroy()
414 q_tree_remove_all(tree); in q_tree_destroy()
415 q_tree_unref(tree); in q_tree_destroy()
443 q_tree_insert_node(QTree *tree, in q_tree_insert_node() argument
449 g_return_val_if_fail(tree != NULL, NULL); in q_tree_insert_node()
451 node = q_tree_insert_internal(tree, key, value, FALSE); in q_tree_insert_node()
454 q_tree_node_check(tree->root); in q_tree_insert_node()
472 q_tree_insert(QTree *tree, in q_tree_insert() argument
476 q_tree_insert_node(tree, key, value); in q_tree_insert()
500 q_tree_replace_node(QTree *tree, in q_tree_replace_node() argument
506 g_return_val_if_fail(tree != NULL, NULL); in q_tree_replace_node()
508 node = q_tree_insert_internal(tree, key, value, TRUE); in q_tree_replace_node()
511 q_tree_node_check(tree->root); in q_tree_replace_node()
527 q_tree_replace(QTree *tree, in q_tree_replace() argument
531 q_tree_replace_node(tree, key, value); in q_tree_replace()
536 q_tree_insert_internal(QTree *tree, in q_tree_insert_internal() argument
545 g_return_val_if_fail(tree != NULL, NULL); in q_tree_insert_internal()
547 if (!tree->root) { in q_tree_insert_internal()
548 tree->root = q_tree_node_new(key, value); in q_tree_insert_internal()
549 tree->nnodes++; in q_tree_insert_internal()
550 return tree->root; in q_tree_insert_internal()
555 node = tree->root; in q_tree_insert_internal()
558 int cmp = tree->key_compare(key, node->key, tree->key_compare_data); in q_tree_insert_internal()
561 if (tree->value_destroy_func) { in q_tree_insert_internal()
562 tree->value_destroy_func(node->value); in q_tree_insert_internal()
568 if (tree->key_destroy_func) { in q_tree_insert_internal()
569 tree->key_destroy_func(node->key); in q_tree_insert_internal()
575 if (tree->key_destroy_func) { in q_tree_insert_internal()
576 tree->key_destroy_func(key); in q_tree_insert_internal()
594 tree->nnodes++; in q_tree_insert_internal()
612 tree->nnodes++; in q_tree_insert_internal()
633 tree->root = node; in q_tree_insert_internal()
677 q_tree_remove(QTree *tree, in q_tree_remove() argument
682 g_return_val_if_fail(tree != NULL, FALSE); in q_tree_remove()
684 removed = q_tree_remove_internal(tree, key, FALSE); in q_tree_remove()
687 q_tree_node_check(tree->root); in q_tree_remove()
707 q_tree_steal(QTree *tree, in q_tree_steal() argument
712 g_return_val_if_fail(tree != NULL, FALSE); in q_tree_steal()
714 removed = q_tree_remove_internal(tree, key, TRUE); in q_tree_steal()
717 q_tree_node_check(tree->root); in q_tree_steal()
725 q_tree_remove_internal(QTree *tree, in q_tree_remove_internal() argument
734 g_return_val_if_fail(tree != NULL, FALSE); in q_tree_remove_internal()
736 if (!tree->root) { in q_tree_remove_internal()
742 node = tree->root; in q_tree_remove_internal()
745 int cmp = tree->key_compare(key, node->key, tree->key_compare_data); in q_tree_remove_internal()
777 tree->root = NULL; in q_tree_remove_internal()
793 tree->root = node->right; in q_tree_remove_internal()
809 tree->root = node->left; in q_tree_remove_internal()
862 tree->root = next; in q_tree_remove_internal()
883 tree->root = balance; in q_tree_remove_internal()
906 if (tree->key_destroy_func) { in q_tree_remove_internal()
907 tree->key_destroy_func(node->key); in q_tree_remove_internal()
909 if (tree->value_destroy_func) { in q_tree_remove_internal()
910 tree->value_destroy_func(node->value); in q_tree_remove_internal()
916 tree->nnodes--; in q_tree_remove_internal()
936 q_tree_lookup_node(QTree *tree, in q_tree_lookup_node() argument
939 g_return_val_if_fail(tree != NULL, NULL); in q_tree_lookup_node()
941 return q_tree_find_node(tree, key); in q_tree_lookup_node()
957 q_tree_lookup(QTree *tree, in q_tree_lookup() argument
962 node = q_tree_lookup_node(tree, key); in q_tree_lookup()
983 q_tree_lookup_extended(QTree *tree, in q_tree_lookup_extended() argument
990 g_return_val_if_fail(tree != NULL, FALSE); in q_tree_lookup_extended()
992 node = q_tree_find_node(tree, lookup_key); in q_tree_lookup_extended()
1024 q_tree_foreach(QTree *tree, in q_tree_foreach() argument
1030 g_return_if_fail(tree != NULL); in q_tree_foreach()
1032 if (!tree->root) { in q_tree_foreach()
1036 node = q_tree_node_first(tree); in q_tree_foreach()
1069 q_tree_search_node(QTree *tree, in q_tree_search_node() argument
1073 g_return_val_if_fail(tree != NULL, NULL); in q_tree_search_node()
1075 if (!tree->root) { in q_tree_search_node()
1079 return q_tree_node_search(tree->root, search_func, user_data); in q_tree_search_node()
1102 q_tree_search(QTree *tree, in q_tree_search() argument
1108 node = q_tree_search_node(tree, search_func, user_data); in q_tree_search()
1126 q_tree_height(QTree *tree) in q_tree_height() argument
1131 g_return_val_if_fail(tree != NULL, 0); in q_tree_height()
1133 if (!tree->root) { in q_tree_height()
1138 node = tree->root; in q_tree_height()
1160 q_tree_nnodes(QTree *tree) in q_tree_nnodes() argument
1162 g_return_val_if_fail(tree != NULL, 0); in q_tree_nnodes()
1164 return tree->nnodes; in q_tree_nnodes()
1186 q_tree_find_node(QTree *tree, in q_tree_find_node() argument
1192 node = tree->root; in q_tree_find_node()
1198 cmp = tree->key_compare(key, node->key, tree->key_compare_data); in q_tree_find_node()