refactor builder struct
This commit is contained in:
parent
d0844e5dda
commit
7e1f68f86f
|
@ -93,6 +93,28 @@ uint8_t *fstSliceData(FstSlice *s, int32_t *sz);
|
||||||
|
|
||||||
#define FST_SLICE_LEN(s) (s->end - s->start + 1)
|
#define FST_SLICE_LEN(s) (s->end - s->start + 1)
|
||||||
|
|
||||||
|
//// stack
|
||||||
|
//
|
||||||
|
//typedef (*StackFreeElemFn)(void *elem);
|
||||||
|
//
|
||||||
|
//typedef struct FstStack {
|
||||||
|
// void *first;
|
||||||
|
// void *end;
|
||||||
|
// size_t elemSize;
|
||||||
|
// size_t nElem;
|
||||||
|
// StackFreeElemFn fn;
|
||||||
|
//} FstStack;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//FstStack* fstStackCreate(size_t elemSize, stackFreeElem);
|
||||||
|
//void *fstStackPush(FstStack *s, void *elem);
|
||||||
|
//void *fstStackTop(FstStack *s);
|
||||||
|
//size_t fstStackLen(FstStack *s);
|
||||||
|
//void fstStackDestory(FstStack *);
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -40,6 +40,7 @@ void unFinishedNodeDestroyElem(void* elem) {
|
||||||
FstBuilderNodeUnfinished *b = (FstBuilderNodeUnfinished*)elem;
|
FstBuilderNodeUnfinished *b = (FstBuilderNodeUnfinished*)elem;
|
||||||
fstBuilderNodeDestroy(b->node);
|
fstBuilderNodeDestroy(b->node);
|
||||||
free(b->last);
|
free(b->last);
|
||||||
|
b->last = NULL;
|
||||||
}
|
}
|
||||||
void fstUnFinishedNodesDestroy(FstUnFinishedNodes *nodes) {
|
void fstUnFinishedNodesDestroy(FstUnFinishedNodes *nodes) {
|
||||||
if (nodes == NULL) { return; }
|
if (nodes == NULL) { return; }
|
||||||
|
@ -62,15 +63,15 @@ FstBuilderNode *fstUnFinishedNodesPopRoot(FstUnFinishedNodes *nodes) {
|
||||||
assert(taosArrayGetSize(nodes->stack) == 1);
|
assert(taosArrayGetSize(nodes->stack) == 1);
|
||||||
|
|
||||||
FstBuilderNodeUnfinished *un = taosArrayPop(nodes->stack);
|
FstBuilderNodeUnfinished *un = taosArrayPop(nodes->stack);
|
||||||
//assert(un->last == NULL);
|
assert(un->last == NULL);
|
||||||
return un->node;
|
return un->node;
|
||||||
}
|
}
|
||||||
|
|
||||||
FstBuilderNode *fstUnFinishedNodesPopFreeze(FstUnFinishedNodes *nodes, CompiledAddr addr) {
|
FstBuilderNode *fstUnFinishedNodesPopFreeze(FstUnFinishedNodes *nodes, CompiledAddr addr) {
|
||||||
FstBuilderNodeUnfinished *un = taosArrayPop(nodes->stack);
|
FstBuilderNodeUnfinished *un = taosArrayPop(nodes->stack);
|
||||||
fstBuilderNodeUnfinishedLastCompiled(un, addr);
|
fstBuilderNodeUnfinishedLastCompiled(un, addr);
|
||||||
free(un->last); // TODO add func FstLastTransitionFree()
|
//free(un->last); // TODO add func FstLastTransitionFree()
|
||||||
un->last = NULL;
|
//un->last = NULL;
|
||||||
return un->node;
|
return un->node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -937,9 +938,10 @@ void fstLastTransitionDestroy(FstLastTransition *trn) {
|
||||||
void fstBuilderNodeUnfinishedLastCompiled(FstBuilderNodeUnfinished *unNode, CompiledAddr addr) {
|
void fstBuilderNodeUnfinishedLastCompiled(FstBuilderNodeUnfinished *unNode, CompiledAddr addr) {
|
||||||
FstLastTransition *trn = unNode->last;
|
FstLastTransition *trn = unNode->last;
|
||||||
if (trn == NULL) { return; }
|
if (trn == NULL) { return; }
|
||||||
|
|
||||||
FstTransition t = {.inp = trn->inp, .out = trn->out, .addr = addr};
|
FstTransition t = {.inp = trn->inp, .out = trn->out, .addr = addr};
|
||||||
taosArrayPush(unNode->node->trans, &t);
|
taosArrayPush(unNode->node->trans, &t);
|
||||||
|
fstLastTransitionDestroy(trn);
|
||||||
|
unNode->last = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -174,5 +174,18 @@ int fstSliceCompare(FstSlice *a, FstSlice *b) {
|
||||||
else { return 0; }
|
else { return 0; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//FstStack* fstStackCreate(size_t elemSize, StackFreeElem freeFn) {
|
||||||
|
// FstStack *s = calloc(1, sizeof(FstStack));
|
||||||
|
// if (s == NULL) { return NULL; }
|
||||||
|
// s->
|
||||||
|
// s->freeFn
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
//void *fstStackPush(FstStack *s, void *elem);
|
||||||
|
//void *fstStackTop(FstStack *s);
|
||||||
|
//size_t fstStackLen(FstStack *s);
|
||||||
|
//void *fstStackGetAt(FstStack *s, size_t i);
|
||||||
|
//void fstStackDestory(FstStack *);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -63,19 +63,26 @@
|
||||||
//}
|
//}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
std::string str("abc");
|
FstBuilder *b = fstBuilderCreate(NULL, 1);
|
||||||
FstSlice key = fstSliceCreate((uint8_t *)str.c_str(), str.size());
|
{
|
||||||
Output val = 1;
|
std::string str("abc");
|
||||||
|
FstSlice key = fstSliceCreate((uint8_t *)str.c_str(), str.size());
|
||||||
|
Output val = 1;
|
||||||
|
fstBuilderInsert(b, key, val);
|
||||||
|
}
|
||||||
|
|
||||||
//std::string str1("bcd");
|
//std::string str1("bcd");
|
||||||
//FstSlice key1 = fstSliceCreate((uint8_t *)str1.c_str(), str1.size());
|
//FstSlice key1 = fstSliceCreate((uint8_t *)str1.c_str(), str1.size());
|
||||||
//Output val2 = 10;
|
//Output val2 = 10;
|
||||||
FstBuilder *b = fstBuilderCreate(NULL, 1);
|
{
|
||||||
fstBuilderInsert(b, key, val);
|
std::string str("bcd");
|
||||||
|
FstSlice key = fstSliceCreate((uint8_t *)str.c_str(), str.size());
|
||||||
|
Output val = 1;
|
||||||
|
fstBuilderInsert(b, key, val);
|
||||||
|
}
|
||||||
//fstBuilderInsert(b, key1, val2);
|
//fstBuilderInsert(b, key1, val2);
|
||||||
fstBuilderFinish(b);
|
fstBuilderFinish(b);
|
||||||
fstBuilderDestroy(b);
|
fstBuilderDestroy(b);
|
||||||
fstSliceDestroy(&key);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue