// l-ineg-motif-court.c

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

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


void lInegMotifCourt(Mot x, Longueur m, Mot y, Longueur n, int k) {
   unsigned int i, j, *R, S[CARDA], T, Tp, masq;
   Lettre a;

   R = (int *)malloc((k + 1)*sizeof(int));
   if (R == NULL) error("lInegMotifCourt");

   for (a = PREMIERELETTRE; a <= DERNIERELETTRE; ++a)
      S[a] = ~0;
   for (i = 0, masq = 1; i <= m - 1; ++i, masq <<= 1)
      S[x[i]] &= ~masq;
   masq >>= 1;
   R[0] = ~0;
   for (i = 1; i <= k; ++i)
      R[i] = R[i - 1] << 1;
   for (j = 0; j <= n - 1; ++j) {
      T = R[0];
      R[0] = (R[0] << 1) | S[y[j]];
      for (i = 1; i <= k; ++i) {
         Tp = R[i];
         R[i] = ((R[i] << 1) | S[y[j]]) & (T << 1);
         T = Tp;
      }
      signalerSi((R[k] & masq) == 0);
   }
}