示例#1
0
/*
** Do all pending leaf checks.
*/
void leaf_do_pending_checks(void){
  int rid;
  for(rid=bag_first(&needToCheck); rid; rid=bag_next(&needToCheck,rid)){
    leaf_check(rid);
  }
  bag_clear(&needToCheck);
}
示例#2
0
void convert_tree(node ** base_node, int next_hop){
	
	/*node is a leaf*/
	if(leaf_check((*base_node))==1){
		
		if((*base_node)->next_hop==-1){
			(*base_node)->next_hop = next_hop;
		}
	/*node isn't a leaf*/
	}else{
			
		int check=child_check(*base_node);
		char*new_prefix=malloc(sizeof(char)*(strlen((*base_node)->prefix)+strlen("1")+1));
		/*node doesn't have left child*/
		if(check==0){
			strcpy(new_prefix, (*base_node)->prefix);
			strcat(new_prefix, "0");
			(*base_node)->zero=Initialize_node(new_prefix);
			
		/*node doesn't have right child*/
		}else if(check==1){
			strcpy(new_prefix, (*base_node)->prefix);
			strcat(new_prefix, "1");			
			(*base_node)->one=Initialize_node(new_prefix);
		}
		/*node doesn't have next hop*/
		if((*base_node)->next_hop!=-1){
			convert_tree((&(*base_node)->zero), (*base_node)->next_hop);
			convert_tree((&(*base_node)->one), (*base_node)->next_hop);
		/*node has next hop*/
		}else{
			convert_tree((&(*base_node)->zero), next_hop);
			convert_tree((&(*base_node)->one), next_hop);
		}
		free(new_prefix);
	}
		
	return;
	
}