static void search_requirements(struct hash *hash, struct node *n, struct tree *d) { struct tree_node *t, *u; struct tree *providers; t = tree_first(n->need->root); while (t) { providers = tree_new(); get_all_providers(t->n, providers); u = tree_first(providers->root); while (u) { if (!tree_search_node(d, u->n->name)) tree_insert(d, hash_search(hash, u->n->name)); u = tree_next(u); } tree_free_all_nodes(providers); tree_free(providers); t = tree_next(t); } t = tree_first(n->provide->root); while (t) { search_requirements(hash, t->n, d); t = tree_next(t); } }
void* tree_search(void* Tree, const void* key) { tree_node* node = tree_search_node(Tree, key); return node ? node->datum : NULL; }
static void search_dependencies(struct hash *hash, struct node *n, struct tree *d) { struct tree_node *t; char *pkgname; t = tree_first(n->neededby->root); while (t) { if (is_virtual_file(t->n->name)) { pkgname = get_pkgname(t->n->name); if (!tree_search_node(d, pkgname)) tree_insert(d, hash_search(hash, pkgname)); free(pkgname); } t = tree_next(t); } t = tree_first(n->provide->root); while (t) { search_dependencies(hash, t->n, d); t = tree_next(t); } }
bool tree_iterator_search(void* Iterator, const void* key) { ASSERT(Iterator != NULL); tree_iterator* iterator = Iterator; ASSERT(iterator->tree != NULL); return (iterator->node = tree_search_node(iterator->tree, key)) != NULL; }
struct node *hash_safe_insert(struct hash *hash, struct node *n) { unsigned long index = hash_index(n->name); struct node *r; r = tree_search_node(hash->tbl[index], n->name); if (r) return r; tree_insert(hash->tbl[index], n); return n; }
static void get_all_providers(struct node *n, struct tree *all) { struct tree_node *t; t = tree_first(n->providedby->root); while (t) { if (IS_PKG(t->n) && !tree_search_node(all, t->n->name)) tree_insert(all, node_new(t->n->name, "")); get_all_providers(t->n, all); t = tree_next(t); } }
int get_virtual_files(struct node *n, char *name, struct tree *all) { struct tree_node *t; t = tree_first(n->providedby->root); while (t) { if (!strcmp(name, get_filename(t->n->name)) && !tree_search_node(all, t->n->name)) tree_insert(all, t->n); t = tree_next(t); } return tree_count(all); }
struct node *hash_search(struct hash *hash, char *key) { return tree_search_node(hash->tbl[hash_index(key)], key); }