update fst core struct

This commit is contained in:
yihaoDeng 2021-11-26 15:24:55 +08:00
parent c0ca718eed
commit 16f089c39a
1 changed files with 17 additions and 14 deletions

View File

@ -146,24 +146,27 @@ uint64_t fstUnFinishedNodesFindCommPrefixAndSetOutput(FstUnFinishedNodes *node,
size_t lsz = (size_t)(s->end - s->start + 1); // data len size_t lsz = (size_t)(s->end - s->start + 1); // data len
size_t ssz = taosArrayGetSize(node->stack); // stack size size_t ssz = taosArrayGetSize(node->stack); // stack size
uint64_t res = 0; uint64_t i = 0;
for (size_t i = 0; i < lsz && i < ssz; i++) { for (i = 0; i < lsz && i < ssz; i++) {
FstBuilderNodeUnfinished *un = taosArrayGet(node->stack, i); FstBuilderNodeUnfinished *un = taosArrayGet(node->stack, i);
FstLastTransition *last = un->last; FstLastTransition *t = un->last;
if (last->inp == s->data[s->start + i]) { uint64_t addPrefix = 0;
uint64_t commPrefix = last->out; if (t && t->inp == s->data[s->start + i]) {
uint64_t addPrefix = last->out - commPrefix; uint64_t commPrefix = MIN(t->out, *out);
out = out - commPrefix; uint64_t tAddPrefix = t->out - commPrefix;
last->out = commPrefix; (*out) = (*out) - commPrefix;
if (addPrefix != 0) { t->out = commPrefix;
fstBuilderNodeUnfinishedAddOutputPrefix(un, addPrefix); addPrefix = tAddPrefix;
}
} else { } else {
break; break;
}
if (addPrefix != 0) {
fstBuilderNodeUnfinishedAddOutputPrefix(un, addPrefix);
} }
} }
return res; return i;
} }
@ -780,7 +783,7 @@ void fstBuilderInsertOutput(FstBuilder *b, FstSlice bs, Output in) {
} }
if (prefixLen == FST_SLICE_LEN(s)) { if (prefixLen == FST_SLICE_LEN(s)) {
assert(out != 0); assert(out == 0);
return; return;
} }