Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 19702
b: refs/heads/master
c: 3f33031
h: refs/heads/master
v: v3
  • Loading branch information
Pablo Neira Ayuso authored and David S. Miller committed Feb 3, 2006
1 parent 1fd9900 commit 45c5689
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f00c401b9b5f0a90e2eb05705f5988fbda0b082b
refs/heads/master: 3f330317ab4973178423aba750d6d0ca5ce0024a
40 changes: 25 additions & 15 deletions trunk/lib/ts_bm.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,28 @@ next: bs = bm->bad_shift[text[shift-i]];
return UINT_MAX;
}

static int subpattern(u8 *pattern, int i, int j, int g)
{
int x = i+g-1, y = j+g-1, ret = 0;

while(pattern[x--] == pattern[y--]) {
if (y < 0) {
ret = 1;
break;
}
if (--g == 0) {
ret = pattern[i-1] != pattern[j-1];
break;
}
}

return ret;
}

static void compute_prefix_tbl(struct ts_bm *bm, const u8 *pattern,
unsigned int len)
{
int i, j, ended, l[ASIZE];
int i, j, g;

for (i = 0; i < ASIZE; i++)
bm->bad_shift[i] = len;
Expand All @@ -106,23 +124,15 @@ static void compute_prefix_tbl(struct ts_bm *bm, const u8 *pattern,

/* Compute the good shift array, used to match reocurrences
* of a subpattern */
for (i = 1; i < bm->patlen; i++) {
for (j = 0; j < bm->patlen && bm->pattern[bm->patlen - 1 - j]
== bm->pattern[bm->patlen - 1 - i - j]; j++);
l[i] = j;
}

bm->good_shift[0] = 1;
for (i = 1; i < bm->patlen; i++)
bm->good_shift[i] = bm->patlen;
for (i = bm->patlen - 1; i > 0; i--)
bm->good_shift[l[i]] = i;
ended = 0;
for (i = 0; i < bm->patlen; i++) {
if (l[i] == bm->patlen - 1 - i)
ended = i;
if (ended)
bm->good_shift[i] = ended;
for (i = bm->patlen-1, g = 1; i > 0; g++, i--) {
for (j = i-1; j >= 1-g ; j--)
if (subpattern(bm->pattern, i, j, g)) {
bm->good_shift[g] = bm->patlen-j-g;
break;
}
}
}

Expand Down

0 comments on commit 45c5689

Please sign in to comment.