update fst core struct
This commit is contained in:
parent
20203e47eb
commit
d39f80185f
|
@ -35,6 +35,7 @@ void fstCountingWriterDestroy(FstCountingWriter *w);
|
|||
|
||||
|
||||
void fstCountingWriterPackUintIn(FstCountingWriter *writer, uint64_t n, uint8_t nBytes);
|
||||
uint8_t fstCountingWriterPackUint(FstCountingWriter *writer, uint64_t n);
|
||||
|
||||
|
||||
#define FST_WRITER_COUNT(writer) (writer->count)
|
||||
|
|
|
@ -21,9 +21,10 @@ static void fstPackDeltaIn(FstCountingWriter *wrt, CompiledAddr nodeAddr, Compil
|
|||
CompiledAddr deltaAddr = (transAddr == EMPTY_ADDRESS) ? EMPTY_ADDRESS : nodeAddr - transAddr;
|
||||
fstCountingWriterPackUintIn(wrt, deltaAddr, nBytes);
|
||||
}
|
||||
static void fstPackDetla(FstCountingWriter *wrt, CompiledAddr nodeAddr, CompiledAddr transAddr) {
|
||||
static uint8_t fstPackDetla(FstCountingWriter *wrt, CompiledAddr nodeAddr, CompiledAddr transAddr) {
|
||||
uint8_t nBytes = packDeltaSize(nodeAddr, transAddr);
|
||||
fstPackDeltaIn(wrt, nodeAddr, transAddr, nBytes);
|
||||
return nBytes;
|
||||
}
|
||||
|
||||
FstUnFinishedNodes *fstUnFinishedNodesCreate() {
|
||||
|
@ -213,8 +214,24 @@ void fstStateCompileForOneTransNext(FstCountingWriter *w, CompiledAddr addr, uin
|
|||
return;
|
||||
}
|
||||
void fstStateCompileForOneTrans(FstCountingWriter *w, CompiledAddr addr, FstTransition* trn) {
|
||||
Output val = trn->out;
|
||||
Output out = trn->out;
|
||||
uint8_t outPackSize = (out == 0 ? 0 : fstCountingWriterPackUint(w, out));
|
||||
uint8_t transPackSize = fstPackDetla(w, addr, trn->addr);
|
||||
PackSizes packSizes = 0;
|
||||
|
||||
FST_SET_OUTPUT_PACK_SIZE(packSizes, outPackSize);
|
||||
FST_SET_TRANSITION_PACK_SIZE(packSizes, transPackSize);
|
||||
fstCountingWriterWrite(w, (char *)&packSizes, sizeof(packSizes));
|
||||
|
||||
FstState st = fstStateCreate(OneTrans);
|
||||
|
||||
fstStateSetCommInput(&st, trn->inp);
|
||||
bool null = false;
|
||||
uint8_t inp = fstStateCommInput(&st, &null);
|
||||
if (null == true) {
|
||||
fstCountingWriterWrite(w, (char *)&trn->inp, sizeof(trn->inp));
|
||||
}
|
||||
fstCountingWriterWrite(w, (char *)(&(st.val)), sizeof(st.val));
|
||||
return ;
|
||||
|
||||
}
|
||||
|
@ -267,7 +284,7 @@ void fstStateCompileForAnyTrans(FstCountingWriter *w, CompiledAddr addr, FstBuil
|
|||
// at that index. (Except when there are 256 transitions.) Namely,
|
||||
// any value greater than or equal to the number of transitions in
|
||||
// this node indicates an absent transition.
|
||||
uint8_t *index = malloc(sizeof(uint8_t) * 256);
|
||||
uint8_t *index = (uint8_t *)malloc(sizeof(uint8_t) * 256);
|
||||
for (uint8_t i = 0; i < 256; i++) {
|
||||
index[i] = 255;
|
||||
}
|
||||
|
@ -277,6 +294,7 @@ void fstStateCompileForAnyTrans(FstCountingWriter *w, CompiledAddr addr, FstBuil
|
|||
fstCountingWriterWrite(w, (char *)index, sizeof(index));
|
||||
//fstPackDeltaIn(w, addr, t->addr, tSize);
|
||||
}
|
||||
free(index);
|
||||
}
|
||||
fstCountingWriterWrite(w, (char *)&packSizes, 1);
|
||||
bool null = false;
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "tutil.h"
|
||||
#include "index_fst_util.h"
|
||||
#include "index_fst_counting_writer.h"
|
||||
|
||||
FstCountingWriter *fstCountingWriterCreate(void *wrt) {
|
||||
|
@ -42,7 +43,21 @@ int fstCountingWriterFlush(FstCountingWriter *write) {
|
|||
}
|
||||
|
||||
void fstCountingWriterPackUintIn(FstCountingWriter *writer, uint64_t n, uint8_t nBytes) {
|
||||
assert(1 <= nBytes && nBytes <= 8);
|
||||
uint8_t *buf = calloc(8, sizeof(uint8_t));
|
||||
for (uint8_t i = 0; i < nBytes; i++) {
|
||||
buf[i] = (uint8_t)n;
|
||||
n = n >> 8;
|
||||
}
|
||||
fstCountingWriterWrite(writer, buf, nBytes);
|
||||
free(buf);
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t fstCountingWriterPackUint(FstCountingWriter *writer, uint64_t n) {
|
||||
uint8_t nBytes = packSize(n);
|
||||
fstCountingWriterPackUintIn(writer, n, nBytes);
|
||||
return nBytes;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue