// ineg-fusion.c

// << Algorithmique du texte >>
// Maxime Crochemore, Christophe Hancart et Thierry Lecroq
// Vuibert, 2001.

#include <stdio.h>
#include "chl.h"
#include "cellule.h"
#include "fifo.h"


File inegFusion(Mot x, Mot y, int f, int j, int g, int k, File Fin, File Gin) {
   File F, G, J;
   int p, q;

   F = copie(Fin);
   G = copie(Gin);
   J = fileVide();
   while (longueur(J) <= k && longueur(F) > 0 && longueur(G) > 0) {
      p = *(int *)tete(F);
      q = *(int *)tete(G);
      if (p < q) {
         defiler(F);
         enfiler(J, nouvelEntier(p - j + f));
      }
      else if (q < p) {
         defiler(G);
         enfiler(J, nouvelEntier(q - j + f));
      }
      else {
         defiler(F);
         defiler(G);
         if (x[p - j + f] != y[f + p])
            enfiler(J, nouvelEntier(p - j + f));
      }
   }
   while (longueur(J) <= k && longueur(F) > 0) {
      p = *(int *)defilement(F);
      enfiler(J, nouvelEntier(p - j + f));
   }
   while (longueur(J) <= k && longueur(G) > 0 && *(int *)tete(G) <= g - f) {
      q = *(int *)defilement(G);
      enfiler(J, nouvelEntier(q - j + f));
   }
   return(J);
}