Пример #1
0
//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);
	}

}
Пример #2
0
/*
 * 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;
}