提交 0aa47daf 编写于 作者: dengyihao's avatar dengyihao

update fst build struct

上级 93c102e2
...@@ -95,7 +95,32 @@ typedef struct FstState { ...@@ -95,7 +95,32 @@ typedef struct FstState {
uint8_t val; uint8_t val;
} FstState; } FstState;
FstState fstStateCreate(FstSlice* data, CompiledAddr addr); FstState fstStateCreateFrom(FstSlice* data, CompiledAddr addr);
FstState fstStateCreate(State state);
//compile
void fstStateCompileForOneTransNext(FstState state, FstCountingWriter *w, CompiledAddr addr, uint8_t inp);
void fstStateCompileForOneTrans(FstState state, FstCountingWriter *w, CompiledAddr addr, FstTransition trn);
void fstStateCompileForAnyTrans(FstState state, FstCountingWriter *w, CompiledAddr addr, FstBuilderNode *node);
// set_comm_input
void fstStateSetCommInputForOneTransNext(FstState state, uint8_t inp);
void fstStateSetCommInputForOneTrans(FstState state, uint8_t inp);
// comm_input
uint8_t fstStateCommInputForOneTransNext(FstState state);
uint8_t fstStateCommInputForOneTrans(FstState state);
// input_len
uint64_t fstStateInputLenForOneTransNext(FstState state);
uint64_t fstStateInputLenForOneTrans(FstState state);
#define FST_STATE_ONE_TRNAS_NEXT(node) (node->state.state == OneTransNext) #define FST_STATE_ONE_TRNAS_NEXT(node) (node->state.state == OneTransNext)
#define FST_STATE_ONE_TRNAS(node) (node->state.state == OneTrans) #define FST_STATE_ONE_TRNAS(node) (node->state.state == OneTrans)
......
...@@ -156,7 +156,7 @@ uint64_t fstUnFinishedNodesFindCommPrefixAndSetOutput(FstUnFinishedNodes *node, ...@@ -156,7 +156,7 @@ uint64_t fstUnFinishedNodesFindCommPrefixAndSetOutput(FstUnFinishedNodes *node,
} }
FstState fstStateCreate(FstSlice* slice, CompiledAddr addr) { FstState fstStateCreateFrom(FstSlice* slice, CompiledAddr addr) {
FstState fs = {.state = EmptyFinal, .val = 0}; FstState fs = {.state = EmptyFinal, .val = 0};
if (addr == EMPTY_ADDRESS) { if (addr == EMPTY_ADDRESS) {
return fs; return fs;
...@@ -175,13 +175,26 @@ FstState fstStateCreate(FstSlice* slice, CompiledAddr addr) { ...@@ -175,13 +175,26 @@ FstState fstStateCreate(FstSlice* slice, CompiledAddr addr) {
return fs; return fs;
} }
static FstState stateDict[] = {
{.state = OneTransNext, .val = 0b11000000},
{.state = OneTrans, .val = 0b10000000},
{.state = AnyTrans, .val = 0b00000000},
{.state = EmptyFinal, .val = 0b00000000}
};
FstState fstStateCreate(State state){
uint8_t idx = (uint8_t)state;
return stateDict[idx];
}
// fst node function // fst node function
FstNode *fstNodeCreate(int64_t version, CompiledAddr addr, FstSlice *slice) { FstNode *fstNodeCreate(int64_t version, CompiledAddr addr, FstSlice *slice) {
FstNode *n = (FstNode *)malloc(sizeof(FstNode)); FstNode *n = (FstNode *)malloc(sizeof(FstNode));
if (n == NULL) { return NULL; } if (n == NULL) { return NULL; }
FstState st = fstStateCreate(slice, addr); FstState st = fstStateCreateFrom(slice, addr);
if (st.state == EmptyFinal) { if (st.state == EmptyFinal) {
n->data = fstSliceCreate(NULL, 0); n->data = fstSliceCreate(NULL, 0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册