Esempio n. 1
0
static void
flow_find_loops (flowgraph_t *graph)
{
	flownode_t *node;
	set_iter_t *succ;
	flowloop_t *loop, *l;
	flowloop_t *loop_list = 0;
	int         i;

	for (i = 0; i < graph->num_nodes; i++) {
		node = graph->nodes[i];
		for (succ = set_first (node->successors); succ;
			 succ = set_next (succ)) {
			if (set_is_member (node->dom, succ->element)) {
				loop = make_loop (graph, node->id, succ->element);
				for (l = loop_list; l; l = l->next) {
					if (l->head == loop->head
						&& !set_is_subset (l->nodes, loop->nodes)
						&& !set_is_subset (loop->nodes, l->nodes)) {
						set_union (l->nodes, loop->nodes);
						delete_loop (loop);
						loop = 0;
						break;
					}
				}
				if (loop) {
					loop->next = loop_list;
					loop_list = loop;
				}
			}
		}
	}
	graph->loops = loop_list;
}
Esempio n. 2
0
int set_is_equal(const Set *set1, const Set *set2)
{
	if(set_size(set1) != set_size(set2))
		return 0;

	return set_is_subset(set1, set2);
}
Esempio n. 3
0
int set_is_equal(const Set *st1, const Set *st2){
	if(set_len(st1) != set_len(st2)){
		return 0;
	}

	return set_is_subset(st1, st2);
}
Esempio n. 4
0
/* set_is_equal */
int set_is_equal(const Set *set1, const Set *set2)
{
    /* Do a quick test ot rule out some cases. */
    if (set_size(set1) != set_size(set2))
        return 0;
    
    /* Sets of the same size are equal if they are subsets. */
    return set_is_subset(set1, set2);
}
Esempio n. 5
0
//set_is_equal
int set_is_equal(const Set *set1, const Set *set2)
{
    // do a quick test to rule out some case.
    if (set_size(set1) != set_size(set2))
        return 0;

    //sets of the same size are equal if they are subset.
    return set_is_subset(set1, set2);
}