commit
27f465bd7d
|
@ -251,8 +251,14 @@ void fstDestroy(Fst *fst);
|
||||||
|
|
||||||
bool fstGet(Fst *fst, FstSlice *b, Output *out);
|
bool fstGet(Fst *fst, FstSlice *b, Output *out);
|
||||||
FstNode* fstGetNode(Fst *fst, CompiledAddr);
|
FstNode* fstGetNode(Fst *fst, CompiledAddr);
|
||||||
|
FstNode* fstGetRoot(Fst *fst);
|
||||||
FstType fstGetType(Fst *fst);
|
FstType fstGetType(Fst *fst);
|
||||||
CompiledAddr fstGetRootAddr(Fst *fst);
|
CompiledAddr fstGetRootAddr(Fst *fst);
|
||||||
|
|
||||||
Output fstEmptyFinalOutput(Fst *fst, bool *null);
|
Output fstEmptyFinalOutput(Fst *fst, bool *null);
|
||||||
bool fstVerify(Fst *fst);
|
bool fstVerify(Fst *fst);
|
||||||
|
|
||||||
|
|
||||||
|
//refactor this function
|
||||||
|
bool fstBuilderNodeCompileTo(FstBuilderNode *b, FstCountingWriter *wrt, CompiledAddr lastAddr, CompiledAddr startAddr);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,7 +41,7 @@ FstBuilderNode *fstBuilderNodeClone(FstBuilderNode *src);
|
||||||
|
|
||||||
void fstBuilderNodeCloneFrom(FstBuilderNode *dst, FstBuilderNode *src);
|
void fstBuilderNodeCloneFrom(FstBuilderNode *dst, FstBuilderNode *src);
|
||||||
|
|
||||||
bool fstBuilderNodeCompileTo(FstBuilderNode *b, FstCountingWriter *wrt, CompiledAddr lastAddr, CompiledAddr startAddr);
|
//bool fstBuilderNodeCompileTo(FstBuilderNode *b, FstCountingWriter *wrt, CompiledAddr lastAddr, CompiledAddr startAddr);
|
||||||
|
|
||||||
void fstBuilderNodeDestroy(FstBuilderNode *node);
|
void fstBuilderNodeDestroy(FstBuilderNode *node);
|
||||||
|
|
||||||
|
|
|
@ -733,6 +733,11 @@ bool fstNodeCompile(FstNode *node, void *w, CompiledAddr lastAddr, CompiledAddr
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fstBuilderNodeCompileTo(FstBuilderNode *b, FstCountingWriter *wrt, CompiledAddr lastAddr, CompiledAddr startAddr) {
|
||||||
|
return fstNodeCompile(NULL, wrt, lastAddr, startAddr, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FstBuilder *fstBuilderCreate(void *w, FstType ty) {
|
FstBuilder *fstBuilderCreate(void *w, FstType ty) {
|
||||||
FstBuilder *b = malloc(sizeof(FstBuilder));
|
FstBuilder *b = malloc(sizeof(FstBuilder));
|
||||||
|
@ -985,15 +990,39 @@ void fstDestroy(Fst *fst) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fstGet(Fst *fst, FstSlice *b, Output *out) {
|
bool fstGet(Fst *fst, FstSlice *b, Output *out) {
|
||||||
|
FstNode *root = fstGetRoot(fst);
|
||||||
|
Output tOut = 0;
|
||||||
|
for (uint32_t i = 0; i < b->dLen; i++) {
|
||||||
|
uint8_t inp = b->data[i];
|
||||||
|
Output res = 0;
|
||||||
|
bool null = fstNodeFindInput(root, inp, &res);
|
||||||
|
if (null) { return false; }
|
||||||
|
|
||||||
|
FstTransition trn;
|
||||||
|
fstNodeGetTransitionAt(root, res, &trn);
|
||||||
|
tOut += trn.out;
|
||||||
|
root = fstGetNode(fst, trn.addr);
|
||||||
|
}
|
||||||
|
if (!FST_NODE_IS_FINAL(root)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
tOut = tOut + FST_NODE_FINAL_OUTPUT(root);
|
||||||
|
}
|
||||||
|
*out = tOut;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FstNode *fstGetRoot(Fst *fst) {
|
||||||
|
CompiledAddr root = fstGetRootAddr(fst);
|
||||||
|
return fstGetNode(fst, root);
|
||||||
|
}
|
||||||
FstNode* fstGetNode(Fst *fst, CompiledAddr addr) {
|
FstNode* fstGetNode(Fst *fst, CompiledAddr addr) {
|
||||||
if (fst->root != NULL) {
|
if (fst->root != NULL) {
|
||||||
return fst->root;
|
return fst->root;
|
||||||
}
|
}
|
||||||
fst->root = fstNodeCreate(fst->meta->version, addr, fst->data);
|
fst->root = fstNodeCreate(fst->meta->version, addr, fst->data);
|
||||||
|
|
||||||
return fst->root;
|
return fst->root;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1016,15 +1045,14 @@ Output fstEmptyFinalOutput(Fst *fst, bool *null) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool fstVerify(Fst *fst) {
|
bool fstVerify(Fst *fst) {
|
||||||
uint32_t checkSum = fst->meta->checkSum;
|
uint32_t checkSum = fst->meta->checkSum;
|
||||||
FstSlice *data = fst->data;
|
FstSlice *data = fst->data;
|
||||||
TSCKSUM initSum = 0;
|
TSCKSUM initSum = 0;
|
||||||
if (taosCheckChecksumWhole(data->data, data->dLen)) {
|
if (!taosCheckChecksumWhole(data->data, data->dLen)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -59,26 +59,27 @@ void fstBuilderNodeCloneFrom(FstBuilderNode *dst, FstBuilderNode *src) {
|
||||||
src->trans = NULL;
|
src->trans = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fstBuilderNodeCompileTo(FstBuilderNode *b, FstCountingWriter *wrt, CompiledAddr lastAddr, CompiledAddr startAddr) {
|
//bool fstBuilderNodeCompileTo(FstBuilderNode *b, FstCountingWriter *wrt, CompiledAddr lastAddr, CompiledAddr startAddr) {
|
||||||
size_t sz = taosArrayGetSize(b->trans);
|
|
||||||
assert(sz < 256);
|
//size_t sz = taosArrayGetSize(b->trans);
|
||||||
if (FST_BUILDER_NODE_IS_FINAL(b)
|
//assert(sz < 256);
|
||||||
&& FST_BUILDER_NODE_TRANS_ISEMPTY(b)
|
//if (FST_BUILDER_NODE_IS_FINAL(b)
|
||||||
&& FST_BUILDER_NODE_FINALOUTPUT_ISZERO(b)) {
|
// && FST_BUILDER_NODE_TRANS_ISEMPTY(b)
|
||||||
return true;
|
// && FST_BUILDER_NODE_FINALOUTPUT_ISZERO(b)) {
|
||||||
} else if (sz != 1 || b->isFinal) {
|
// return true;
|
||||||
// AnyTrans->Compile(w, addr, node);
|
//} else if (sz != 1 || b->isFinal) {
|
||||||
} else {
|
// // AnyTrans->Compile(w, addr, node);
|
||||||
FstTransition *tran = taosArrayGet(b->trans, 0);
|
//} else {
|
||||||
if (tran->addr == lastAddr && tran->out == 0) {
|
// FstTransition *tran = taosArrayGet(b->trans, 0);
|
||||||
//OneTransNext::compile(w, lastAddr, tran->inp);
|
// if (tran->addr == lastAddr && tran->out == 0) {
|
||||||
return true;
|
// //OneTransNext::compile(w, lastAddr, tran->inp);
|
||||||
} else {
|
// return true;
|
||||||
//OneTrans::Compile(w, lastAddr, *tran);
|
// } else {
|
||||||
return true;
|
// //OneTrans::Compile(w, lastAddr, *tran);
|
||||||
}
|
// return true;
|
||||||
}
|
// }
|
||||||
return true;
|
//}
|
||||||
}
|
//return true;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue