Lines Matching refs:fst

104 int sprintf_arc(char* buf, srec_context* fst, FSMarc* arc);
105 int printf_arc1(srec_context* fst, char* msg, FSMarc* arc);
106 int printf_node1(srec_context* fst, FSMnode* node);
108 /* fst_* functions are internal fst functions */
109 int fst_add_arcs(srec_context* fst, nodeID start_node, nodeID end_node,
112 int fst_push_arc_olabel(srec_context* fst, FSMarc* arc);
113 int fst_push_arc_cost(srec_context* fst, FSMarc* arc);
114 int fst_pull_arc_olabel(srec_context* fst, FSMarc* arc);
115 int fst_free_arc(srec_context* fst, FSMarc* arc);
116 int fst_free_node(srec_context* fst, FSMnode* node);
117 int fst_free_arc_net(srec_context* fst, FSMarc* arc);
118 arcID fst_get_free_arc(srec_context* fst);
119 nodeID fst_get_free_node(srec_context* fst);
120 int fst_pack_arc_usage(srec_context* fst);
122 void append_arc_arriving_node(srec_context* fst, FSMnode* to_node, FSMarc_ptr atok);
123 void append_arc_leaving_node(srec_context* fst, FSMnode* fr_node, FSMarc_ptr atok);
124 int num_arcs_leaving(srec_context* fst, FSMnode* node);
126 int num_arcs_arriving(srec_context* fst, FSMnode* node);
127 int num_arcs_arriving_gt_1(srec_context* fst, FSMnode* node);
137 int FST_AttachArbdata(srec_context* fst, srec_arbdata* allophone_tree);
883 int FST_AttachArbdata(srec_context* fst, srec_arbdata* allophone_tree)
888 fst->allotree = allophone_tree;
891 fst->hmm_info_for_ilabel = allophone_tree->hmm_infos - fst->hmm_ilabel_offset;
893 if (allotree__modelid != 0 && fst->modelid != 0)
895 if (allotree__modelid != fst->modelid)
897 PLogError("Error: modelids disagree, sgcbaseline(%u) arbdata(%u)", fst->modelid, allotree__modelid);
919 srec_context* fst = pfst;
962 fst->olabels = omap;
966 fst->ilabels = imap;
967 fst->hmm_ilabel_offset = wordmap_find_index(fst->ilabels, "hmm0");
968 ASSERT(fst->hmm_ilabel_offset >= 0);
972 fst->ilabels = (wordmap*)CALLOC_CLR(1, sizeof(wordmap), "srec.graph.imap");
973 fst->ilabels->num_words = fst->ilabels->max_words = 0;
974 fst->ilabels->words = 0;
978 fst->hmm_ilabel_offset = 128; /* should match MAX_PHONEMES */
980 fst->FSMarc_list = (FSMarc*)CALLOC_CLR(max_num_FSMarcs, sizeof(FSMarc), "srec.graph.arcs");
981 fst->FSMnode_list = (FSMnode*)CALLOC_CLR(max_num_FSMnodes, sizeof(FSMnode), "srec.graph.nodes");
982 fst->FSMnode_info_list = (FSMnode_info*)CALLOC_CLR(max_num_FSMnodes, sizeof(char), "srec.graph.nodeinfos");
985 fst->FSMarc_freelist = 0;
986 fst->num_arcs = 0;
989 fst->FSMarc_list[i].linkl_next_arc = ARC_ItoX(i + 1);
990 fst->FSMarc_list[i].linkl_prev_arc = FSMARC_FREE;
992 fst->FSMarc_list[i].linkl_next_arc = FSMARC_NULL;
993 fst->FSMarc_list[i].linkl_prev_arc = FSMARC_FREE;
996 fst->num_nodes = 0;
999 fr_node = &fst->FSMnode_list[i];
1039 fst->end_node = from_node;
1043 new_arc_id = fst_get_free_arc(fst);
1049 fr_node = &fst->FSMnode_list[from_node];
1050 to_node = &fst->FSMnode_list[into_node];
1051 if (fst->ilabels->num_words == 0)
1053 atoken->ilabel = hmm_number(ilabel_str, fst->hmm_ilabel_offset);
1056 atoken->ilabel = fst->hmm_ilabel_offset + SLOTLOOP_OFFSET;
1060 atoken->ilabel = wordmap_find_index(fst->ilabels, ilabel_str);
1062 atoken->olabel = wordmap_find_index(fst->olabels, olabel_str);
1071 atoken->ilabel_str = (atoken->ilabel < fst->ilabels->num_words ? fst->ilabels->words[atoken->ilabel] : 0);
1072 atoken->olabel_str = (atoken->olabel < fst->olabels->num_words ? fst->olabels->words[atoken->olabel] : 0);
1074 append_arc_leaving_node(fst, fr_node, atok);
1077 append_arc_arriving_node(fst, to_node, atok);
1083 ASSERT(fst->num_arcs == num_arcs);
1089 fst->FSMnode_freelist = num_nodes;
1092 fst->FSMnode_list[i].un_ptr.next_node = NODE_ItoX(i + 1);
1093 fst->FSMnode_list[i].first_prev_arc = FSMARC_FREE;
1096 fst->FSMnode_list[i].un_ptr.next_node = FSMNODE_NULL;
1097 fst->FSMnode_list[i].first_prev_arc = FSMARC_FREE;
1100 fst->FSMnode_freelist = FSMNODE_NULL;
1104 fst->num_base_arcs = fst->num_arcs = num_arcs;
1105 fst->FSMarc_list_len = max_num_FSMarcs;
1106 fst->FSMnode_list_len = max_num_FSMnodes;
1107 fst->num_base_nodes = fst->num_nodes = num_nodes;
1108 fst->start_node = 0;
1109 /* fst->end_node = 0; this is set up above */
1112 fst->beg_silence_word = wordmap_find_index(fst->olabels, "-pau-");
1113 fst->end_silence_word = wordmap_find_index(fst->olabels, "-pau2-");
1114 fst->hack_silence_word = wordmap_find_index(fst->olabels, "silence");
1117 fst->max_searchable_nodes = 0;
1118 fst->max_searchable_arcs = 0;
1120 rc = fst_alloc_transit_points(fst);
1137 int FST_DumpGraph(srec_context* fst, PFile* fp)
1147 for (i = 0; i < fst->num_nodes; i++)
1150 ntoken = &fst->FSMnode_list[i];
1160 ilabel = fst->ilabels->num_words == 0 ?
1161 hmm_name(atoken->ilabel, fst->hmm_ilabel_offset, buf) :
1162 fst->ilabels->words[atoken->ilabel] ;
1163 olabel = fst->olabels->words[atoken->olabel];
1187 int FST_AddWordToGrammar(srec_context* fst, const char* _slot,
1219 if( fst->addWordCaching_lastslot_num == MAXwordID )
1220 fst->addWordCaching_lastslot_name = NULL;
1222 fst->addWordCaching_lastslot_name = fst->olabels->words[fst->addWordCaching_lastslot_num];
1223 fst->addWordCaching_lastslot_name = strstr(fst->addWordCaching_lastslot_name, SLOTNAME_INDICATOR);
1224 ASSERT( fst->addWordCaching_lastslot_name);
1226 if( fst->addWordCaching_lastslot_name==NULL || strcmp( fst->addWordCaching_lastslot_name, veslot)) {
1228 fst->addWordCaching_lastslot_num = wordmap_find_rule_index(fst->olabels, veslot);
1230 if (fst->addWordCaching_lastslot_num == MAXwordID)
1235 for (i = 1; i < (size_t) fst->olabels->num_slots; ++i)
1236 pfprintf(PSTDOUT, "%s, ", fst->olabels->words[i]);
1242 fst->addWordCaching_lastslot_name = fst->olabels->words[fst->addWordCaching_lastslot_num];
1243 fst->addWordCaching_lastslot_name = strstr(fst->addWordCaching_lastslot_name, SLOTNAME_INDICATOR);
1244 ASSERT(fst->addWordCaching_lastslot_name);
1248 for (i = fst->num_fsm_exit_points; --i >= 0;)
1250 arcID arcid = fst->fsm_exit_points[i].arc_index;
1251 if (fst->FSMarc_list[arcid].olabel == fst->addWordCaching_lastslot_num)
1255 start_node = fst->fsm_exit_points[i].from_node_index;
1256 end_node = fst->fsm_exit_points[i].wbto_node_index;
1257 fst->addWordCaching_lastslot_needs_post_silence = ESR_TRUE;
1258 fst->addWordCaching_lastslot_ifsm_exit_point = i;
1259 node = &fst->FSMnode_list[ end_node];
1260 arc = &fst->FSMarc_list[node->un_ptr.first_next_arc];
1261 if (arc->olabel == fst->end_silence_word && arc->linkl_next_arc == MAXarcID)
1262 fst->addWordCaching_lastslot_needs_post_silence = ESR_FALSE;
1268 if (i < 0 || start_node>=fst->num_nodes || end_node>=fst->num_nodes)
1270 PLogError("error: (internal) finding olabel %d %d %d\n", fst->addWordCaching_lastslot_num,
1276 i = fst->addWordCaching_lastslot_ifsm_exit_point;
1277 start_node = fst->fsm_exit_points[i].from_node_index;
1278 end_node = fst->fsm_exit_points[i].wbto_node_index;
1303 if (fst->num_arcs + pron_len > fst->max_searchable_arcs)
1306 word, fst->max_searchable_arcs);
1311 if (fst->num_nodes + pron_len > fst->max_searchable_nodes)
1314 word, fst->max_searchable_nodes);
1321 olabel = wordmap_find_index_in_rule(fst->olabels, word, fst->addWordCaching_lastslot_num);
1324 olabel = wordmap_add_word_in_rule(fst->olabels, word, fst->addWordCaching_lastslot_num);
1354 if (fst->addWordCaching_lastslot_needs_post_silence)
1363 model_sequence[i] = (modelID)(model_sequence[i] + fst->hmm_ilabel_offset);
1390 if (fst->addWordCaching_lastslot_needs_post_silence)
1394 irc = get_modelids_for_pron(fst->allotree, phoneme_sequence, model_sequence_len, model_sequence);
1410 model_sequence[i] = (modelID)(model_sequence[i] + fst->hmm_ilabel_offset);
1415 rc = fst_add_arcs(fst, start_node, end_node, olabel, (costdata)cost, model_sequence, model_sequence_len);
1441 irc = get_modelids_for_pron(fst->allotree, phoneme_sequence, model_sequence_len, model_sequence);
1459 model_sequence[i] = (modelID)(model_sequence[i] + fst->hmm_ilabel_offset);
1462 rc = fst_add_arcs(fst, start_node, end_node,
1486 fst->whether_prepared = 0;
1515 void remove_added_arcs_leaving(srec_context* fst, nodeID ni)
1517 FSMnode* node = &fst->FSMnode_list[ ni];
1522 if (ai < fst->num_base_arcs)
1524 arc = &fst->FSMarc_list[ai];
1528 arc2 = &fst->FSMarc_list[ai];
1529 for (ai2 = arc2->linkl_next_arc; ai2 >= fst->num_base_arcs && ai2 != MAXarcID;
1532 arc2 = &fst->FSMarc_list[ai2];
1541 void remove_added_arcs_arriving(srec_context* fst, nodeID ni)
1543 FSMnode* node = &fst->FSMnode_list[ni];
1549 if (ai < fst->num_base_arcs)
1551 arc = &fst->FSMarc_list[ai];
1555 arc2 = &fst->FSMarc_list[ai];
1556 for (ai2 = arc2->linkl_prev_arc; ai2 >= fst->num_base_arcs && ai2 != MAXarcID;
1559 arc2 = &fst->FSMarc_list[ai2];
1569 int FST_ResetGrammar(srec_context* fst)
1579 /*fst_slot_slotnum = wordmap_find_rule_index(fst->olabels, slot);*/
1580 for (fst_slot_slotnum = 1; fst_slot_slotnum < fst->olabels->num_slots;
1587 PLogError("error: slot '%s' not found among [%d,%d] possible\n", slot, 1, fst->olabels->num_slots - 1);
1595 for (i = fst->num_fsm_exit_points; --i >= 0;)
1597 ai = fst->fsm_exit_points[i].arc_index;
1598 if (fst->FSMarc_list[ai].olabel == fst_slot_slotnum)
1600 fst_slot_start_node = fst->fsm_exit_points[i].from_node_index;
1601 fst_slot_end_node = fst->fsm_exit_points[i].wbto_node_index;
1619 remove_added_arcs_leaving(fst, fst_slot_start_node);
1620 node = &fst->FSMnode_list[ fst_slot_start_node];
1623 arc = &fst->FSMarc_list[ai];
1628 remove_added_arcs_arriving(fst, ni2);
1631 node2 = &fst->FSMnode_list[ni2];
1632 arc2 = &fst->FSMarc_list[ node2->un_ptr.first_next_arc];
1636 remove_added_arcs_arriving(fst, ni3);
1639 node3 = &fst->FSMnode_list[ni3];
1640 arc3 = &fst->FSMarc_list[ node3->un_ptr.first_next_arc];
1643 arc3 = &fst->FSMarc_list[arc3->linkl_next_arc];
1645 remove_added_arcs_arriving(fst, ni3a);
1647 arc3 = &fst->FSMarc_list[ node3->un_ptr.first_next_arc];
1650 remove_added_arcs_arriving(fst, ni4);
1658 if( fst->num_nodes == fst->num_base_nodes )
1665 fst->FSMnode_freelist = MAXnodeID;
1666 fst->num_nodes = fst->FSMnode_list_len = fst->num_base_nodes;
1668 tmp_FSMnode_list = (FSMnode*)CALLOC_CLR(fst->FSMnode_list_len, sizeof(FSMnode), "srec.graph.nodes");
1673 memcpy( tmp_FSMnode_list, fst->FSMnode_list, fst->FSMnode_list_len*sizeof(FSMnode));
1676 nodeID* last_free_node = (&fst->FSMnode_freelist);
1677 ntoken = (*last_free_node==MAXnodeID) ? NULL : &fst->FSMnode_list[*last_free_node] ;
1682 FREE( fst->FSMnode_list);
1683 tmp_FSMnode_info_list = (FSMnode_info*)CALLOC_CLR(fst->FSMnode_list_len, sizeof(FSMnode_info), "srec.graph.nodeinfos");
1689 memcpy( tmp_FSMnode_info_list, fst->FSMnode_info_list, fst->FSMnode_list_len*sizeof(FSMnode_info));
1692 FREE( fst->FSMnode_info_list);
1693 fst->FSMnode_info_list = tmp_FSMnode_info_list;
1694 fst->FSMnode_list = tmp_FSMnode_list;
1697 /*ni = fst->FSMnode_freelist = fst->num_base_nodes;
1698 node = &fst->FSMnode_list[ni];
1699 for (; ni < fst->FSMnode_list_len - 1; ni++, node++)
1702 fst->num_nodes = fst->num_base_nodes;*/
1705 if( fst->num_arcs == fst->num_base_arcs )
1711 fst->num_arcs = fst->num_base_arcs;
1712 fst->FSMarc_list_len = fst->num_base_arcs;
1713 fst->FSMarc_freelist = MAXarcID;
1714 tmp_FSMarc_list = (FSMarc*)CALLOC_CLR(fst->FSMarc_list_len, sizeof(FSMarc), "srec.graph.arcs");
1719 memcpy( tmp_FSMarc_list, fst->FSMarc_list, fst->FSMarc_list_len*sizeof(FSMarc));
1722 arcID* last_free_arc = &fst->FSMarc_freelist;
1723 atoken = (*last_free_arc==MAXarcID) ? NULL : &fst->FSMarc_list[*last_free_arc] ;
1728 FREE( fst->FSMarc_list);
1729 fst->FSMarc_list = tmp_FSMarc_list;
1732 /*ai = fst->FSMarc_freelist = fst->num_base_arcs;
1733 arc = &fst->FSMarc_list[ai];
1734 for (; ai < fst->FSMarc_list_len - 1; ai++, arc++)
1737 fst->num_arcs = fst->num_base_arcs;
1738 fst->FSMarc_list_len = fst->num_base_arcs;*/
1741 wordmap_reset(fst->olabels);
1953 * fst *
1957 arcID fst_get_free_arc(srec_context* fst)
1960 arcID atokid = fst->FSMarc_freelist;
1966 atoken = &fst->FSMarc_list[atokid];
1967 fst->FSMarc_freelist = ARC_XtoI(atoken->linkl_next_arc);
1976 fst->num_arcs++;
1979 nodeID fst_get_free_node(srec_context* fst)
1982 nodeID ntokid = fst->FSMnode_freelist;
1988 ntoken = &fst->FSMnode_list[ntokid];
1989 fst->FSMnode_freelist = NODE_XtoI(ntoken->un_ptr.next_node);
1992 /* ASSERT( (int)(ntok - fst->FSMnode_list) == fst->num_nodes); */
1993 fst->num_nodes++;
1997 int fst_free_node(srec_context* fst, FSMnode* node)
1999 IF_DEBUG_WDADD(printf_node(fst, "freeing: ", node));
2001 node->un_ptr.next_node = fst->FSMnode_freelist;
2003 fst->FSMnode_freelist = (nodeID)(node - fst->FSMnode_list);
2004 /* fst->num_nodes--; not allowed unless we compress! */
2008 int fst_free_arc(srec_context* fst, FSMarc* arc)
2010 IF_DEBUG_WDADD(printf_arc(fst, "freeing: ", arc));
2012 arc->linkl_next_arc = ARC_ItoX(fst->FSMarc_freelist);
2018 fst->FSMarc_freelist = (arcID)(arc - fst->FSMarc_list);
2019 fst->num_arcs--;
2023 int fst_free_arc_net(srec_context* fst, FSMarc* arc)
2033 int fst_push_arc_olabel(srec_context* fst, FSMarc* arc)
2058 IF_DEBUG_WDADD(arc->olabel_str = fst->olabels->words[ arc->olabel]);
2063 int fst_push_arc_cost(srec_context* fst, FSMarc* arc)
2080 int fst_pull_arc_olabel(srec_context* fst, FSMarc* arc)
2130 IF_DEBUG_WDADD(arc->olabel_str = fst->olabels->words[ arc->olabel]);
2134 static FSMarc* find_next_arc_with_ilabel(srec_context* fst, FSMnode* node, labelID ilabel, FSMarc** last)
2148 FSMarc* find_prev_arc_with_iolabels(srec_context* fst, FSMnode* node, labelID ilabel, labelID olabel, FSMarc** last)
2177 int num_arcs_leaving(srec_context* fst, FSMnode* node)
2190 int num_arcs_arriving(srec_context* fst, FSMnode* node)
2203 PINLINE int num_arcs_arriving_gt_1(srec_context* fst, FSMnode* node)
2213 static void remove_arc_arriving(srec_context* fst, FSMnode* to_node, FSMarc* arc)
2229 int split_node_for_arc(srec_context* fst, FSMarc* arc)
2238 IF_DEBUG_WDADD(printf_arc(fst, "spliting ... ", arc));
2240 new_node_id = fst_get_free_node(fst);
2243 new_node = &fst->FSMnode_list[ new_node_id];
2247 remove_arc_arriving(fst, old_node, arc);
2254 new_arc_id = fst_get_free_arc(fst);
2270 append_arc_arriving_node(fst, NODE_XtoP(atoken->to_node), new_next);
2276 int fst_add_arcs(srec_context* fst, nodeID start_node, nodeID end_node,
2303 if(fst->num_arcs + add_tree_len >= fst->FSMarc_list_len)
2307 int itmp_FSMarc_list_len = fst->FSMarc_list_len*FST_GROW_FACTOR ;
2309 if( itmp_FSMarc_list_len - fst->FSMarc_list_len < FST_GROW_MINARCS)
2312 if( itmp_FSMarc_list_len - fst->FSMarc_list_len < add_tree_len)
2325 memcpy( tmp_FSMarc_list, fst->FSMarc_list, fst->FSMarc_list_len*sizeof(FSMarc));
2328 head of this new free list is tmp_FSMarc_list[ fst->FSMarc_list_len] */
2329 for(atokid=fst->FSMarc_list_len; atokid<tmp_FSMarc_list_len-1; atokid++) {
2337 arcID* last_free_arc = &fst->FSMarc_freelist;
2338 atoken = (*last_free_arc==MAXarcID) ? NULL : &fst->FSMarc_list[*last_free_arc] ;
2344 *last_free_arc = fst->FSMarc_list_len;
2346 FREE( fst->FSMarc_list);
2347 fst->FSMarc_list = tmp_FSMarc_list;
2348 fst->FSMarc_list_len = tmp_FSMarc_list_len;
2352 if(fst->num_nodes + add_tree_len >= fst->FSMnode_list_len)
2357 int itmp_FSMnode_list_len = fst->FSMnode_list_len * FST_GROW_FACTOR ;
2359 if( itmp_FSMnode_list_len - fst->FSMnode_list_len < FST_GROW_MINNODES)
2362 if( itmp_FSMnode_list_len - fst->FSMnode_list_len < add_tree_len)
2375 memcpy( tmp_FSMnode_list, fst->FSMnode_list, fst->FSMnode_list_len*sizeof(FSMnode));
2378 head of this new free list is tmp_FSMnode_list[ fst->FSMnode_list_len] */
2379 for(atokid_node=fst->FSMnode_list_len; atokid_node<tmp_FSMnode_list_len-1; atokid_node++)
2388 nodeID* last_free_node = (&fst->FSMnode_freelist);
2389 ntoken = (*last_free_node==MAXnodeID) ? NULL : &fst->FSMnode_list[*last_free_node] ;
2395 *last_free_node = fst->FSMnode_list_len;
2397 FREE( fst->FSMnode_list);
2405 memcpy( tmp_FSMnode_info_list, fst->FSMnode_info_list, fst->FSMnode_list_len*sizeof(FSMnode_info));
2408 for (atokid_node=fst->FSMnode_list_len; atokid_node < tmp_FSMnode_list_len; atokid_node++)
2411 FREE( fst->FSMnode_info_list);
2412 fst->FSMnode_info_list = tmp_FSMnode_info_list;
2413 fst->FSMnode_list = tmp_FSMnode_list;
2414 fst->FSMnode_list_len = tmp_FSMnode_list_len;
2417 late_start_node = &fst->FSMnode_list[start_node];
2422 next_atoken = find_next_arc_with_ilabel(fst, late_start_node,
2436 if (num_arcs_arriving_gt_1(fst, NODE_XtoP(next_atoken->to_node)))
2438 split_node_for_arc(fst, next_atoken);
2449 if (fst_push_arc_olabel(fst, next_atoken) != FST_SUCCESS)
2457 fst_push_arc_cost(fst, next_atoken);
2479 early_end_node = &fst->FSMnode_list[end_node];
2487 new_arc_id = fst_get_free_arc(fst);
2497 new_node_id = fst_get_free_node(fst);
2517 IF_DEBUG_WDADD(atoken->ilabel_str = fst->ilabels->words[ atoken->ilabel]);
2525 IF_DEBUG_WDADD(atok->olabel_str = fst->olabels->words[ atoken->olabel]);
2540 append_arc_arriving_node(fst, &fst->FSMnode_list[end_node], atok);
2547 new_arc_id = fst_get_free_arc(fst);
2560 atoken->cost = (costdata)(atoken->cost + fst->wtw_average);
2564 atoken->cost = add_tree_cost_use + fst->wtw_average;
2567 IF_DEBUG_WDADD(atoken->olabel_str = fst->olabels->words[ atoken->olabel]);
2568 IF_DEBUG_WDADD(atoken->ilabel_str = fst->ilabels->words[ atoken->ilabel]);
2569 append_arc_leaving_node(fst, late_start_node, atok);
2587 IF_DEBUG_WDADD(printf_node(fst, early_end_node));
2591 printf_arc(fst, add_tree_end->fr_node->first_prev_arc->to_node->first_next_arc);
2600 if(atoken->olabel>0 && atoken->olabel<fst->olabels->num_slots) break;
2601 fst_pull_arc_olabel(fst, atoken); /* fails are ok */
2604 prev_atoken = find_prev_arc_with_iolabels(fst, early_end_node,
2625 new_node_id = fst_get_free_node(fst);
2630 new_arc_id = fst_get_free_arc(fst);
2642 IF_DEBUG_WDADD(atoken->olabel_str = fst->olabels->words[atoken->olabel]);
2643 IF_DEBUG_WDADD(atoken->ilabel_str = fst->ilabels->words[atoken->ilabel]);
2651 append_arc_arriving_node(fst, early_end_node, last_atok);
2657 void append_arc_leaving_node(srec_context* fst, FSMnode* fr_node, FSMarc_ptr arc)
2668 void append_arc_arriving_node(srec_context* fst, FSMnode* to_node, FSMarc_ptr arc)
2681 int printf_node1(srec_context* fst, FSMnode* node)
2685 int printf_arc1(srec_context* fst, char* msg, FSMarc* arc)
2688 sprintf_arc(buffer, fst, arc);
2692 int sprintf_arc(char* buf, srec_context* fst, FSMarc* arc)
2696 arcID arc_index = (arcID)(arc - fst->FSMarc_list);
2705 fst->ilabels->words[arc->ilabel],
2706 fst->olabels->words[arc->olabel],
3268 int FST_LoadContextFromImageV2(srec_context* fst, PFile* fp)
3289 fst->modelid = header[2];
3290 fst->grmtyp = header[3];
3298 fst->num_arcs = max_num_FSMarcs = tmp[i++];
3299 fst->FSMarc_list_len = tmp[i++];
3300 fst->num_base_arcs = tmp[i++];
3301 fst->FSMarc_freelist = tmp[i++];
3302 fst->max_searchable_arcs = tmp[i++] * 0; /*5*/
3303 fst->num_nodes = max_num_FSMnodes = tmp[i++];
3304 fst->FSMnode_list_len = tmp[i++];
3305 fst->num_base_nodes = tmp[i++];
3306 fst->FSMnode_freelist = tmp[i++];
3307 fst->start_node = tmp[i++];/*10*/
3308 fst->end_node = tmp[i++];
3309 fst->max_searchable_nodes = tmp[i++] * 0;
3310 fst->beg_silence_word = tmp[i++];
3311 fst->end_silence_word = tmp[i++];
3312 fst->hack_silence_word = tmp[i++]; /*15*/
3313 fst->hmm_ilabel_offset = tmp[i++]; /* 16 */
3315 fst->addWordCaching_lastslot_name = 0;
3316 fst->addWordCaching_lastslot_num = MAXwordID;
3317 fst->addWordCaching_lastslot_needs_post_silence = ESR_FALSE;
3324 ASSERT(fst->num_arcs >= fst->num_base_arcs); // was ==
3325 ASSERT(fst->num_nodes >= fst->num_base_nodes); // was ==
3327 fst->FSMarc_list = (FSMarc*)CALLOC_CLR(fst->FSMarc_list_len, sizeof(FSMarc), "srec.graph.arcs");
3328 if (!fst->FSMarc_list)
3331 PLogError("CALLOC_CLR fst->FSMarc_list \n");
3334 fst->FSMnode_list = (FSMnode*)CALLOC_CLR(fst->FSMnode_list_len, sizeof(FSMnode), "srec.graph.nodes");
3335 if (!fst->FSMnode_list)
3338 PLogError("CALLOC_CLR fst->FSMnode_list failed\n");
3341 fst->FSMnode_info_list = (FSMnode_info*)CALLOC_CLR(fst->FSMnode_list_len, sizeof(FSMnode_info), "srec.graph.nodeinfos");
3343 if (!fst->FSMnode_info_list)
3346 PLogError("CALLOC_CLR fst->FSMnode_info_list failed\n");
3351 fst->FSMarc_freelist = 0;
3352 fst->num_arcs = 0;
3353 for (i = 0; i < (unsigned)fst->FSMarc_list_len - 1; i++)
3355 fst->FSMarc_list[i].linkl_next_arc = ARC_ItoX(i + 1);
3356 fst->FSMarc_list[i].linkl_prev_arc = FSMARC_FREE;
3358 fst->FSMarc_list[i].linkl_next_arc = FSMARC_NULL;
3359 fst->FSMarc_list[i].linkl_prev_arc = FSMARC_FREE;
3364 fr_node = &fst->FSMnode_list[i];
3389 if(fst->end_node != tmp[0]) {
3391 ASSERT(fst->end_node == tmp[0]);
3397 new_arc_id = fst_get_free_arc(fst);
3404 ASSERT(tmp[0] < fst->num_nodes);
3405 ASSERT(tmp[1] < fst->num_nodes);
3406 fr_node = &fst->FSMnode_list[ tmp[0]];
3407 to_node = &fst->FSMnode_list[ tmp[1]];
3411 append_arc_leaving_node(fst, fr_node, atok);
3412 append_arc_arriving_node(fst, to_node, atok);
3417 ASSERT(fst->num_arcs == num_arcs);
3423 if (fst->num_nodes < fst->FSMnode_list_len)
3425 fst->FSMnode_freelist = fst->num_nodes;
3426 for (i = fst->num_nodes; i < (unsigned)fst->FSMnode_list_len - 1; i++)
3428 fst->FSMnode_list[i].un_ptr.next_node = NODE_ItoX(i + 1);
3429 fst->FSMnode_list[i].first_prev_arc = FSMARC_FREE;
3431 fst->FSMnode_list[i].un_ptr.next_node = FSMNODE_NULL;
3432 fst->FSMnode_list[i].first_prev_arc = FSMARC_FREE;
3436 fst->FSMnode_freelist = MAXnodeID;
3441 fst->whether_prepared = 0;
3442 fst_fill_node_info(fst);
3443 for (i = 0; i < fst->num_nodes; i++)
3444 fst->FSMnode_info_list[i] = NODE_INFO_UNKNOWN;
3447 if (pfread(&fst->num_fsm_exit_points, 2, 1, fp) != 1)
3449 p = fst->fsm_exit_points;
3468 fst->ilabels = (wordmap*)CALLOC_CLR(1, sizeof(wordmap), "srec.graph.imap");
3469 fst->ilabels->num_words = fst->ilabels->max_words = 0;
3470 fst->ilabels->words = 0;
3473 esr_rc = deserializeWordMapV2(&fst->olabels, fp);
3485 if (fst->grmtyp != GrammarTypeItemList)
3487 if (deserializeArcTokenInfo(fst, fp) != ESR_SUCCESS)
3499 fst->arc_token_list_len = fst->olabels->num_words + 2 - NUM_ITEMLIST_HDRWDS;
3500 atl = NEW_ARRAY(arc_token, fst->arc_token_list_len, L("srec.graph.wordgraph"));
3502 PLogError("fst->arc_token_list_len failed\n");
3507 final = atl + fst->arc_token_list_len - 1;
3508 for (i = 1, wdid = NUM_ITEMLIST_HDRWDS; wdid < fst->olabels->num_words; i++, wdid++)
3514 atli->first_next_arc = ARC_TOKEN_LNK(atl, (fst->arc_token_list_len - 1)); /*final*/
3520 fst->arc_token_list = atl;
3814 set imap=C:/users/dahan/speech2go/fst/enu_d2f_fray_g/model.map
3815 set omap=C:/users/dahan/speech2go/fst/enu_d2f_fray_g/namesnnumsSC.map