Bugfix: Really fix the crash in bm.c, do memory checking after each allocation, corre...
[2dmatching.git] / kmp.c
blob391c4f144450ac678b38011aa976bcc2b3e5ed5f
1 #include "code.h"
3 int kmpNext[128];
5 void prep_kmp( double *text2, double *pattern2, int m, int n )
7 int i, j;
9 i = 0;
10 j = kmpNext[0] = -1;
12 while (i < m) {
13 while (j > -1 && pattern2[i] != pattern2[j])
14 j = kmpNext[j];
16 i++;
17 j++;
19 if (pattern2[i] == pattern2[j])
20 kmpNext[i] = kmpNext[j];
21 else
22 kmpNext[i] = j;
26 unsigned int search_kmp( double *text2, double *pattern2, int m, int n )
28 prep_kmp( text2, pattern2, m, n );
30 unsigned int i = 0, j = 0, matches = 0;
32 #define limit n * n - (n * ( m - 1 ))
34 while (i < limit) {
35 while (j > -1 && pattern2[j] != text2[i])
36 j = kmpNext[j];
38 i++;
39 j++;
41 if (j == m) {
42 matches++;
43 j = kmpNext[j];
46 return matches;