lia_avl_t lia_insere_avl(lia_avl_t racine, type_info *info, char *si_augm,int avec_reequilibrage,char *mesg) { int comp; if (racine==NULL) { *si_augm=1; return new_tree_mot_node(info); } comp=compare_info(racine->info,info); if (comp==0) { /* message -> le noeud est deja dans l'arbre */ if (VERBOSE) sprintf(mesg,"noeud [%s] deja present",info->key_string); add_type_info(info,racine->info); /* from info1 to info2 */ delete_type_info(info); *si_augm=0; } else if (comp>0) { /* sur le fils gauche */ racine->fg=lia_insere_avl(racine->fg,info,si_augm,avec_reequilibrage,mesg); if (*si_augm) { if (racine->dq<0) *si_augm=0; racine->dq++; } /* eventuelle rotation */ if ((avec_reequilibrage)&&(racine->dq==2)) { lia_reequilibre_droite(racine,mesg,si_augm); *si_augm=0; } } else { /* sur le fils droit */ racine->fd=lia_insere_avl(racine->fd,info,si_augm,avec_reequilibrage,mesg); if (*si_augm) { if (racine->dq>0) *si_augm=0; racine->dq--; } /* eventuelle rotation */ if ((avec_reequilibrage)&&(racine->dq==-2)) { lia_reequilibre_gauche(racine,mesg,si_augm); *si_augm=0; } } return racine; }
void info_manager::add_const_info(environment const & env, pos_info pos, name const & full_id) { add_identifier_info(pos, full_id); add_type_info(pos, env.get(full_id).get_type()); }