update fst struct
This commit is contained in:
parent
3322eb5ffa
commit
59cc5e4212
|
@ -20,6 +20,7 @@
|
|||
#include "tarray.h"
|
||||
#include "index_fst_util.h"
|
||||
#include "index_fst_registry.h"
|
||||
#include "index_fst_counting_writer.h"
|
||||
|
||||
|
||||
typedef struct FstNode FstNode;
|
||||
|
@ -35,7 +36,6 @@ typedef struct FstRange {
|
|||
typedef enum { OneTransNext, OneTrans, AnyTrans, EmptyFinal} State;
|
||||
typedef enum { Included, Excluded, Unbounded} FstBound;
|
||||
|
||||
typedef uint32_t CheckSummer;
|
||||
|
||||
|
||||
/*
|
||||
|
@ -60,11 +60,6 @@ void fstUnFinishedNodesAddSuffix(FstUnFinishedNodes *node, FstSlice bs, Output o
|
|||
uint64_t fstUnFinishedNodesFindCommPrefix(FstUnFinishedNodes *node, FstSlice bs);
|
||||
uint64_t FstUnFinishedNodesFindCommPreifxAndSetOutput(FstUnFinishedNodes *node, FstSlice bs, Output in, Output *out);
|
||||
|
||||
typedef struct FstCountingWriter {
|
||||
void* wtr; // wrap any writer that counts and checksum bytes written
|
||||
uint64_t count;
|
||||
CheckSummer summer;
|
||||
} FstCountingWriter;
|
||||
|
||||
typedef struct FstBuilder {
|
||||
FstCountingWriter wtr; // The FST raw data is written directly to `wtr`.
|
||||
|
|
|
@ -275,8 +275,6 @@ bool fstNodeCompile(FstNode *node, void *w, CompiledAddr lastAddr, CompiledAddr
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
FstBuilder *fstBuilderCreate(void *w, FstType ty) {
|
||||
FstBuilder *b = malloc(sizeof(FstBuilder));
|
||||
if (NULL == b) { return b; }
|
||||
|
|
|
@ -26,14 +26,13 @@ FstBuilderNode *fstBuilderNodeClone(FstBuilderNode *src) {
|
|||
FstBuilderNode *node = malloc(sizeof(FstBuilderNode));
|
||||
if (node == NULL) { return NULL; }
|
||||
|
||||
|
||||
//
|
||||
size_t sz = taosArrayGetSize(src->trans);
|
||||
SArray *trans = taosArrayInit(sz, sizeof(FstTransition));
|
||||
|
||||
for (size_t i = 0; i < sz; i++) {
|
||||
FstTransition *tran = taosArrayGet(src->trans, i);
|
||||
FstTransition t = *tran;
|
||||
taosArrayPush(trans, &t);
|
||||
taosArrayPush(trans, tran);
|
||||
}
|
||||
|
||||
node->trans = trans;
|
||||
|
@ -48,8 +47,10 @@ void fstBuilderNodeCloneFrom(FstBuilderNode *dst, FstBuilderNode *src) {
|
|||
|
||||
dst->isFinal = src->isFinal;
|
||||
dst->finalOutput = src->finalOutput;
|
||||
dst->trans = src->trans;
|
||||
|
||||
// avoid mem leak
|
||||
taosArrayDestroy(dst->trans);
|
||||
dst->trans = src->trans;
|
||||
src->trans = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ uint64_t fstRegistryHash(FstRegistry *registry, FstBuilderNode *bNode) {
|
|||
h = (h ^ (uint64_t)(trn->addr))* FNV_PRIME;
|
||||
}
|
||||
return h %(registry->tableSize);
|
||||
|
||||
}
|
||||
static void fstRegistryCellSwap(SArray *arr, uint32_t a, uint32_t b) {
|
||||
size_t sz = taosArrayGetSize(arr);
|
||||
|
@ -72,10 +73,14 @@ FstRegistry* fstRegistryCreate(uint64_t tableSize, uint64_t mruSize) {
|
|||
|
||||
uint64_t nCells = tableSize * mruSize;
|
||||
SArray* tb = (SArray *)taosArrayInit(nCells, sizeof(FstRegistryCell));
|
||||
if (NULL == tb) {
|
||||
free(registry);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (uint64_t i = 0; i < nCells; i++) {
|
||||
FstRegistryCell *cell = taosArrayGet(tb, i);
|
||||
cell->addr = NONE_ADDRESS;
|
||||
cell->node = fstBuilderNodeDefault();
|
||||
FstRegistryCell cell = {.addr = NONE_ADDRESS, .node = fstBuilderNodeDefault()};
|
||||
taosArrayPush(tb, &cell);
|
||||
}
|
||||
|
||||
registry->table = tb;
|
||||
|
@ -101,8 +106,6 @@ FstRegistryEntry *fstRegistryGetEntry(FstRegistry *registry, FstBuilderNode *bNo
|
|||
entry->addr = cell->addr ;
|
||||
return entry;
|
||||
} else {
|
||||
// clone from bNode, refactor later
|
||||
//
|
||||
fstBuilderNodeCloneFrom(cell->node, bNode);
|
||||
entry->state = NOTFOUND;
|
||||
entry->cell = cell; // copy or not
|
||||
|
|
Loading…
Reference in New Issue