protected void SearchPatterns(char[] word, int index, byte[] il)
{
byte[] values;
int i = index;
char p, q;
char sp = word[i];
p = root;
while (p > 0 && p < sc.Length) {
if (sc[p] == 0xFFFF) {
if (Hstrcmp(word, i, kv.Arr, lo[p]) == 0) {
values = GetValues(eq[p]); // data pointer is in eq[]
int j = index;
for (int k = 0; k < values.Length; k++) {
if (j < il.Length && values[k] > il[j]) {
il[j] = values[k];
}
j++;
}
}
return;
}
int d = sp - sc[p];
if (d == 0) {
if (sp == 0) {
break;
}
sp = word[++i];
p = eq[p];
q = p;
// look for a pattern ending at this position by searching for
// the null char ( splitchar == 0 )
while (q > 0 && q < sc.Length) {
if (sc[q] == 0xFFFF) { // stop at compressed branch
break;
}
if (sc[q] == 0) {
values = GetValues(eq[q]);
int j = index;
for (int k = 0; k < values.Length; k++) {
if (j < il.Length && values[k] > il[j]) {
il[j] = values[k];
}
j++;
}
break;
} else {
q = lo[q];
/**
* actually the code should be:
* q = sc[q] < 0 ? hi[q] : lo[q];
* but java chars are unsigned
*/
}
}
} else {
p = d < 0 ? lo[p] : hi[p];
}
}
}