update fst core struct
This commit is contained in:
parent
e10b4bc05e
commit
c0ca718eed
|
@ -230,10 +230,12 @@ typedef struct FstMeta {
|
||||||
} FstMeta;
|
} FstMeta;
|
||||||
|
|
||||||
typedef struct Fst {
|
typedef struct Fst {
|
||||||
FstMeta meta;
|
FstMeta *meta;
|
||||||
void *data; //
|
void *data; //
|
||||||
} Fst;
|
} Fst;
|
||||||
|
|
||||||
|
Fst* fstCreate(FstSlice *data);
|
||||||
|
void fstDestroy(Fst *fst);
|
||||||
// ops
|
// ops
|
||||||
|
|
||||||
typedef struct FstIndexedValue {
|
typedef struct FstIndexedValue {
|
||||||
|
|
|
@ -32,9 +32,9 @@ extern const CompiledAddr EMPTY_ADDRESS;
|
||||||
extern const CompiledAddr NONE_ADDRESS;
|
extern const CompiledAddr NONE_ADDRESS;
|
||||||
|
|
||||||
// This version number is written to every finite state transducer created by
|
// This version number is written to every finite state transducer created by
|
||||||
// this crate. When a finite state transducer is read, its version number is
|
// this version When a finite state transducer is read, its version number is
|
||||||
// checked against this value.
|
// checked against this value.
|
||||||
extern const uint64_t version;
|
extern const uint64_t VERSION;
|
||||||
// The threshold (in number of transitions) at which an index is created for
|
// The threshold (in number of transitions) at which an index is created for
|
||||||
// a node's transitions. This speeds up lookup time at the expense of FST size
|
// a node's transitions. This speeds up lookup time at the expense of FST size
|
||||||
|
|
||||||
|
|
|
@ -919,4 +919,61 @@ void fstBuilderNodeUnfinishedAddOutputPrefix(FstBuilderNodeUnfinished *unNode, O
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Fst* fstCreate(FstSlice *slice) {
|
||||||
|
|
||||||
|
char *buf = slice->data;
|
||||||
|
uint64_t skip = 0;
|
||||||
|
uint64_t len = slice->dLen;
|
||||||
|
if (len < 36) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t version;
|
||||||
|
taosDecodeFixedU64(buf, &version);
|
||||||
|
skip += sizeof(version);
|
||||||
|
if (version == 0 || version > VERSION) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t type;
|
||||||
|
taosDecodeFixedU64(buf + skip, &type);
|
||||||
|
skip += sizeof(type);
|
||||||
|
|
||||||
|
uint32_t checkSum = 0;
|
||||||
|
len -= sizeof(checkSum);
|
||||||
|
taosDecodeFixedU32(buf + len, &checkSum);
|
||||||
|
|
||||||
|
CompiledAddr rootAddr;
|
||||||
|
len -= sizeof(rootAddr);
|
||||||
|
taosDecodeFixedU64(buf + len, &rootAddr);
|
||||||
|
|
||||||
|
uint64_t fstLen;
|
||||||
|
len -= sizeof(fstLen);
|
||||||
|
taosDecodeFixedU64(buf + len, &fstLen);
|
||||||
|
//TODO(validat root addr)
|
||||||
|
//
|
||||||
|
Fst *fst= (Fst *)calloc(1, sizeof(Fst));
|
||||||
|
if (fst == NULL) { return NULL; }
|
||||||
|
|
||||||
|
fst->meta = (FstMeta *)malloc(sizeof(FstMeta));
|
||||||
|
if (NULL == fst->meta) {
|
||||||
|
goto FST_CREAT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
fst->meta->version = version;
|
||||||
|
fst->meta->rootAddr = rootAddr;
|
||||||
|
fst->meta->ty = type;
|
||||||
|
fst->meta->len = fstLen;
|
||||||
|
fst->meta->checkSum = checkSum;
|
||||||
|
return fst;
|
||||||
|
|
||||||
|
FST_CREAT_FAILED:
|
||||||
|
free(fst->meta);
|
||||||
|
free(fst);
|
||||||
|
|
||||||
|
}
|
||||||
|
void fstDestroy(Fst *fst) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ const CompiledAddr NONE_ADDRESS = 1;
|
||||||
// This version number is written to every finite state transducer created by
|
// This version number is written to every finite state transducer created by
|
||||||
// this crate. When a finite state transducer is read, its version number is
|
// this crate. When a finite state transducer is read, its version number is
|
||||||
// checked against this value.
|
// checked against this value.
|
||||||
const uint64_t version = 3;
|
const uint64_t VERSION = 3;
|
||||||
// The threshold (in number of transitions) at which an index is created for
|
// The threshold (in number of transitions) at which an index is created for
|
||||||
// a node's transitions. This speeds up lookup time at the expense of FST size
|
// a node's transitions. This speeds up lookup time at the expense of FST size
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue