add compare
This commit is contained in:
parent
0bbe42df45
commit
06fe44cabd
|
@ -94,7 +94,7 @@ typedef struct FstBuilderNodeUnfinished {
|
||||||
} FstBuilderNodeUnfinished;
|
} FstBuilderNodeUnfinished;
|
||||||
|
|
||||||
void fstBuilderNodeUnfinishedLastCompiled(FstBuilderNodeUnfinished *node, CompiledAddr addr);
|
void fstBuilderNodeUnfinishedLastCompiled(FstBuilderNodeUnfinished *node, CompiledAddr addr);
|
||||||
void fstBuilderNodeUnfinishedAddOutputPrefix(FstBuilderNodeUnfinished *node, CompiledAddr addr);
|
void fstBuilderNodeUnfinishedAddOutputPrefix(FstBuilderNodeUnfinished *node, Output out);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FstNode and helper function
|
* FstNode and helper function
|
||||||
|
|
|
@ -78,5 +78,7 @@ FstSlice fstSliceCopy(FstSlice *slice, uint32_t start, uint32_t end);
|
||||||
FstSlice fstSliceCreate(uint8_t *data, uint64_t dLen);
|
FstSlice fstSliceCreate(uint8_t *data, uint64_t dLen);
|
||||||
bool fstSliceEmpty(FstSlice *slice);
|
bool fstSliceEmpty(FstSlice *slice);
|
||||||
|
|
||||||
|
int fstSliceCompare(FstSlice *a, FstSlice *b);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -307,10 +307,10 @@ FstBuilder *fstBuilderCreate(void *w, FstType ty) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void fstBuilderCheckLastKey(FstBuilder *b, FstSlice bs, bool ckDupe) {
|
bool fstBuilderCheckLastKey(FstBuilder *b, FstSlice bs, bool ckDupe) {
|
||||||
return;
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CompiledAddr fstBuilderCompile(FstBuilder *b, FstBuilderNode *bn) {
|
CompiledAddr fstBuilderCompile(FstBuilder *b, FstBuilderNode *bn) {
|
||||||
if (FST_BUILDER_NODE_IS_FINAL(bn)
|
if (FST_BUILDER_NODE_IS_FINAL(bn)
|
||||||
&& FST_BUILDER_NODE_TRANS_ISEMPTY(bn)
|
&& FST_BUILDER_NODE_TRANS_ISEMPTY(bn)
|
||||||
|
@ -336,6 +336,8 @@ CompiledAddr fstBuilderCompile(FstBuilder *b, FstBuilderNode *bn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FstSlice fstNodeAsSlice(FstNode *node) {
|
FstSlice fstNodeAsSlice(FstNode *node) {
|
||||||
FstSlice *slice = &node->data;
|
FstSlice *slice = &node->data;
|
||||||
FstSlice s = fstSliceCopy(slice, slice->end, slice->dLen - 1);
|
FstSlice s = fstSliceCopy(slice, slice->end, slice->dLen - 1);
|
||||||
|
@ -354,11 +356,25 @@ FstLastTransition *fstLastTransitionCreate(uint8_t inp, Output out) {
|
||||||
void fstLastTransitionDestroy(FstLastTransition *trn) {
|
void fstLastTransitionDestroy(FstLastTransition *trn) {
|
||||||
free(trn);
|
free(trn);
|
||||||
}
|
}
|
||||||
void fstBuilderNodeUnfinishedLastCompiled(FstBuilderNodeUnfinished *node, CompiledAddr addr) {
|
void fstBuilderNodeUnfinishedLastCompiled(FstBuilderNodeUnfinished *unNode, CompiledAddr addr) {
|
||||||
|
FstLastTransition *trn = unNode->last;
|
||||||
|
FstTransition t = {.inp = trn->inp, .out = trn->out, .addr = addr};
|
||||||
|
taosArrayPush(unNode->node->trans, &t);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fstBuilderNodeUnfinishedAddOutputPrefix(FstBuilderNodeUnfinished *node, CompiledAddr addr) {
|
void fstBuilderNodeUnfinishedAddOutputPrefix(FstBuilderNodeUnfinished *unNode, Output out) {
|
||||||
|
if (FST_BUILDER_NODE_IS_FINAL(unNode->node)) {
|
||||||
|
unNode->node->finalOutput += out;
|
||||||
|
}
|
||||||
|
size_t sz = taosArrayGetSize(unNode->node->trans);
|
||||||
|
for (size_t i = 0; i < sz; i++) {
|
||||||
|
FstTransition *trn = taosArrayGet(unNode->node->trans, i);
|
||||||
|
trn->out += out;
|
||||||
|
}
|
||||||
|
if (unNode->last) {
|
||||||
|
unNode->last->out += out;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,3 +113,21 @@ bool fstSliceEmpty(FstSlice *slice) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int fstSliceCompare(FstSlice *a, FstSlice *b) {
|
||||||
|
uint32_t aLen = (a->end - a->start + 1);
|
||||||
|
uint32_t bLen = (b->end - b->start + 1);
|
||||||
|
uint32_t mLen = (aLen < bLen ? aLen : bLen);
|
||||||
|
for (int i = 0; i < mLen; i++) {
|
||||||
|
uint8_t x = a->data[i + a->start];
|
||||||
|
uint8_t y = b->data[i + b->start];
|
||||||
|
if (x == y) { continue; }
|
||||||
|
else if (x < y) { return -1; }
|
||||||
|
else { return 1; }
|
||||||
|
}
|
||||||
|
if (aLen == bLen) { return 0; }
|
||||||
|
else if (aLen < bLen) { return -1; }
|
||||||
|
else { return 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue