update fst build struct
This commit is contained in:
parent
0aa47daf89
commit
169f6b3ad8
|
@ -99,22 +99,54 @@ 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);
|
||||
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);
|
||||
void fstStateSetCommInput(FstState* state, uint8_t inp);
|
||||
|
||||
// comm_input
|
||||
uint8_t fstStateCommInputForOneTransNext(FstState state);
|
||||
uint8_t fstStateCommInputForOneTrans(FstState state);
|
||||
uint8_t fstStateCommInput(FstState* state);
|
||||
|
||||
// input_len
|
||||
|
||||
uint64_t fstStateInputLenForOneTransNext(FstState state);
|
||||
uint64_t fstStateInputLenForOneTrans(FstState state);
|
||||
uint64_t fstStateInputLen(FstState* state);
|
||||
|
||||
|
||||
// end_addr
|
||||
uint64_t fstStateEndAddrForOneTransNext(FstState* state, FstSlice *data);
|
||||
uint64_t fstStateEndAddrForOneTrans(FstState *state, FstSlice *data, PackSizes sizes);
|
||||
uint64_t fstStateEndAddrForAnyTrans(FstState *state, uint64_t version, FstSlice *date, PackSizes sizes, uint64_t nTrans);
|
||||
// input
|
||||
uint8_t fstStateInput(FstState *state, FstNode *node);
|
||||
uint8_t fstStateInputForAnyTrans(FstState *state, FstNode *node, uint64_t i);
|
||||
|
||||
// trans_addr
|
||||
CompiledAddr fstStateTransAddr(FstState *state, FstNode *node);
|
||||
CompiledAddr fstStateTransAddrForAnyTrans(FstState *state, FstNode *node, uint64_t i);
|
||||
|
||||
// sizes
|
||||
PackSizes fstStateSizes(FstState *state, FstSlice *data);
|
||||
// Output
|
||||
Output fstStateOutput(FstState *state, FstNode *node);
|
||||
Output fstStateOutputForAnyTrans(FstState *state, FstNode *node, uint64_t i);
|
||||
|
||||
// anyTrans specify function
|
||||
|
||||
void fstStateSetFinalState(FstState *state, bool yes);
|
||||
bool fstStateIsFinalState(FstState *state);
|
||||
void fstStateSetStateNtrans(FstState *state, uint8_t n);
|
||||
// state_ntrans
|
||||
void fstStateStateNtrans(FstState *state);
|
||||
uint64_t fstStateTotalTransSize(FstState *state, uint64_t version, PackSizes size, uint64_t nTrans);
|
||||
uint64_t fstStateTransIndexSize(FstState *state, uint64_t version, uint64_t nTrans);
|
||||
uint64_t fstStateNtransLen(FstState *state);
|
||||
uint64_t fstStateNtrans(FstState *state);
|
||||
Output fstStateFinalOutput(FstState *state, uint64_t version, FstSlice *date, PackSizes sizes, uint64_t nTrans);
|
||||
uint64_t fstStateFindInput(FstState *state, FstNode *node, uint8_t b);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef __INDEX_FST_COMM_H__
|
||||
#define __INDEX_FST_COMM_H__
|
||||
|
||||
extern const uint8_t COMMON_INPUTS[];
|
||||
extern char const COMMON_INPUTS_INV[];
|
||||
|
||||
#endif
|
|
@ -18,7 +18,7 @@
|
|||
#define __INDEX_FST_UTIL_H__
|
||||
|
||||
#include "tarray.h"
|
||||
|
||||
#include "index_fst_common.h"
|
||||
|
||||
typedef uint64_t FstType;
|
||||
typedef uint64_t CompiledAddr;
|
||||
|
@ -44,6 +44,8 @@ extern const uint64_t TRANS_INDEX_THRESHOLD;
|
|||
//
|
||||
// `0` is a legal value which means there are no transitions/outputs
|
||||
|
||||
|
||||
extern
|
||||
#define FST_SET_TRANSITION_PACK_SIZE(v, sz) do {v = (v & 0b00001111) | (sz << 4} while(0)
|
||||
#define FST_GET_TRANSITION_PACK_SIZE(v) (((v) & 0b11110000) >> 4)
|
||||
#define FST_SET_OUTPUT_PACK_SIZE(v, sz) do { v = (v & 0b11110000) | sz } while(0)
|
||||
|
@ -79,7 +81,7 @@ FstSlice fstSliceCreate(uint8_t *data, uint64_t dLen);
|
|||
bool fstSliceEmpty(FstSlice *slice);
|
||||
int fstSliceCompare(FstSlice *a, FstSlice *b);
|
||||
|
||||
#define FST_SLICE_LEN(s) (s->end - s->start + 1)
|
||||
#define FST_SLICE_LEN(s) ((s)->end - (s)->start + 1)
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -185,8 +185,119 @@ static FstState stateDict[] = {
|
|||
FstState fstStateCreate(State state){
|
||||
uint8_t idx = (uint8_t)state;
|
||||
return stateDict[idx];
|
||||
}
|
||||
//compile
|
||||
void fstStateCompileForOneTransNext(FstState* state, FstCountingWriter *w, CompiledAddr addr, uint8_t inp) {
|
||||
return ;
|
||||
}
|
||||
void fstStateCompileForOneTrans(FstState* state, FstCountingWriter *w, CompiledAddr addr, FstTransition trn) {
|
||||
return ;
|
||||
|
||||
}
|
||||
void fstStateCompileForAnyTrans(FstState* state, FstCountingWriter *w, CompiledAddr addr, FstBuilderNode *node) {
|
||||
return;
|
||||
}
|
||||
|
||||
// set_comm_input
|
||||
void fstStateSetCommInput(FstState* s, uint8_t inp) {
|
||||
assert(s->state == OneTransNext || s->state == OneTrans);
|
||||
|
||||
uint8_t val;
|
||||
COMMON_INDEX(inp, 0x111111, val);
|
||||
s->val = (s->val & stateDict[s->state].val) | val;
|
||||
}
|
||||
|
||||
// comm_input
|
||||
uint8_t fstStateCommInput(FstState* s) {
|
||||
assert(s->state == OneTransNext || s->state == OneTrans);
|
||||
uint8_t v = s->val & 0b00111111;
|
||||
//v = 0 indicate that common_input is None
|
||||
return v == 0 ? 0 : COMMON_INPUT(v);
|
||||
}
|
||||
|
||||
// input_len
|
||||
|
||||
uint64_t fstStateInputLen(FstState* s) {
|
||||
assert(s->state == OneTransNext || s->state == OneTrans);
|
||||
return fstStateCommInput(s) == 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
// end_addr
|
||||
uint64_t fstStateEndAddrForOneTransNext(FstState* s, FstSlice *data) {
|
||||
return FST_SLICE_LEN(data) - 1 - fstStateInputLen(s);
|
||||
}
|
||||
uint64_t fstStateEndAddrForOneTrans(FstState *s, FstSlice *data, PackSizes sizes) {
|
||||
return FST_SLICE_LEN(data) - 1 - fstStateInputLen(s) - 1 - FST_GET_TRANSITION_PACK_SIZE(sizes) - FST_GET_OUTPUT_PACK_SIZE(sizes);
|
||||
}
|
||||
uint64_t fstStateEndAddrForAnyTrans(FstState *state, uint64_t version, FstSlice *date, PackSizes sizes, uint64_t nTrans) {
|
||||
return 1;
|
||||
}
|
||||
// input
|
||||
uint8_t fstStateInput(FstState *state, FstNode *node) {
|
||||
return 1;
|
||||
}
|
||||
uint8_t fstStateInputForAnyTrans(FstState *state, FstNode *node, uint64_t i) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// trans_addr
|
||||
CompiledAddr fstStateTransAddr(FstState *state, FstNode *node) {
|
||||
return 1;
|
||||
}
|
||||
CompiledAddr fstStateTransAddrForAnyTrans(FstState *state, FstNode *node, uint64_t i) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// sizes
|
||||
PackSizes fstStateSizes(FstState *state, FstSlice *data) {
|
||||
return 1;
|
||||
}
|
||||
// Output
|
||||
Output fstStateOutput(FstState *state, FstNode *node) {
|
||||
return 1;
|
||||
|
||||
}
|
||||
Output fstStateOutputForAnyTrans(FstState *state, FstNode *node, uint64_t i) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// anyTrans specify function
|
||||
|
||||
void fstStateSetFinalState(FstState *state, bool yes) {
|
||||
return;
|
||||
}
|
||||
bool fstStateIsFinalState(FstState *state) {
|
||||
return false;
|
||||
}
|
||||
void fstStateSetStateNtrans(FstState *state, uint8_t n) {
|
||||
return;
|
||||
}
|
||||
// state_ntrans
|
||||
void fstStateStateNtrans(FstState *state) {
|
||||
return ;
|
||||
}
|
||||
uint64_t fstStateTotalTransSize(FstState *state, uint64_t version, PackSizes size, uint64_t nTrans) {
|
||||
return 1;
|
||||
}
|
||||
uint64_t fstStateTransIndexSize(FstState *state, uint64_t version, uint64_t nTrans) {
|
||||
return 1;
|
||||
}
|
||||
uint64_t fstStateNtransLen(FstState *state) {
|
||||
return 1;
|
||||
}
|
||||
uint64_t fstStateNtrans(FstState *state) {
|
||||
return 1;
|
||||
}
|
||||
Output fstStateFinalOutput(FstState *state, uint64_t version, FstSlice *date, PackSizes sizes, uint64_t nTrans) {
|
||||
return 1;
|
||||
|
||||
}
|
||||
uint64_t fstStateFindInput(FstState *state, FstNode *node, uint8_t b) {
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// fst node function
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
*/
|
||||
|
||||
#include "tutil.h"
|
||||
|
||||
const uint8_t COMMON_INPUTS[] = {
|
||||
84, // '\x00'
|
||||
85, // '\x01'
|
||||
|
@ -273,7 +274,7 @@ const uint8_t COMMON_INPUTS[] = {
|
|||
255, // 'ÿ'
|
||||
};
|
||||
|
||||
char const COMMON_INPUTS_INV[] = {
|
||||
const char COMMON_INPUTS_INV[] = {
|
||||
't', 'e', '/', 'o', 'a', 's', 'r', 'i', 'p', 'c', 'n', 'w',
|
||||
'.', 'h', 'l', 'm', '-', 'd', 'u', '0', '1', '2', 'g', '=',
|
||||
':', 'b', 'f', '3', 'y', '5', '&', '_', '4', 'v', '9', '6',
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "index_fst_util.h"
|
||||
#include "index_fst_common.h"
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue