Exemple #1
0
static void build_domain_forest(PP_data *pp_data, Linkage sublinkage)
{
	size_t d, d1, link;
	DTreeLeaf * dtl;

	if (pp_data->N_domains > 0)
	{
		pp_data->domain_array[pp_data->N_domains-1].parent = NULL;
		for (d=0; d < pp_data->N_domains-1; d++)
		{
			for (d1 = d+1; d1 < pp_data->N_domains; d1++)
			{
				if (contained_in(&pp_data->domain_array[d], &pp_data->domain_array[d1], sublinkage))
				{
					pp_data->domain_array[d].parent = &pp_data->domain_array[d1];
					break;
				}
			}
			if (d1 == pp_data->N_domains)
			{
				/* we know this domain is a root of a new tree */
				pp_data->domain_array[d].parent = NULL;
			}
		}
	}
	/* The parent links of domain nodes have been established.
	 * Now do the leaves. */
	for (d = 0; d < pp_data->N_domains; d++)
	{
		pp_data->domain_array[d].child = NULL;
	}
	for (link=0; link < sublinkage->num_links; link++)
	{
		assert (sublinkage->link_array[link].lw != SIZE_MAX);
		for (d=0; d<pp_data->N_domains; d++)
		{
			if (link_in_domain(link, &pp_data->domain_array[d]))
			{
				dtl = (DTreeLeaf *) malloc(sizeof(DTreeLeaf));
				dtl->link = link;
				dtl->parent = &pp_data->domain_array[d];
				dtl->next = pp_data->domain_array[d].child;
				pp_data->domain_array[d].child = dtl;
				break;
			}
		}
	}
}
Exemple #2
0
static void build_domain_forest(Postprocessor *pp, Sublinkage *sublinkage)
{
  int d, d1, link;
  DTreeLeaf * dtl;
  if (pp->pp_data.N_domains > 0) 
    pp->pp_data.domain_array[pp->pp_data.N_domains-1].parent = NULL;
  for (d=0; d < pp->pp_data.N_domains-1; d++) {
    for (d1 = d+1; d1 < pp->pp_data.N_domains; d1++) {
      if (contained_in(&pp->pp_data.domain_array[d],&pp->pp_data.domain_array[d1],sublinkage))
	{
	  pp->pp_data.domain_array[d].parent = &pp->pp_data.domain_array[d1];
	  break;
	}
    }
    if (d1 == pp->pp_data.N_domains) {
      /* we know this domain is a root of a new tree */
      pp->pp_data.domain_array[d].parent = NULL;
      /* It's now ok for this to happen.  It used to do:
	 printf("I can't find a parent domain for this domain\n");
	 print_domain(d);
	 exit(1); */
    }
  }
  /* the parent links of domain nodes have been established.
     now do the leaves */
  for (d=0; d < pp->pp_data.N_domains; d++) {
    pp->pp_data.domain_array[d].child = NULL;
  }
  for (link=0; link < sublinkage->num_links; link++) {
    if (sublinkage->link[link]->l == -1) continue; /* probably not necessary */
    for (d=0; d<pp->pp_data.N_domains; d++) {
      if (link_in_domain(link, &pp->pp_data.domain_array[d])) {
	dtl = (DTreeLeaf *) xalloc(sizeof(DTreeLeaf));
	dtl->link = link;
	dtl->parent = &pp->pp_data.domain_array[d];
	dtl->next = pp->pp_data.domain_array[d].child;
	pp->pp_data.domain_array[d].child = dtl;
	break;
      }
    }
  }
}