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