This file is indexed.

/usr/share/doc/pocketsphinx/html/fsg__lextree_8c_source.html is in pocketsphinx-doc 0.8.0+real5prealpha-1ubuntu2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>PocketSphinx: src/libpocketsphinx/fsg_lextree.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">PocketSphinx
   &#160;<span id="projectnumber">5prealpha</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('fsg__lextree_8c_source.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">fsg_lextree.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="fsg__lextree_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">/* ====================================================================</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright (c) 1999-2010 Carnegie Mellon University.  All rights</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * modification, are permitted provided that the following conditions</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * are met:</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *    notice, this list of conditions and the following disclaimer. </span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *    notice, this list of conditions and the following disclaimer in</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *    the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *    distribution.</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS&#39;&#39; AND </span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, </span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT </span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, </span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY </span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT </span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE </span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> * ====================================================================</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">/* System headers. */</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">/* SphinxBase headers. */</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/ckd_alloc.h&gt;</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/err.h&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">/* Local headers. */</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#include &quot;fsg_lextree.h&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#define __FSG_DBG__             0</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">/* A linklist structure that is actually used to build local lextrees at grammar nodes */</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="structfsg__glist__linklist__t.html">   56</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a> {</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    int32    ci, rc;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    glist_t  glist;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keyword">struct   </span><a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a> *next;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;} <a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a>;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="keyword">static</span> <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *fsg_psubtree_init(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *tree,</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;                                      fsg_model_t *fsg,</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;                                      int32 from_state,</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;                                      <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> **alloc_head);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> fsg_psubtree_free(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *alloc_head);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> fsg_psubtree_dump(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *tree, <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *root, FILE *fp);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;fsg_lextree_lc_rc(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *lextree)</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;{</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    int32 s, i, j;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    int32 n_ci;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    fsg_model_t *fsg;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    int32 silcipid;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    int32 len;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    silcipid = bin_mdef_silphone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    assert(silcipid &gt;= 0);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    n_ci = bin_mdef_n_ciphone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>);</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    fsg = lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a>;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="comment">/*</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="comment">     * lextree-&gt;lc[s] = set of left context CIphones for state s.  Similarly, rc[s]</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="comment">     * for right context CIphones.</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a> = ckd_calloc_2d(fsg-&gt;n_state, n_ci + 1, <span class="keyword">sizeof</span>(**lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>));</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a> = ckd_calloc_2d(fsg-&gt;n_state, n_ci + 1, <span class="keyword">sizeof</span>(**lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>));</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    E_INFO(<span class="stringliteral">&quot;Allocated %d bytes (%d KiB) for left and right context phones\n&quot;</span>,</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;           fsg-&gt;n_state * (n_ci + 1) * 2,</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;           fsg-&gt;n_state * (n_ci + 1) * 2 / 1024);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordflow">for</span> (s = 0; s &lt; fsg-&gt;n_state; s++) {</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        fsg_arciter_t *itor;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        <span class="keywordflow">for</span> (itor = fsg_model_arcs(fsg, s); itor; itor = fsg_arciter_next(itor)) {</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;            fsg_link_t *l = fsg_arciter_get(itor);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;            int32 dictwid; </div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;            <span class="keywordflow">if</span> (fsg_link_wid(l) &gt;= 0) {</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;                dictwid = <a class="code" href="dict_8h.html#ad3729eb1a02a9a321e17933f7e90c80e">dict_wordid</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>,</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;                                      fsg_model_word_str(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a>, l-&gt;wid));</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;                <span class="comment">/*</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="comment">                 * Add the first CIphone of l-&gt;wid to the rclist of state s, and</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="comment">                 * the last CIphone to lclist of state d.</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="comment">                 * (Filler phones are a pain to deal with.  There is no direct</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="comment">                 * marking of a filler phone; but only filler words are supposed to</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="comment">                 * use such phones, so we use that fact.  HACK!!  FRAGILE!!)</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="comment">                 *</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="comment">                 * UPD: tests carsh here if .fsg model used with wrong hmm and</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="comment">                 *      dictionary</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="comment">                 */</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;                <span class="keywordflow">if</span> (fsg_model_is_filler(fsg, fsg_link_wid(l))) {</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;                    <span class="comment">/* Filler phone; use silence phone as context */</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;                    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[fsg_link_from_state(l)][silcipid] = 1;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;                    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[fsg_link_to_state(l)][silcipid] = 1;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                }</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                <span class="keywordflow">else</span> {</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;                    len = dict_pronlen(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;                    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[fsg_link_from_state(l)][<a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, 0)] = 1;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;                    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[fsg_link_to_state(l)][<a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, len - 1)] = 1;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;                }</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;            }</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        }</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    }</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    <span class="keywordflow">for</span> (s = 0; s &lt; fsg-&gt;n_state; s++) {</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        <span class="comment">/*</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment">         * Add SIL phone to the lclist and rclist of each state.  Strictly</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment">         * speaking, only needed at start and final states, respectively, but</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment">         * all states considered since the user may change the start and final</span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment">         * states.  In any case, most applications would have a silence self</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="comment">         * loop at each state, hence these would be needed anyway.</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="comment">         */</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[s][silcipid] = 1;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[s][silcipid] = 1;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    }</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <span class="comment">/*</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment">     * Propagate lc and rc lists past null transitions.  (Since FSG contains</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment">     * null transitions closure, no need to worry about a chain of successive</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment">     * null transitions.  Right??)</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment">     *</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment">     * This can&#39;t be joined with the previous loop because we first calculate </span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment">     * contexts and only then we can propagate them.</span></div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    <span class="keywordflow">for</span> (s = 0; s &lt; fsg-&gt;n_state; s++) {</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        fsg_arciter_t *itor;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        <span class="keywordflow">for</span> (itor = fsg_model_arcs(fsg, s); itor; itor = fsg_arciter_next(itor)) {</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;            fsg_link_t *l = fsg_arciter_get(itor);</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;            <span class="keywordflow">if</span> (fsg_link_wid(l) &lt; 0) {</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;                <span class="comment">/*</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="comment">                 * lclist(d) |= lclist(s), because all the words ending up at s, can</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="comment">                 * now also end at d, becoming the left context for words leaving d.</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment">                 */</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;                <span class="keywordflow">for</span> (i = 0; i &lt; n_ci; i++)</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;                    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[fsg_link_to_state(l)][i] |= lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[fsg_link_from_state(l)][i];</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;                <span class="comment">/*</span></div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="comment">                 * Similarly, rclist(s) |= rclist(d), because all the words leaving d</span></div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">                 * can equivalently leave s, becoming the right context for words</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="comment">                 * ending up at s.</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="comment">                 */</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;                <span class="keywordflow">for</span> (i = 0; i &lt; n_ci; i++)</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[fsg_link_from_state(l)][i] |= lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[fsg_link_to_state(l)][i];</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;            }</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        }</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    }</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <span class="comment">/* Convert the bit-vector representation into a list */</span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keywordflow">for</span> (s = 0; s &lt; fsg-&gt;n_state; s++) {</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        j = 0;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; n_ci; i++) {</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            <span class="keywordflow">if</span> (lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[s][i]) {</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;                lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[s][j] = i;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;                j++;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;            }</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        }</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;        lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[s][j] = -1;     <span class="comment">/* Terminate the list */</span></div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        j = 0;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; n_ci; i++) {</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;            <span class="keywordflow">if</span> (lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[s][i]) {</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[s][j] = i;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;                j++;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;            }</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        }</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[s][j] = -1;     <span class="comment">/* Terminate the list */</span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    }</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;}</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="comment"> * For now, allocate the entire lextree statically.</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *</div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="fsg__lextree_8c.html#a8c47b2983b3952886a4c889a711e1d65">  215</a></span>&#160;<a class="code" href="fsg__lextree_8c.html#a8c47b2983b3952886a4c889a711e1d65">fsg_lextree_init</a>(fsg_model_t * fsg, <a class="code" href="structdict__t.html">dict_t</a> *dict, <a class="code" href="structdict2pid__t.html">dict2pid_t</a> *d2p,</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;                 <a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> *mdef, <a class="code" href="structhmm__context__t.html">hmm_context_t</a> *ctx,</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;                 int32 wip, int32 pip)</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;{</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    int32 s, n_leaves;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *lextree;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *pn;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    lextree = ckd_calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a>));</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a> = fsg;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    lextree-&gt;root = ckd_calloc(fsg_model_n_state(fsg),</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;                               <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *));</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    lextree-&gt;alloc_head = ckd_calloc(fsg_model_n_state(fsg),</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;                                     <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *));</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a> = ctx;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a> = dict;</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#add12fb7151ebdecb74deaf6aca86d95e">d2p</a> = d2p;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a> = mdef;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    lextree-&gt;wip = wip;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    lextree-&gt;pip = pip;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    <span class="comment">/* Compute lc and rc for fsg. */</span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    fsg_lextree_lc_rc(lextree);</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="comment">/* Create lextree for each state, i.e. an HMM network that</span></div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment">     * represents words for all arcs exiting that state.  Note that</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment">     * for a dense grammar such as an N-gram model, this will</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment">     * rapidly exhaust all available memory. */</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    lextree-&gt;n_pnode = 0;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    n_leaves = 0;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="keywordflow">for</span> (s = 0; s &lt; fsg_model_n_state(fsg); s++) {</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        lextree-&gt;root[s] =</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;            fsg_psubtree_init(lextree, fsg, s, &amp;(lextree-&gt;alloc_head[s]));</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        <span class="keywordflow">for</span> (pn = lextree-&gt;alloc_head[s]; pn; pn = pn-&gt;alloc_next) {</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            lextree-&gt;n_pnode++;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;            <span class="keywordflow">if</span> (pn-&gt;leaf)</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;                ++n_leaves;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        }</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    }</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    E_INFO(<span class="stringliteral">&quot;%d HMM nodes in lextree (%d leaves)\n&quot;</span>,</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;           lextree-&gt;n_pnode, n_leaves);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    E_INFO(<span class="stringliteral">&quot;Allocated %d bytes (%d KiB) for all lextree nodes\n&quot;</span>,</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;           lextree-&gt;n_pnode * <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>),</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;           lextree-&gt;n_pnode * <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>) / 1024);</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    E_INFO(<span class="stringliteral">&quot;Allocated %d bytes (%d KiB) for lextree leafnodes\n&quot;</span>,</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;           n_leaves * <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>),</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;           n_leaves * <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>) / 1024);</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;<span class="preprocessor">#if __FSG_DBG__</span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <a class="code" href="fsg__lextree_8c.html#a5c267f09b8dc214dd7deb41232d84726">fsg_lextree_dump</a>(lextree, stdout);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <span class="keywordflow">return</span> lextree;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;}</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="fsg__lextree_8c.html#a5c267f09b8dc214dd7deb41232d84726">  273</a></span>&#160;<a class="code" href="fsg__lextree_8c.html#a5c267f09b8dc214dd7deb41232d84726">fsg_lextree_dump</a>(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> * lextree, FILE * fp)</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;{</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    int32 s;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    <span class="keywordflow">for</span> (s = 0; s &lt; fsg_model_n_state(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a>); s++) {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        fprintf(fp, <span class="stringliteral">&quot;State %5d root %p\n&quot;</span>, s, lextree-&gt;root[s]);</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        fsg_psubtree_dump(lextree, lextree-&gt;root[s], fp);</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    }</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    fflush(fp);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;}</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="fsg__lextree_8c.html#a2f1ab965df1214f4d0e2008833aa20da">  286</a></span>&#160;<a class="code" href="fsg__lextree_8c.html#a2f1ab965df1214f4d0e2008833aa20da">fsg_lextree_free</a>(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> * lextree)</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;{</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    int32 s;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <span class="keywordflow">if</span> (lextree == NULL)</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    <span class="keywordflow">if</span> (lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a>)</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        <span class="keywordflow">for</span> (s = 0; s &lt; fsg_model_n_state(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a>); s++)</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;            fsg_psubtree_free(lextree-&gt;alloc_head[s]);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    ckd_free_2d(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    ckd_free_2d(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>);</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    ckd_free(lextree-&gt;root);</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    ckd_free(lextree-&gt;alloc_head);</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    ckd_free(lextree);</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;}</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="comment">/******************************</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;<span class="comment"> * psubtree stuff starts here *</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="comment"> ******************************/</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="keywordtype">void</span> fsg_glist_linklist_free(<a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a> *glist)</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;{</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="keywordflow">if</span> (glist) {</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        <a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a> *nxtglist;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;        <span class="keywordflow">if</span> (glist-&gt;glist)</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;            glist_free(glist-&gt;glist);</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        nxtglist = glist-&gt;next;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="keywordflow">while</span> (nxtglist) {</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;            ckd_free(glist);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;            glist = nxtglist;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;            <span class="keywordflow">if</span> (glist-&gt;glist)</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;                glist_free(glist-&gt;glist);</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;            nxtglist = glist-&gt;next;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        }</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;        ckd_free(glist);</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    }</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;}</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="fsg__lextree_8c.html#a98fd94d024df264025e30c909c82cb56">  328</a></span>&#160;<a class="code" href="fsg__lextree_8c.html#a98fd94d024df264025e30c909c82cb56">fsg_pnode_add_all_ctxt</a>(<a class="code" href="structfsg__pnode__ctxt__t.html">fsg_pnode_ctxt_t</a> * ctxt)</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    int32 i;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; FSG_PNODE_CTXT_BVSZ; i++)</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        ctxt-&gt;bv[i] = 0xffffffff;</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;}</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="fsg__lextree_8c.html#aa9ff81fb4f5d873188fcf3be3f5fc18e">  336</a></span>&#160;uint32 <a class="code" href="fsg__lextree_8c.html#aa9ff81fb4f5d873188fcf3be3f5fc18e">fsg_pnode_ctxt_sub_generic</a>(<a class="code" href="structfsg__pnode__ctxt__t.html">fsg_pnode_ctxt_t</a> *src, <a class="code" href="structfsg__pnode__ctxt__t.html">fsg_pnode_ctxt_t</a> *sub)</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;{</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    int32 i;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    uint32 res = 0;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    </div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; FSG_PNODE_CTXT_BVSZ; i++)</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        res |= (src-&gt;bv[i] = ~(sub-&gt;bv[i]) &amp; src-&gt;bv[i]);</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;}</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="comment"> * fsg_pnode_ctxt_sub(fsg_pnode_ctxt_t * src, fsg_pnode_ctxt_t * sub)</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="comment"> * This has been moved into a macro in fsg_psubtree.h </span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="comment"> * because it is called so frequently!</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="comment"> * Add the word emitted by the given transition (fsglink) to the given lextree</span></div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="comment"> * (rooted at root), and return the new lextree root.  (There may actually be</span></div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;<span class="comment"> * several root nodes, maintained in a linked list via fsg_pnode_t.sibling.</span></div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;<span class="comment"> * &quot;root&quot; is the head of this list.)</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="comment"> * lclist, rclist: sets of left and right context phones for this link.</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<span class="comment"> * alloc_head: head of a linear list of all allocated pnodes for the parent</span></div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;<span class="comment"> * FSG state, kept elsewhere and updated by this routine.</span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;<span class="keyword">static</span> <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;psubtree_add_trans(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *lextree, </div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;                   <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> * root,</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;                   <a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a> **curglist,</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;                   fsg_link_t * fsglink,</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;                   int16 *lclist, int16 *rclist,</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;                   <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> ** alloc_head)</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;{</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    int32 silcipid;             <span class="comment">/* Silence CI phone ID */</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    int32 pronlen;              <span class="comment">/* Pronunciation length */</span></div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    int32 wid;                  <span class="comment">/* FSG (not dictionary!!) word ID */</span></div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    int32 dictwid;              <span class="comment">/* Dictionary (not FSG!!) word ID */</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    int32 ssid;                 <span class="comment">/* Senone Sequence ID */</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    int32 tmatid;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    gnode_t *gn;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *pnode, *pred, *head;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    int32 n_ci, p, lc, rc;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    glist_t lc_pnodelist;       <span class="comment">/* Temp pnodes list for different left contexts */</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    glist_t rc_pnodelist;       <span class="comment">/* Temp pnodes list for different right contexts */</span></div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    int32 i, j;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    <span class="keywordtype">int</span> n_lc_alloc = 0, n_int_alloc = 0, n_rc_alloc = 0;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    silcipid = bin_mdef_silphone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>);</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    n_ci = bin_mdef_n_ciphone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>);</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    wid = fsg_link_wid(fsglink);</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    assert(wid &gt;= 0);           <span class="comment">/* Cannot be a null transition */</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    dictwid = <a class="code" href="dict_8h.html#ad3729eb1a02a9a321e17933f7e90c80e">dict_wordid</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>,</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;                          fsg_model_word_str(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a>, wid));</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    pronlen = dict_pronlen(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid);</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    assert(pronlen &gt;= 1);</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    assert(lclist[0] &gt;= 0);     <span class="comment">/* At least one phonetic context provided */</span></div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    assert(rclist[0] &gt;= 0);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    head = *alloc_head;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    pred = NULL;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    <span class="keywordflow">if</span> (pronlen == 1) {         <span class="comment">/* Single-phone word */</span></div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        <span class="keywordtype">int</span> ci = dict_first_phone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid);</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        <span class="comment">/* Only non-filler words are mpx */</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid)) {</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;            <span class="comment">/*</span></div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;<span class="comment">             * Left diphone ID for single-phone words already assumes SIL is right</span></div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;<span class="comment">             * context; only left contexts need to be handled.</span></div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;<span class="comment">             */</span></div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;            lc_pnodelist = NULL;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;            <span class="keywordflow">for</span> (i = 0; lclist[i] &gt;= 0; i++) {</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;                lc = lclist[i];</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;                ssid = dict2pid_lrdiph_rc(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#add12fb7151ebdecb74deaf6aca86d95e">d2p</a>, ci, lc, silcipid);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;                tmatid = bin_mdef_pid2tmatid(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>, dict_first_phone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid));</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;                <span class="comment">/* Check if this ssid already allocated for some other context */</span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;                <span class="keywordflow">for</span> (gn = lc_pnodelist; gn; gn = gnode_next(gn)) {</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;                    pnode = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(gn);</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                    <span class="keywordflow">if</span> (hmm_nonmpx_ssid(&amp;pnode-&gt;hmm) == ssid) {</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;                        <span class="comment">/* already allocated; share it for this context phone */</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;                        fsg_pnode_add_ctxt(pnode, lc);</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;                    }</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;                }</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;                <span class="keywordflow">if</span> (!gn) {      <span class="comment">/* ssid not already allocated */</span></div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;                    pnode =</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;                        (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) ckd_calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>));</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;                    pnode-&gt;ctx = lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;                    pnode-&gt;next.fsglink = fsglink;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                    pnode-&gt;logs2prob =</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;                        (fsg_link_logs2prob(fsglink) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>)</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;                        + lextree-&gt;wip + lextree-&gt;pip;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                    pnode-&gt;ci_ext = dict_first_phone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid);</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;                    pnode-&gt;ppos = 0;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;                    pnode-&gt;leaf = TRUE;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;                    pnode-&gt;sibling = root;      <span class="comment">/* All root nodes linked together */</span></div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;                    fsg_pnode_add_ctxt(pnode, lc);      <span class="comment">/* Initially zeroed by calloc above */</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;                    pnode-&gt;alloc_next = head;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;                    head = pnode;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;                    root = pnode;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;                    ++n_lc_alloc;</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;                    <a class="code" href="hmm_8h.html#aa911ae0d1c0eba562692fbeebca90d78">hmm_init</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>, &amp;pnode-&gt;hmm, FALSE, ssid, tmatid);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;                    lc_pnodelist =</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;                        glist_add_ptr(lc_pnodelist, (<span class="keywordtype">void</span> *) pnode);</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                }</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;            }</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;            glist_free(lc_pnodelist);</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        }</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        <span class="keywordflow">else</span> {                  <span class="comment">/* Filler word; no context modelled */</span></div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;            ssid = bin_mdef_pid2ssid(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>, ci); <span class="comment">/* probably the same... */</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;            tmatid = bin_mdef_pid2tmatid(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>, ci);</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;            pnode = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) ckd_calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>));</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;            pnode-&gt;ctx = lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;            pnode-&gt;next.fsglink = fsglink;</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;            pnode-&gt;logs2prob = (fsg_link_logs2prob(fsglink) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>)</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;                + lextree-&gt;wip + lextree-&gt;pip;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;            pnode-&gt;ci_ext = silcipid;   <span class="comment">/* Presents SIL as context to neighbors */</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;            pnode-&gt;ppos = 0;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;            pnode-&gt;leaf = TRUE;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;            pnode-&gt;sibling = root;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;            <a class="code" href="fsg__lextree_8c.html#a98fd94d024df264025e30c909c82cb56">fsg_pnode_add_all_ctxt</a>(&amp;(pnode-&gt;ctxt));</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;            pnode-&gt;alloc_next = head;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;            head = pnode;</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;            root = pnode;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;            ++n_int_alloc;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;            <a class="code" href="hmm_8h.html#aa911ae0d1c0eba562692fbeebca90d78">hmm_init</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>, &amp;pnode-&gt;hmm, FALSE, ssid, tmatid);</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;        }</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    }</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="keywordflow">else</span> {                      <span class="comment">/* Multi-phone word */</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> **ssid_pnode_map;       <span class="comment">/* Temp array of ssid-&gt;pnode mapping */</span></div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        ssid_pnode_map =</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;            (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> **) ckd_calloc(n_ci, <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *));</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;        lc_pnodelist = NULL;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        rc_pnodelist = NULL;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;        <span class="keywordflow">for</span> (p = 0; p &lt; pronlen; p++) {</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;            <span class="keywordtype">int</span> ci = <a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, p);</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;            <span class="keywordflow">if</span> (p == 0) {       <span class="comment">/* Root phone, handle required left contexts */</span></div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;                <span class="comment">/* Find if we already have an lc_pnodelist for the first phone of this word */</span></div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;                <a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a> *glist;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;                rc = <a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, 1);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;                <span class="keywordflow">for</span> (glist = *curglist;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;                     glist &amp;&amp; glist-&gt;glist;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;                     glist = glist-&gt;next) {</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;                    <span class="keywordflow">if</span> (glist-&gt;ci == ci &amp;&amp; glist-&gt;rc == rc)</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;                }</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;                <span class="keywordflow">if</span> (glist &amp;&amp; glist-&gt;glist) {</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                    assert(glist-&gt;ci == ci &amp;&amp; glist-&gt;rc == rc);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                    <span class="comment">/* We&#39;ve found a valid glist. Hook to it and move to next phoneme */</span></div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;                    E_DEBUG(2,(<span class="stringliteral">&quot;Found match for (%d,%d)\n&quot;</span>, ci, rc));</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;                    lc_pnodelist = glist-&gt;glist;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;                    <span class="comment">/* Set the predecessor node for the future tree first */</span></div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;                    pred = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(lc_pnodelist);</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;                    <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;                }</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;                <span class="keywordflow">else</span> {</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;                    <span class="comment">/* Two cases that can bring us here</span></div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;<span class="comment">                     * a. glist == NULL, i.e. end of current list. Create new entry.</span></div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<span class="comment">                     * b. glist-&gt;glist == NULL, i.e. first entry into list.</span></div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;<span class="comment">                     */</span></div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;                    <span class="keywordflow">if</span> (glist == NULL) { <span class="comment">/* Case a; reduce it to case b by allocing glist */</span></div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;                        glist = (<a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a>*) ckd_calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a>));</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;                        glist-&gt;next = *curglist;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;                        *curglist = glist;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;                    }</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;                    glist-&gt;ci = ci;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;                    glist-&gt;rc = rc;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;                    lc_pnodelist = glist-&gt;glist = NULL; <span class="comment">/* Gets created below */</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;                }</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;                <span class="keywordflow">for</span> (i = 0; lclist[i] &gt;= 0; i++) {</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;                    lc = lclist[i];</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;                    ssid = dict2pid_ldiph_lc(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#add12fb7151ebdecb74deaf6aca86d95e">d2p</a>, ci, rc, lc);</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;                    tmatid = bin_mdef_pid2tmatid(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>, dict_first_phone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid));</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;                    <span class="comment">/* Compression is not done by d2p, so we do it</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="comment">                     * here.  This might be slow, but it might not</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;<span class="comment">                     * be... we&#39;ll see. */</span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;                    pnode = ssid_pnode_map[0];</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;                    <span class="keywordflow">for</span> (j = 0; j &lt; n_ci &amp;&amp; ssid_pnode_map[j] != NULL; ++j) {</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;                        pnode = ssid_pnode_map[j];</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;                        <span class="keywordflow">if</span> (hmm_nonmpx_ssid(&amp;pnode-&gt;hmm) == ssid)</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;                            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;                    }</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;                    assert(j &lt; n_ci);</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;                    <span class="keywordflow">if</span> (!pnode) {       <span class="comment">/* Allocate pnode for this new ssid */</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;                        pnode =</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;                            (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) ckd_calloc(1,</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;                                                       <span class="keyword">sizeof</span></div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;                                                       (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>));</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;                        pnode-&gt;ctx = lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>;</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;                        <span class="comment">/* This bit is tricky! For now we&#39;ll put the prob in the final link only */</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;                        <span class="comment">/* pnode-&gt;logs2prob = (fsg_link_logs2prob(fsglink) &gt;&gt; SENSCR_SHIFT)</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="comment">                           + lextree-&gt;wip + lextree-&gt;pip; */</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;                        pnode-&gt;logs2prob = lextree-&gt;wip + lextree-&gt;pip;</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;                        pnode-&gt;ci_ext = dict_first_phone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid);</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;                        pnode-&gt;ppos = 0;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;                        pnode-&gt;leaf = FALSE;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;                        pnode-&gt;sibling = root;  <span class="comment">/* All root nodes linked together */</span></div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;                        pnode-&gt;alloc_next = head;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;                        head = pnode;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;                        root = pnode;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;                        ++n_lc_alloc;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;                        <a class="code" href="hmm_8h.html#aa911ae0d1c0eba562692fbeebca90d78">hmm_init</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>, &amp;pnode-&gt;hmm, FALSE, ssid, tmatid);</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;                        lc_pnodelist =</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;                            glist_add_ptr(lc_pnodelist, (<span class="keywordtype">void</span> *) pnode);</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;                        ssid_pnode_map[j] = pnode;</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;                    }</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;                    fsg_pnode_add_ctxt(pnode, lc);</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;                }</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;                <span class="comment">/* Put the lc_pnodelist back into glist */</span></div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;                glist-&gt;glist = lc_pnodelist;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;                <span class="comment">/* The predecessor node for the future tree is the root */</span></div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;                pred = root;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;            }</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p != pronlen - 1) {        <span class="comment">/* Word internal phone */</span></div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;                <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>    *pnodeyoungest;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;                ssid = <a class="code" href="dict2pid_8c.html#a720e15c92ef6930e722bccb014e11b7b">dict2pid_internal</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#add12fb7151ebdecb74deaf6aca86d95e">d2p</a>, dictwid, p);</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;                tmatid = bin_mdef_pid2tmatid(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>, <a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a> (lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, p));</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;                <span class="comment">/* First check if we already have this ssid in our tree */</span></div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;                pnode = pred-&gt;next.succ;</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;                pnodeyoungest = pnode; <span class="comment">/* The youngest sibling */</span></div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;                <span class="keywordflow">while</span> (pnode &amp;&amp; (hmm_nonmpx_ssid(&amp;pnode-&gt;hmm) != ssid || pnode-&gt;leaf)) {</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;                    pnode = pnode-&gt;sibling;</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;                }</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;                <span class="keywordflow">if</span> (pnode &amp;&amp; (hmm_nonmpx_ssid(&amp;pnode-&gt;hmm) == ssid &amp;&amp; !pnode-&gt;leaf)) {</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;                    <span class="comment">/* Found the ssid; go to next phoneme */</span></div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;                    E_DEBUG(2,(<span class="stringliteral">&quot;Found match for %d\n&quot;</span>, ci));</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;                    pred = pnode;</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;                    <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;                }</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;                <span class="comment">/* pnode not found, allocate it */</span></div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;                pnode = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) ckd_calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>));</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;                pnode-&gt;ctx = lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;                pnode-&gt;logs2prob = lextree-&gt;pip;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;                pnode-&gt;ci_ext = <a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, p);</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;                pnode-&gt;ppos = p;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;                pnode-&gt;leaf = FALSE;</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;                pnode-&gt;sibling = pnodeyoungest; <span class="comment">/* May be NULL */</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;                <span class="keywordflow">if</span> (p == 1) {   <span class="comment">/* Predecessor = set of root nodes for left ctxts */</span></div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;                    <span class="keywordflow">for</span> (gn = lc_pnodelist; gn; gn = gnode_next(gn)) {</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;                        pred = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(gn);</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;                        pred-&gt;next.succ = pnode;</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;                    }</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;                }</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;                <span class="keywordflow">else</span> {          <span class="comment">/* Predecessor = word internal node */</span></div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;                    pred-&gt;next.succ = pnode;</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;                }</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;                pnode-&gt;alloc_next = head;</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;                head = pnode;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;                ++n_int_alloc;</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;                <a class="code" href="hmm_8h.html#aa911ae0d1c0eba562692fbeebca90d78">hmm_init</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>, &amp;pnode-&gt;hmm, FALSE, ssid, tmatid);</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;                pred = pnode;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;            }</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;            <span class="keywordflow">else</span> {              <span class="comment">/* Leaf phone, handle required right contexts */</span></div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;                <span class="comment">/* Note, leaf phones are not part of the tree */</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;                <a class="code" href="structxwdssid__t.html">xwdssid_t</a> *rssid;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;                memset((<span class="keywordtype">void</span> *) ssid_pnode_map, 0,</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;                       n_ci * <span class="keyword">sizeof</span>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *));</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;                lc = <a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, p-1);</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;                rssid = <a class="code" href="dict2pid_8h.html#a453a98931cad95a19b4c4ab770fc79f1">dict2pid_rssid</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#add12fb7151ebdecb74deaf6aca86d95e">d2p</a>, ci, lc);</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;                tmatid = bin_mdef_pid2tmatid(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>, <a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a> (lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, p));</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;                <span class="keywordflow">for</span> (i = 0; rclist[i] &gt;= 0; i++) {</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;                    rc = rclist[i];</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;                    j = rssid-&gt;<a class="code" href="structxwdssid__t.html#a502f9241a70383aa260d3390e4ff58fb">cimap</a>[rc];</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;                    ssid = rssid-&gt;<a class="code" href="structxwdssid__t.html#adbeeda6e94a51f08626c13414cdad6a8">ssid</a>[j];</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;                    pnode = ssid_pnode_map[j];</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;                    <span class="keywordflow">if</span> (!pnode) {       <span class="comment">/* Allocate pnode for this new ssid */</span></div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;                        pnode =</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;                            (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) ckd_calloc(1,</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;                                                       <span class="keyword">sizeof</span></div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;                                                       (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>));</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;                        pnode-&gt;ctx = lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;                        <span class="comment">/* We are plugging the word prob here. Ugly */</span></div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;                        <span class="comment">/* pnode-&gt;logs2prob = lextree-&gt;pip; */</span></div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;                        pnode-&gt;logs2prob = (fsg_link_logs2prob(fsglink) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>)</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;                            + lextree-&gt;pip;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;                        pnode-&gt;ci_ext = <a class="code" href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">dict</a>, dictwid, p);</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;                        pnode-&gt;ppos = p;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;                        pnode-&gt;leaf = TRUE;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;                        pnode-&gt;sibling = rc_pnodelist ?</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;                            (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(rc_pnodelist) : NULL;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;                        pnode-&gt;next.fsglink = fsglink;</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;                        pnode-&gt;alloc_next = head;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;                        head = pnode;</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;                        ++n_rc_alloc;</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;                        <a class="code" href="hmm_8h.html#aa911ae0d1c0eba562692fbeebca90d78">hmm_init</a>(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">ctx</a>, &amp;pnode-&gt;hmm, FALSE, ssid, tmatid);</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;                        rc_pnodelist =</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;                            glist_add_ptr(rc_pnodelist, (<span class="keywordtype">void</span> *) pnode);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;                        ssid_pnode_map[j] = pnode;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;                    }</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;                    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;                        assert(hmm_nonmpx_ssid(&amp;pnode-&gt;hmm) == ssid);</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;                    }</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;                    fsg_pnode_add_ctxt(pnode, rc);</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;                }</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;                <span class="keywordflow">if</span> (p == 1) {   <span class="comment">/* Predecessor = set of root nodes for left ctxts */</span></div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;                    <span class="keywordflow">for</span> (gn = lc_pnodelist; gn; gn = gnode_next(gn)) {</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                        pred = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(gn);</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;                        <span class="keywordflow">if</span> (!pred-&gt;next.succ)</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;                            pred-&gt;next.succ = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(rc_pnodelist);</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;                        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;                            <span class="comment">/* Link to the end of the sibling chain */</span></div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;                            <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *succ = pred-&gt;next.succ;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;                            <span class="keywordflow">while</span> (succ-&gt;sibling) succ = succ-&gt;sibling;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                            succ-&gt;sibling = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a>*) gnode_ptr(rc_pnodelist);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;                            <span class="comment">/* Since all entries of lc_pnodelist point</span></div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;<span class="comment">                               to the same array, sufficient to update it once */</span></div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;                            <span class="keywordflow">break</span>; </div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;                        }</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;                    }</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;                }</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;                <span class="keywordflow">else</span> {          <span class="comment">/* Predecessor = word internal node */</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;                    <span class="keywordflow">if</span> (!pred-&gt;next.succ)</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;                        pred-&gt;next.succ = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(rc_pnodelist);</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;                    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                        <span class="comment">/* Link to the end of the sibling chain */</span></div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;                        <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *succ = pred-&gt;next.succ;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;                        <span class="keywordflow">while</span> (succ-&gt;sibling) succ = succ-&gt;sibling;</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;                        succ-&gt;sibling = (<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *) gnode_ptr(rc_pnodelist);</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;                    }</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;                }</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;            }</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;        }</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;        ckd_free((<span class="keywordtype">void</span> *) ssid_pnode_map);</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;        <span class="comment">/* glist_free(lc_pnodelist);  Nope; this gets freed outside */</span></div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;        glist_free(rc_pnodelist);</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    }</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    E_DEBUG(2,(<span class="stringliteral">&quot;Allocated %d HMMs (%d lc, %d rc, %d internal)\n&quot;</span>,</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;               n_lc_alloc + n_rc_alloc + n_int_alloc,</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;               n_lc_alloc, n_rc_alloc, n_int_alloc));</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    *alloc_head = head;</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;}</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;<span class="keyword">static</span> <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;fsg_psubtree_init(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *lextree,</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;                  fsg_model_t * fsg, int32 from_state,</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;                  <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> ** alloc_head)</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;{</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    fsg_arciter_t *itor;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    fsg_link_t *fsglink;</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *root;</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    int32 n_ci, n_arc;</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <a class="code" href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a> *glist = NULL;</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    root = NULL;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    assert(*alloc_head == NULL);</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    n_ci = bin_mdef_n_ciphone(lextree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>);</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    <span class="keywordflow">if</span> (n_ci &gt; (FSG_PNODE_CTXT_BVSZ * 32)) {</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;        E_FATAL</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;            (<span class="stringliteral">&quot;#phones &gt; %d; increase FSG_PNODE_CTXT_BVSZ and recompile\n&quot;</span>,</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;             FSG_PNODE_CTXT_BVSZ * 32);</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    }</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    n_arc = 0;</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    <span class="keywordflow">for</span> (itor = fsg_model_arcs(fsg, from_state); itor; </div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;         itor = fsg_arciter_next(itor)) {</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;        int32 dst;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;        fsglink = fsg_arciter_get(itor);</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;        dst = fsglink-&gt;to_state;</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;        <span class="keywordflow">if</span> (fsg_link_wid(fsglink) &lt; 0)</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;        E_DEBUG(2,(<span class="stringliteral">&quot;Building lextree for arc from %d to %d: %s\n&quot;</span>,</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;                   from_state, dst, fsg_model_word_str(fsg, fsg_link_wid(fsglink))));</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;        root = psubtree_add_trans(lextree, root, &amp;glist, fsglink,</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;                                  lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">lc</a>[from_state],</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;                                  lextree-&gt;<a class="code" href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">rc</a>[dst],</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;                                  alloc_head);</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        ++n_arc;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    }</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    E_DEBUG(2,(<span class="stringliteral">&quot;State %d has %d outgoing arcs\n&quot;</span>, from_state, n_arc));</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    fsg_glist_linklist_free(glist);</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;}</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;fsg_psubtree_free(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> * head)</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;{</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *next;</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    <span class="keywordflow">while</span> (head) {</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;        next = head-&gt;alloc_next;</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;        <a class="code" href="hmm_8h.html#a7440ced1649225beb6816bf62481e08b">hmm_deinit</a>(&amp;head-&gt;hmm);</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;        ckd_free(head);</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        head = next;</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    }</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;}</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;<span class="keywordtype">void</span> fsg_psubtree_dump_node(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *tree, <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *node, FILE *fp)</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;{    </div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    int32 i;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    fsg_link_t *tl;</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    <span class="comment">/* Indentation */</span></div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt;= node-&gt;ppos; i++)</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;        fprintf(fp, <span class="stringliteral">&quot;  &quot;</span>);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;%p.@&quot;</span>, node);    <span class="comment">/* Pointer used as node</span></div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;<span class="comment">                                   * ID */</span></div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    fprintf(fp, <span class="stringliteral">&quot; %5d.SS&quot;</span>, hmm_nonmpx_ssid(&amp;node-&gt;hmm));</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    fprintf(fp, <span class="stringliteral">&quot; %10d.LP&quot;</span>, node-&gt;logs2prob);</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    fprintf(fp, <span class="stringliteral">&quot; %p.SIB&quot;</span>, node-&gt;sibling);</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    fprintf(fp, <span class="stringliteral">&quot; %s.%d&quot;</span>, <a class="code" href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a>(tree-&gt;<a class="code" href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">mdef</a>, node-&gt;ci_ext), node-&gt;ppos);</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    <span class="keywordflow">if</span> ((node-&gt;ppos == 0) || node-&gt;leaf) {</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;        fprintf(fp, <span class="stringliteral">&quot; [&quot;</span>);</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; FSG_PNODE_CTXT_BVSZ; i++)</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;            fprintf(fp, <span class="stringliteral">&quot;%08x&quot;</span>, node-&gt;ctxt.bv[i]);</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;        fprintf(fp, <span class="stringliteral">&quot;]&quot;</span>);</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    }</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    <span class="keywordflow">if</span> (node-&gt;leaf) {</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;        tl = node-&gt;next.fsglink;</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;        fprintf(fp, <span class="stringliteral">&quot; {%s[%d-&gt;%d](%d)}&quot;</span>,</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;                fsg_model_word_str(tree-&gt;<a class="code" href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg</a>, tl-&gt;wid),</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;                tl-&gt;from_state, tl-&gt;to_state, tl-&gt;logs2prob);</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;        fprintf(fp, <span class="stringliteral">&quot; %p.NXT&quot;</span>, node-&gt;next.succ);</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    }</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;}</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;<span class="keywordtype">void</span> </div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;fsg_psubtree_dump(<a class="code" href="structfsg__lextree__s.html">fsg_lextree_t</a> *tree, <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *root, FILE * fp)</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;{</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    <a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> *succ;</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    <span class="keywordflow">if</span> (root == NULL) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <span class="keywordflow">if</span> (root-&gt;ppos == 0) {</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        <span class="keywordflow">while</span>(root-&gt;sibling &amp;&amp; root-&gt;sibling-&gt;next.succ == root-&gt;next.succ) {</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;            fsg_psubtree_dump_node(tree, root, fp);</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;            root = root-&gt;sibling;</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;        }</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;        fflush(fp);</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    }</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;    </div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    fsg_psubtree_dump_node(tree, root, fp);</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <span class="keywordflow">if</span> (root-&gt;leaf) {</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;        <span class="keywordflow">if</span> (root-&gt;ppos == 0 &amp;&amp; root-&gt;sibling) { <span class="comment">/* For single-phone words */</span></div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;            fsg_psubtree_dump(tree, root-&gt;sibling,fp);</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;        }</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    }</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    succ = root-&gt;next.succ;</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="keywordflow">while</span>(succ) {</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;        fsg_psubtree_dump(tree, succ,fp);</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;        succ = succ-&gt;sibling;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;    }</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    <span class="keywordflow">if</span> (root-&gt;ppos == 0) {</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;        fsg_psubtree_dump(tree, root-&gt;sibling,fp);</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;        fflush(fp);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    }</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;}</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00832"></a><span class="lineno"><a class="line" href="fsg__lextree_8c.html#a6dc55ff3873855fb7b2c0390aa072516">  832</a></span>&#160;<a class="code" href="fsg__lextree_8c.html#a6dc55ff3873855fb7b2c0390aa072516">fsg_psubtree_pnode_deactivate</a>(<a class="code" href="structfsg__pnode__s.html">fsg_pnode_t</a> * pnode)</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;{</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    <a class="code" href="hmm_8h.html#af4c0cefb23087a0b1731b34048cfdaf9">hmm_clear</a>(&amp;pnode-&gt;hmm);</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;}</div><div class="ttc" id="fsg__lextree_8c_html_a2f1ab965df1214f4d0e2008833aa20da"><div class="ttname"><a href="fsg__lextree_8c.html#a2f1ab965df1214f4d0e2008833aa20da">fsg_lextree_free</a></div><div class="ttdeci">void fsg_lextree_free(fsg_lextree_t *lextree)</div><div class="ttdoc">Free lextrees for an FSG. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8c_source.html#l00286">fsg_lextree.c:286</a></div></div>
<div class="ttc" id="structfsg__lextree__s_html_afbbd5d59a74dfb287289aa20a9a3979a"><div class="ttname"><a href="structfsg__lextree__s.html#afbbd5d59a74dfb287289aa20a9a3979a">fsg_lextree_s::ctx</a></div><div class="ttdeci">hmm_context_t * ctx</div><div class="ttdoc">HMM context structure. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00182">fsg_lextree.h:182</a></div></div>
<div class="ttc" id="structfsg__pnode__ctxt__t_html"><div class="ttname"><a href="structfsg__pnode__ctxt__t.html">fsg_pnode_ctxt_t</a></div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00060">fsg_lextree.h:60</a></div></div>
<div class="ttc" id="hmm_8h_html_aa911ae0d1c0eba562692fbeebca90d78"><div class="ttname"><a href="hmm_8h.html#aa911ae0d1c0eba562692fbeebca90d78">hmm_init</a></div><div class="ttdeci">void hmm_init(hmm_context_t *ctx, hmm_t *hmm, int mpx, int ssid, int tmatid)</div><div class="ttdoc">Populate a previously-allocated HMM structure, allocating internal data. </div><div class="ttdef"><b>Definition:</b> <a href="hmm_8c_source.html#l00089">hmm.c:89</a></div></div>
<div class="ttc" id="dict_8h_html_ad3729eb1a02a9a321e17933f7e90c80e"><div class="ttname"><a href="dict_8h.html#ad3729eb1a02a9a321e17933f7e90c80e">dict_wordid</a></div><div class="ttdeci">POCKETSPHINX_EXPORT s3wid_t dict_wordid(dict_t *d, const char *word)</div><div class="ttdoc">Return word id for given word string if present. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00399">dict.c:399</a></div></div>
<div class="ttc" id="fsg__lextree_8c_html_a98fd94d024df264025e30c909c82cb56"><div class="ttname"><a href="fsg__lextree_8c.html#a98fd94d024df264025e30c909c82cb56">fsg_pnode_add_all_ctxt</a></div><div class="ttdeci">void fsg_pnode_add_all_ctxt(fsg_pnode_ctxt_t *ctxt)</div><div class="ttdoc">Set all flags on in the given context bitvector. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8c_source.html#l00328">fsg_lextree.c:328</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a9498ffff0caf3965060b8a549348be9b"><div class="ttname"><a href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a></div><div class="ttdeci">const char * bin_mdef_ciphone_str(bin_mdef_t *m, int32 ci)</div><div class="ttdoc">In: ciphone id for which name wanted. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00737">bin_mdef.c:737</a></div></div>
<div class="ttc" id="structfsg__lextree__s_html_ae2c059413a1cb4cda7068ab30a7a477c"><div class="ttname"><a href="structfsg__lextree__s.html#ae2c059413a1cb4cda7068ab30a7a477c">fsg_lextree_s::mdef</a></div><div class="ttdeci">bin_mdef_t * mdef</div><div class="ttdoc">Model definition (triphone mappings). </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00185">fsg_lextree.h:185</a></div></div>
<div class="ttc" id="fsg__lextree_8c_html_aa9ff81fb4f5d873188fcf3be3f5fc18e"><div class="ttname"><a href="fsg__lextree_8c.html#aa9ff81fb4f5d873188fcf3be3f5fc18e">fsg_pnode_ctxt_sub_generic</a></div><div class="ttdeci">uint32 fsg_pnode_ctxt_sub_generic(fsg_pnode_ctxt_t *src, fsg_pnode_ctxt_t *sub)</div><div class="ttdoc">Generic variant for arbitrary size. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8c_source.html#l00336">fsg_lextree.c:336</a></div></div>
<div class="ttc" id="fsg__lextree_8c_html_a5c267f09b8dc214dd7deb41232d84726"><div class="ttname"><a href="fsg__lextree_8c.html#a5c267f09b8dc214dd7deb41232d84726">fsg_lextree_dump</a></div><div class="ttdeci">void fsg_lextree_dump(fsg_lextree_t *lextree, FILE *fp)</div><div class="ttdoc">Print an FSG lextree to a file for debugging. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8c_source.html#l00273">fsg_lextree.c:273</a></div></div>
<div class="ttc" id="hmm_8h_html_a7440ced1649225beb6816bf62481e08b"><div class="ttname"><a href="hmm_8h.html#a7440ced1649225beb6816bf62481e08b">hmm_deinit</a></div><div class="ttdeci">void hmm_deinit(hmm_t *hmm)</div><div class="ttdoc">Free an HMM structure, releasing internal data (but not the HMM structure itself). </div><div class="ttdef"><b>Definition:</b> <a href="hmm_8c_source.html#l00111">hmm.c:111</a></div></div>
<div class="ttc" id="structbin__mdef__s_html"><div class="ttname"><a href="structbin__mdef__s.html">bin_mdef_s</a></div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00117">bin_mdef.h:117</a></div></div>
<div class="ttc" id="dict2pid_8h_html_a453a98931cad95a19b4c4ab770fc79f1"><div class="ttname"><a href="dict2pid_8h.html#a453a98931cad95a19b4c4ab770fc79f1">dict2pid_rssid</a></div><div class="ttdeci">#define dict2pid_rssid(d, ci, lc)</div><div class="ttdoc">Access macros; not designed for arbitrary use. </div><div class="ttdef"><b>Definition:</b> <a href="dict2pid_8h_source.html#l00115">dict2pid.h:115</a></div></div>
<div class="ttc" id="fsg__lextree_8c_html_a6dc55ff3873855fb7b2c0390aa072516"><div class="ttname"><a href="fsg__lextree_8c.html#a6dc55ff3873855fb7b2c0390aa072516">fsg_psubtree_pnode_deactivate</a></div><div class="ttdeci">void fsg_psubtree_pnode_deactivate(fsg_pnode_t *pnode)</div><div class="ttdoc">Mark the given pnode as inactive (for search). </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8c_source.html#l00832">fsg_lextree.c:832</a></div></div>
<div class="ttc" id="structfsg__lextree__s_html_abf077af1c0dd1246b2032b917bfacba5"><div class="ttname"><a href="structfsg__lextree__s.html#abf077af1c0dd1246b2032b917bfacba5">fsg_lextree_s::dict</a></div><div class="ttdeci">dict_t * dict</div><div class="ttdoc">Pronunciation dictionary for this FSG. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00183">fsg_lextree.h:183</a></div></div>
<div class="ttc" id="structfsg__glist__linklist__t_html"><div class="ttname"><a href="structfsg__glist__linklist__t.html">fsg_glist_linklist_t</a></div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8c_source.html#l00056">fsg_lextree.c:56</a></div></div>
<div class="ttc" id="dict_8h_html_aa5cade4dc6464c620718b86344540aff"><div class="ttname"><a href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a></div><div class="ttdeci">int dict_filler_word(dict_t *d, s3wid_t w)</div><div class="ttdoc">Return 1 if w is a filler word, 0 if not. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00413">dict.c:413</a></div></div>
<div class="ttc" id="structhmm__context__t_html"><div class="ttname"><a href="structhmm__context__t.html">hmm_context_t</a></div><div class="ttdoc">Shared information between a set of HMMs. </div></div>
<div class="ttc" id="structfsg__lextree__s_html"><div class="ttname"><a href="structfsg__lextree__s.html">fsg_lextree_s</a></div><div class="ttdoc">Collection of lextrees for an FSG. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00180">fsg_lextree.h:180</a></div></div>
<div class="ttc" id="hmm_8h_html_af94da16e3e5b550b9be05b0f07402cc7"><div class="ttname"><a href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a></div><div class="ttdeci">#define SENSCR_SHIFT</div><div class="ttdoc">Shift count for senone scores. </div><div class="ttdef"><b>Definition:</b> <a href="hmm_8h_source.html#l00073">hmm.h:73</a></div></div>
<div class="ttc" id="structdict__t_html"><div class="ttname"><a href="structdict__t.html">dict_t</a></div><div class="ttdoc">a structure for a dictionary. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8h_source.html#l00076">dict.h:76</a></div></div>
<div class="ttc" id="dict2pid_8c_html_a720e15c92ef6930e722bccb014e11b7b"><div class="ttname"><a href="dict2pid_8c.html#a720e15c92ef6930e722bccb014e11b7b">dict2pid_internal</a></div><div class="ttdeci">s3ssid_t dict2pid_internal(dict2pid_t *d2p, int32 wid, int pos)</div><div class="ttdoc">Return the senone sequence ID for the given word position. </div><div class="ttdef"><b>Definition:</b> <a href="dict2pid_8c_source.html#l00367">dict2pid.c:367</a></div></div>
<div class="ttc" id="hmm_8h_html_af4c0cefb23087a0b1731b34048cfdaf9"><div class="ttname"><a href="hmm_8h.html#af4c0cefb23087a0b1731b34048cfdaf9">hmm_clear</a></div><div class="ttdeci">void hmm_clear(hmm_t *h)</div><div class="ttdoc">Reset the states of the HMM to the invalid condition. </div><div class="ttdef"><b>Definition:</b> <a href="hmm_8c_source.html#l00183">hmm.c:183</a></div></div>
<div class="ttc" id="structfsg__pnode__s_html"><div class="ttname"><a href="structfsg__pnode__s.html">fsg_pnode_s</a></div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00079">fsg_lextree.h:79</a></div></div>
<div class="ttc" id="structxwdssid__t_html"><div class="ttname"><a href="structxwdssid__t.html">xwdssid_t</a></div><div class="ttdoc">cross word triphone model structure </div><div class="ttdef"><b>Definition:</b> <a href="dict2pid_8h_source.html#l00073">dict2pid.h:73</a></div></div>
<div class="ttc" id="structfsg__lextree__s_html_a307d5351803d409aa51395333294c0f1"><div class="ttname"><a href="structfsg__lextree__s.html#a307d5351803d409aa51395333294c0f1">fsg_lextree_s::rc</a></div><div class="ttdeci">int16 ** rc</div><div class="ttdoc">Right context triphone mappings for FSG. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00205">fsg_lextree.h:205</a></div></div>
<div class="ttc" id="structfsg__lextree__s_html_a0655f40ec98c9d971aba1fa8a894575d"><div class="ttname"><a href="structfsg__lextree__s.html#a0655f40ec98c9d971aba1fa8a894575d">fsg_lextree_s::lc</a></div><div class="ttdeci">int16 ** lc</div><div class="ttdoc">Left context triphone mappings for FSG. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00204">fsg_lextree.h:204</a></div></div>
<div class="ttc" id="fsg__lextree_8c_html_a8c47b2983b3952886a4c889a711e1d65"><div class="ttname"><a href="fsg__lextree_8c.html#a8c47b2983b3952886a4c889a711e1d65">fsg_lextree_init</a></div><div class="ttdeci">fsg_lextree_t * fsg_lextree_init(fsg_model_t *fsg, dict_t *dict, dict2pid_t *d2p, bin_mdef_t *mdef, hmm_context_t *ctx, int32 wip, int32 pip)</div><div class="ttdoc">Create, initialize, and return a new phonetic lextree for the given FSG. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8c_source.html#l00215">fsg_lextree.c:215</a></div></div>
<div class="ttc" id="structfsg__lextree__s_html_a161ff35c65373388f18e51236bf7ef5f"><div class="ttname"><a href="structfsg__lextree__s.html#a161ff35c65373388f18e51236bf7ef5f">fsg_lextree_s::fsg</a></div><div class="ttdeci">fsg_model_t * fsg</div><div class="ttdoc">The fsg for which this lextree is built. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00181">fsg_lextree.h:181</a></div></div>
<div class="ttc" id="structxwdssid__t_html_a502f9241a70383aa260d3390e4ff58fb"><div class="ttname"><a href="structxwdssid__t.html#a502f9241a70383aa260d3390e4ff58fb">xwdssid_t::cimap</a></div><div class="ttdeci">s3cipid_t * cimap</div><div class="ttdoc">Index into ssid[] above for each ci phone. </div><div class="ttdef"><b>Definition:</b> <a href="dict2pid_8h_source.html#l00075">dict2pid.h:75</a></div></div>
<div class="ttc" id="dict_8h_html_a8785ab6264a5c6cf0b8da6bf79a46de4"><div class="ttname"><a href="dict_8h.html#a8785ab6264a5c6cf0b8da6bf79a46de4">dict_pron</a></div><div class="ttdeci">#define dict_pron(d, w, p)</div><div class="ttdoc">The CI phones of the word w at position p. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8h_source.html#l00165">dict.h:165</a></div></div>
<div class="ttc" id="structdict2pid__t_html"><div class="ttname"><a href="structdict2pid__t.html">dict2pid_t</a></div><div class="ttdoc">Building composite triphone (as well as word internal triphones) with the dictionary. </div><div class="ttdef"><b>Definition:</b> <a href="dict2pid_8h_source.html#l00084">dict2pid.h:84</a></div></div>
<div class="ttc" id="structxwdssid__t_html_adbeeda6e94a51f08626c13414cdad6a8"><div class="ttname"><a href="structxwdssid__t.html#adbeeda6e94a51f08626c13414cdad6a8">xwdssid_t::ssid</a></div><div class="ttdeci">s3ssid_t * ssid</div><div class="ttdoc">Senone Sequence ID list for all context ciphones. </div><div class="ttdef"><b>Definition:</b> <a href="dict2pid_8h_source.html#l00074">dict2pid.h:74</a></div></div>
<div class="ttc" id="structfsg__lextree__s_html_add12fb7151ebdecb74deaf6aca86d95e"><div class="ttname"><a href="structfsg__lextree__s.html#add12fb7151ebdecb74deaf6aca86d95e">fsg_lextree_s::d2p</a></div><div class="ttdeci">dict2pid_t * d2p</div><div class="ttdoc">Context-dependent phone mappings for this FSG. </div><div class="ttdef"><b>Definition:</b> <a href="fsg__lextree_8h_source.html#l00184">fsg_lextree.h:184</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_8d034a1e03e98d9b7ac467250bbebdea.html">libpocketsphinx</a></li><li class="navelem"><a class="el" href="fsg__lextree_8c.html">fsg_lextree.c</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
  </ul>
</div>
</body>
</html>