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