//this tree is a "trie" void insert(int itemset[], TreeNode *node, int current_item, int *size, int first_item, TreeNode *set[], double lutil){ TreeNode *N; int value = itemset[current_item]; if(value == 1){ if(node->first_child == NULL){ N = create_new_node(current_item); N->parent = node; node->first_child = N; node->last_child = N; } else{ N = match_child(current_item, node); if(N == NULL){ N = create_new_node(current_item); N->parent = node; node->last_child->right_sibling = N; N->left_sibling = node->last_child; node->last_child = N; } else{ (N->count) ++; } } } else{ N = node; } if(current_item == MAXITEMS && is_root(N) == false){ N->last_item = true; N->first_item = first_item; N->lutil = lutil; set[*size] = N; (*size) ++; } if(current_item < MAXITEMS){ insert(itemset, N, current_item + 1, size, first_item, set, lutil); } }
/* * cycles through all of the resource requests and returns true if all * of the requested children were found */ static bool match_children (resrc_tree_list_t *r_trees, resrc_reqst_list_t *req_trees, resrc_tree_t *found_parent, bool available) { bool found = false; resrc_reqst_t *resrc_reqst = resrc_reqst_list_first (req_trees); while (resrc_reqst) { resrc_reqst->nfound = 0; found = false; if (match_child (r_trees, resrc_reqst, found_parent, available)) { if (resrc_reqst->nfound >= resrc_reqst->reqrd_qty) found = true; } if (!found) break; resrc_reqst = resrc_reqst_list_next (req_trees); } return found; }