This file is indexed.

/usr/share/doc/pocketsphinx/html/ps__lattice_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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<!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/ps_lattice.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('ps__lattice_8c_source.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">ps_lattice.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="ps__lattice_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) 2008 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"> * This work was supported in part by funding from the Defense Advanced </span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * Research Projects Agency and the National Science Foundation of the </span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * United States of America, and the CMU Sphinx Speech Consortium.</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</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="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, </span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT </span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, </span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY </span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT </span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE </span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</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="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> * ====================================================================</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">/* System headers. */</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#include &lt;math.h&gt;</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">/* SphinxBase headers. */</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/ckd_alloc.h&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/listelem_alloc.h&gt;</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/strfuncs.h&gt;</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/err.h&gt;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/pio.h&gt;</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">/* Local headers. */</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="pocketsphinx__internal_8h.html">pocketsphinx_internal.h</a>&quot;</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ps__lattice__internal_8h.html">ps_lattice_internal.h</a>&quot;</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ngram__search_8h.html">ngram_search.h</a>&quot;</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="dict_8h.html">dict.h</a>&quot;</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment"> * Create a directed link between &quot;from&quot; and &quot;to&quot; nodes, but if a link already exists,</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment"> * choose one with the best ascr.</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a4dd3235b91f1c7202127893203c6d2a0">   65</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a4dd3235b91f1c7202127893203c6d2a0">ps_lattice_link</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *from, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *to,</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;                int32 score, int32 ef)</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *fwdlink;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="comment">/* Look for an existing link between &quot;from&quot; and &quot;to&quot; nodes */</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordflow">for</span> (fwdlink = from-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; fwdlink; fwdlink = fwdlink-&gt;next)</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        <span class="keywordflow">if</span> (fwdlink-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> == to)</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordflow">if</span> (fwdlink == NULL) {</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *revlink;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        <span class="comment">/* No link between the two nodes; create a new one */</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        link = listelem_malloc(dag-&gt;<a class="code" href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">latlink_alloc</a>);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        fwdlink = listelem_malloc(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        revlink = listelem_malloc(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>);</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> = from;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;        link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> = to;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> = score;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        link-&gt;<a class="code" href="structps__latlink__s.html#a59e2bf9a1c0dd6ce4ac76a17c58fbe36">ef</a> = ef;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;        link-&gt;best_prev = NULL;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        fwdlink-&gt;link = revlink-&gt;link = link;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        fwdlink-&gt;next = from-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        from-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a> = fwdlink;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        revlink-&gt;next = to-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        to-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a> = revlink;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    }</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        <span class="comment">/* Link already exists; just retain the best ascr */</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        <span class="keywordflow">if</span> (score <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> fwdlink-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a>) {</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;            fwdlink-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> = score;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;            fwdlink-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a59e2bf9a1c0dd6ce4ac76a17c58fbe36">ef</a> = ef;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        }</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    }           </div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a551b8246b45e8953491a24db438c59c1">  106</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a551b8246b45e8953491a24db438c59c1">ps_lattice_penalize_fillers</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, int32 silpen, int32 fillpen)</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *linklist;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <span class="keywordflow">if</span> (node != dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a> &amp;&amp; node != dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a> &amp;&amp; <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, node-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>)) {</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;            <span class="keywordflow">for</span> (linklist = node-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; linklist; linklist = linklist-&gt;next)</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;                linklist-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> += (node-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#acd3f3ab2649f649ba33bf2a422cf12b8">silence</a>) ? silpen : fillpen;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        }</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    }</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;}</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;delete_node(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node)</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x, *next_x;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = next_x) {</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        next_x = x-&gt;next;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> = NULL;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>, x);</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    }</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; x; x = next_x) {</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        next_x = x-&gt;next;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> = NULL;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>, x);</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    }</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a14e4e87550647d5119cd1cc48ff4f3f1">latnode_alloc</a>, node);</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;}</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</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="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;remove_dangling_links(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x, *prev_x, *next_x;</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;    prev_x = NULL;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = next_x) {</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        next_x = x-&gt;next;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">if</span> (x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> == NULL) {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;            <span class="keywordflow">if</span> (prev_x)</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                prev_x-&gt;next = next_x;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a> = next_x;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;            listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">latlink_alloc</a>, x-&gt;link);</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;            listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>, x);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        }</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;            prev_x = x;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    }</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    prev_x = NULL;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; x; x = next_x) {</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        next_x = x-&gt;next;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="keywordflow">if</span> (x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == NULL) {</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;            <span class="keywordflow">if</span> (prev_x)</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;                prev_x-&gt;next = next_x;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                node-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a> = next_x;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;            listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">latlink_alloc</a>, x-&gt;link);</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;            listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>, x);</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        }</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;            prev_x = x;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    }</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;}</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a6da4e36322aaab4d2ebe812bee9a4439">  174</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a6da4e36322aaab4d2ebe812bee9a4439">ps_lattice_delete_unreachable</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;{</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node, *prev_node, *next_node;</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="comment">/* Remove unreachable nodes from the list of nodes. */</span></div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    prev_node = NULL;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = next_node) {</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;        next_node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        <span class="keywordflow">if</span> (!node-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>) {</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;            <span class="keywordflow">if</span> (prev_node)</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;                prev_node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a> = next_node;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a> = next_node;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;            <span class="comment">/* Delete this node and NULLify links to it. */</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;            delete_node(dag, node);</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        }</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;            prev_node = node;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    }</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="comment">/* Remove all links to and from unreachable nodes. */</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    i = 0;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;        <span class="comment">/* Assign sequence numbers. */</span></div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;        node-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a> = i++;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        <span class="comment">/* We should obviously not encounter unreachable nodes here! */</span></div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        assert(node-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>);</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        <span class="comment">/* Remove all links that go nowhere. */</span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        remove_dangling_links(dag, node);</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;}</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;int32</div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a520b99eff2c1dba89927f0f3d258b8aa">  210</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a520b99eff2c1dba89927f0f3d258b8aa">ps_lattice_write</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <span class="keywordtype">char</span> <span class="keyword">const</span> *filename)</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;{</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    FILE *fp;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    int32 i;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *d, *initial, *<span class="keyword">final</span>;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    initial = dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <span class="keyword">final</span> = dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</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;    E_INFO(<span class="stringliteral">&quot;Writing lattice file: %s\n&quot;</span>, filename);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">if</span> ((fp = fopen(filename, <span class="stringliteral">&quot;w&quot;</span>)) == NULL) {</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        E_ERROR_SYSTEM(<span class="stringliteral">&quot;Failed to open lattice file &#39;%s&#39; for writing&quot;</span>, filename);</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    }</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="comment">/* Stupid Sphinx-III lattice code expects &#39;getcwd:&#39; here */</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;# getcwd: /this/is/bogus\n&quot;</span>);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;# -logbase %e\n&quot;</span>, logmath_get_base(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>));</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n&quot;</span>);</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;Frames %d\n&quot;</span>, dag-&gt;<a class="code" href="structps__lattice__s.html#a3a997dc60d28b84d5bfc01f9ce25a891">n_frames</a>);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n&quot;</span>);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keywordflow">for</span> (i = 0, d = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; d; d = d-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>, i++);</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    fprintf(fp,</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;            <span class="stringliteral">&quot;Nodes %d (NODEID WORD STARTFRAME FIRST-ENDFRAME LAST-ENDFRAME)\n&quot;</span>,</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;            i);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <span class="keywordflow">for</span> (i = 0, d = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; d; d = d-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>, i++) {</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a> = i;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        fprintf(fp, <span class="stringliteral">&quot;%d %s %d %d %d ; %d\n&quot;</span>,</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;                i, dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, d-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>),</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;                d-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a>, d-&gt;<a class="code" href="structps__latnode__s.html#a584ee5a303355d851ac903718998df14">fef</a>, d-&gt;<a class="code" href="structps__latnode__s.html#a5c7b9114d131151d6ce85228ea9f829d">lef</a>, d-&gt;<a class="code" href="structps__latnode__s.html#a50d14c033652a4fb387f76881df1c3f6">node_id</a>);</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    }</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n&quot;</span>);</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;Initial %d\nFinal %d\n&quot;</span>, initial-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a>, final-&gt;id);</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n&quot;</span>);</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="comment">/* Don&#39;t bother with this, it&#39;s not used by anything. */</span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;BestSegAscr %d (NODEID ENDFRAME ASCORE)\n&quot;</span>,</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            0 <span class="comment">/* #BPTable entries */</span> );</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n&quot;</span>);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;Edges (FROM-NODEID TO-NODEID ASCORE)\n&quot;</span>);</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">for</span> (d = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; d; d = d-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *l;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        <span class="keywordflow">for</span> (l = d-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; l; l = l-&gt;next) {</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;            <span class="keywordflow">if</span> (l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> <a class="code" href="hmm_8h.html#aa930fb8fb6fce7f34bcf4018b81d7066">WORSE_THAN</a> <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a> || l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> 0)</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;            fprintf(fp, <span class="stringliteral">&quot;%d %d %d\n&quot;</span>,</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;                    d-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a>, l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a>, l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>);</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        }</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    }</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;End\n&quot;</span>);</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    fclose(fp);</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">return</span> 0;</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;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;int32</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a1ac6d846fbecfcaba6094d84e93655f7">  270</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a1ac6d846fbecfcaba6094d84e93655f7">ps_lattice_write_htk</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <span class="keywordtype">char</span> <span class="keyword">const</span> *filename)</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;    FILE *fp;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *d, *initial, *<span class="keyword">final</span>;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    int32 j, n_links, n_nodes;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    initial = dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    <span class="keyword">final</span> = dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    E_INFO(<span class="stringliteral">&quot;Writing lattice file: %s\n&quot;</span>, filename);</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordflow">if</span> ((fp = fopen(filename, <span class="stringliteral">&quot;w&quot;</span>)) == NULL) {</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        E_ERROR_SYSTEM(<span class="stringliteral">&quot;Failed to open lattice file &#39;%s&#39; for writing&quot;</span>, filename);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        <span class="keywordflow">return</span> -1;</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="keywordflow">for</span> (n_links = n_nodes = 0, d = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; d; d = d-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *l;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <span class="keywordflow">if</span> (!d-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>)</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a> = n_nodes;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;        <span class="keywordflow">for</span> (l = d-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; l; l = l-&gt;next) {</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;            <span class="keywordflow">if</span> (l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> == NULL || !l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>)</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;            <span class="keywordflow">if</span> (l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> <a class="code" href="hmm_8h.html#aa930fb8fb6fce7f34bcf4018b81d7066">WORSE_THAN</a> <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a> || l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> 0)</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;            ++n_links;</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;        ++n_nodes;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    }</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;# Lattice generated by PocketSphinx\n&quot;</span>);</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n# Header\n#\n&quot;</span>);</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;VERSION=1.0\n&quot;</span>);</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;start=%d\n&quot;</span>, initial-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a>);</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;end=%d\n&quot;</span>, final-&gt;id);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n&quot;</span>);</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;N=%d\tL=%d\n&quot;</span>, n_nodes, n_links);</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n# Node definitions\n#\n&quot;</span>);</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="keywordflow">for</span> (d = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; d; d = d-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;        <span class="keywordtype">char</span> <span class="keyword">const</span> *word = dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, d-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>);</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        <span class="keywordtype">char</span> <span class="keyword">const</span> *c = strrchr(word, <span class="charliteral">&#39;(&#39;</span>);</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;        <span class="keywordtype">int</span> altpron = 1;</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        <span class="keywordflow">if</span> (!d-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>)</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="keywordflow">if</span> (c)</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;            altpron = atoi(c + 1);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        word = dict_basestr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, d-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>);</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a> == dict_startwid(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>))</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;            word = <span class="stringliteral">&quot;!SENT_START&quot;</span>;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a> == dict_finishwid(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>))</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;            word = <span class="stringliteral">&quot;!SENT_END&quot;</span>;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, d-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>))</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;            word = <span class="stringliteral">&quot;!NULL&quot;</span>;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        fprintf(fp, <span class="stringliteral">&quot;I=%d\tt=%.2f\tW=%s\tv=%d\n&quot;</span>,</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;                d-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a>, (<span class="keywordtype">double</span>)d-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a> / dag-&gt;<a class="code" href="structps__lattice__s.html#a5159a2ff1e03a7c9782854bc67e56530">frate</a>,</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;                word, altpron);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    }</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    fprintf(fp, <span class="stringliteral">&quot;#\n# Link definitions\n#\n&quot;</span>);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <span class="keywordflow">for</span> (j = 0, d = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; d; d = d-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *l;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;        <span class="keywordflow">if</span> (!d-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>)</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        <span class="keywordflow">for</span> (l = d-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; l; l = l-&gt;next) {</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;            <span class="keywordflow">if</span> (l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> == NULL || !l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>)</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;            <span class="keywordflow">if</span> (l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> <a class="code" href="hmm_8h.html#aa930fb8fb6fce7f34bcf4018b81d7066">WORSE_THAN</a> <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a> || l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> 0)</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;            fprintf(fp, <span class="stringliteral">&quot;J=%d\tS=%d\tE=%d\ta=%f\tp=%g\n&quot;</span>, j++,</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;                    d-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a>, l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a>,</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;                    logmath_log_to_ln(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>, l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>),</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;                    logmath_exp(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>, l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> - dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>));</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        }</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    }</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    fclose(fp);</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;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;}</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="comment">/* Read parameter from a lattice file*/</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;dag_param_read(lineiter_t *li, <span class="keywordtype">char</span> *param)</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;    int32 n;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="keywordflow">while</span> ((li = lineiter_next(li)) != NULL) {</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;        <span class="keywordtype">char</span> *c;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;        <span class="comment">/* Ignore comments. */</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        <span class="keywordflow">if</span> (li-&gt;buf[0] == <span class="charliteral">&#39;#&#39;</span>)</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;        <span class="comment">/* Find the first space. */</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        c = strchr(li-&gt;buf, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;        <span class="keywordflow">if</span> (c == NULL) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        <span class="comment">/* Check that the first field equals param and that there&#39;s a number after it. */</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        <span class="keywordflow">if</span> (strncmp(li-&gt;buf, param, strlen(param)) == 0</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;            &amp;&amp; sscanf(c + 1, <span class="stringliteral">&quot;%d&quot;</span>, &amp;n) == 1)</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;            <span class="keywordflow">return</span> n;</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;    <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;}</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;<span class="comment">/* Mark every node that has a path to the argument dagnode as &quot;reachable&quot;. */</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;dag_mark_reachable(<a class="code" href="structps__latnode__s.html">ps_latnode_t</a> * d)</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;{</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *l;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    d-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a> = 1;</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    <span class="keywordflow">for</span> (l = d-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; l; l = l-&gt;next)</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;        <span class="keywordflow">if</span> (l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> &amp;&amp; !l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a>)</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;            dag_mark_reachable(l-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>);</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;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *</div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#aaf4a101f324943c7635746ec6ba7ab06">  387</a></span>&#160;<a class="code" href="ps__lattice_8c.html#aaf4a101f324943c7635746ec6ba7ab06">ps_lattice_read</a>(<a class="code" href="structps__decoder__s.html">ps_decoder_t</a> *ps,</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                <span class="keywordtype">char</span> <span class="keyword">const</span> *file)</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;{</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    FILE *fp;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    int32 ispipe;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    lineiter_t *line;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    float64 lb;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    float32 logratio;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *tail;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> **darray;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <span class="keywordtype">int</span> i, k, n_nodes;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    int32 pip, silpen, fillpen;</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;    dag = ckd_calloc(1, <span class="keyword">sizeof</span>(*dag));</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    <span class="keywordflow">if</span> (ps) {</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a> = ps-&gt;<a class="code" href="structps__decoder__s.html#ad337270efc93613cf8dd7594f6515799">search</a>;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a> = <a class="code" href="dict_8h.html#a0edf70be186e8940af9d21243083cb8b">dict_retain</a>(ps-&gt;<a class="code" href="structps__decoder__s.html#aef6228c17907cc1d0cef835b238b5d91">dict</a>);</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a> = logmath_retain(ps-&gt;<a class="code" href="structps__decoder__s.html#abd17fe329f2fb219c5a534f3217c5b95">lmath</a>);</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a5159a2ff1e03a7c9782854bc67e56530">frate</a> = cmd_ln_int32_r(dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>-&gt;<a class="code" href="structps__search__s.html#aa6e3e18165bbc70084a06575d5703042">config</a>, <span class="stringliteral">&quot;-frate&quot;</span>);</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    }</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a> = <a class="code" href="dict_8h.html#a05d8dac3e5fe5399ccb8bf7776e203e2">dict_init</a>(NULL, NULL);</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a> = logmath_init(1.0001, 0, FALSE);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a5159a2ff1e03a7c9782854bc67e56530">frate</a> = 100;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    }</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#acd3f3ab2649f649ba33bf2a422cf12b8">silence</a> = dict_silwid(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>);</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a14e4e87550647d5119cd1cc48ff4f3f1">latnode_alloc</a> = listelem_alloc_init(<span class="keyword">sizeof</span>(<a class="code" href="structps__latnode__s.html">ps_latnode_t</a>));</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">latlink_alloc</a> = listelem_alloc_init(<span class="keyword">sizeof</span>(<a class="code" href="structps__latlink__s.html">ps_latlink_t</a>));</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a> = listelem_alloc_init(<span class="keyword">sizeof</span>(<a class="code" href="structlatlink__list__s.html">latlink_list_t</a>));</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a6d66b392dec016b3304da2f53be17dd1">refcount</a> = 1;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    tail = NULL;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    darray = NULL;</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    E_INFO(<span class="stringliteral">&quot;Reading DAG file: %s\n&quot;</span>, file);</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <span class="keywordflow">if</span> ((fp = fopen_compchk(file, &amp;ispipe)) == NULL) {</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        E_ERROR_SYSTEM(<span class="stringliteral">&quot;Failed to open DAG file &#39;%s&#39; for reading&quot;</span>, file);</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    }</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    line = lineiter_start(fp);</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    <span class="comment">/* Read and verify logbase (ONE BIG HACK!!) */</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <span class="keywordflow">if</span> (line == NULL) {</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Premature EOF(%s)\n&quot;</span>, file);</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    }</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    <span class="keywordflow">if</span> (strncmp(line-&gt;buf, <span class="stringliteral">&quot;# getcwd: &quot;</span>, 10) != 0) {</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        E_ERROR(<span class="stringliteral">&quot;%s does not begin with &#39;# getcwd: &#39;\n%s&quot;</span>, file, line-&gt;buf);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    }</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    <span class="keywordflow">if</span> ((line = lineiter_next(line)) == NULL) {</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Premature EOF(%s)\n&quot;</span>, file);</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    }</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    <span class="keywordflow">if</span> ((strncmp(line-&gt;buf, <span class="stringliteral">&quot;# -logbase &quot;</span>, 11) != 0)</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;        || (sscanf(line-&gt;buf + 11, <span class="stringliteral">&quot;%lf&quot;</span>, &amp;lb) != 1)) {</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;        E_WARN(<span class="stringliteral">&quot;%s: Cannot find -logbase in header\n&quot;</span>, file);</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        lb = 1.0001;</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    }</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    logratio = 1.0f;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    <span class="keywordflow">if</span> (dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a> == NULL)</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a> = logmath_init(lb, 0, TRUE);</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        float32 pb = logmath_get_base(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>);</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        <span class="keywordflow">if</span> (fabs(lb - pb) &gt;= 0.0001) {</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;            E_WARN(<span class="stringliteral">&quot;Inconsistent logbases: %f vs %f: will compensate\n&quot;</span>, lb, pb);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;            logratio = (float32)(log(lb) / log(pb));</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;            E_INFO(<span class="stringliteral">&quot;Lattice log ratio: %f\n&quot;</span>, logratio);</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        }</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    }</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    <span class="comment">/* Read Frames parameter */</span></div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a3a997dc60d28b84d5bfc01f9ce25a891">n_frames</a> = dag_param_read(line, <span class="stringliteral">&quot;Frames&quot;</span>);</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="keywordflow">if</span> (dag-&gt;<a class="code" href="structps__lattice__s.html#a3a997dc60d28b84d5bfc01f9ce25a891">n_frames</a> &lt;= 0) {</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Frames parameter missing or invalid\n&quot;</span>);</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    }</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="comment">/* Read Nodes parameter */</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    n_nodes = dag_param_read(line, <span class="stringliteral">&quot;Nodes&quot;</span>);</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keywordflow">if</span> (n_nodes &lt;= 0) {</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Nodes parameter missing or invalid\n&quot;</span>);</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    }</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;    <span class="comment">/* Read nodes */</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    darray = ckd_calloc(n_nodes, <span class="keyword">sizeof</span>(*darray));</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; n_nodes; i++) {</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *d;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        int32 w;</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        <span class="keywordtype">int</span> seqid, sf, fef, lef;</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        <span class="keywordtype">char</span> wd[256];</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        <span class="keywordflow">if</span> ((line = lineiter_next(line)) == NULL) {</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;            E_ERROR(<span class="stringliteral">&quot;Premature EOF while loading Nodes(%s)\n&quot;</span>, file);</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;            <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;        }</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;        <span class="keywordflow">if</span> ((k =</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;             sscanf(line-&gt;buf, <span class="stringliteral">&quot;%d %255s %d %d %d&quot;</span>, &amp;seqid, wd, &amp;sf, &amp;fef,</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;                    &amp;lef)) != 5) {</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;            E_ERROR(<span class="stringliteral">&quot;Cannot parse line: %s, value of count %d\n&quot;</span>, line-&gt;buf, k);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;            <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;        }</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        w = <a class="code" href="dict_8h.html#ad3729eb1a02a9a321e17933f7e90c80e">dict_wordid</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, wd);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        <span class="keywordflow">if</span> (w &lt; 0) {</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;            <span class="keywordflow">if</span> (dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a> == NULL) {</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;                <span class="keywordtype">char</span> *ww = ckd_salloc(wd);</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#a3a128531ae9c077be9882119ed05fe3a">dict_word2basestr</a>(ww) != -1) {</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#ad3729eb1a02a9a321e17933f7e90c80e">dict_wordid</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, ww) == <a class="code" href="s3types_8h.html#a5c42410b7125da611210c5a4be29898b">BAD_S3WID</a>)</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;                        <a class="code" href="dict_8h.html#a24888ac8e24259e553c43c4655b38432">dict_add_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, ww, NULL, 0);</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;                }</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;                ckd_free(ww);</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;                w = <a class="code" href="dict_8h.html#a24888ac8e24259e553c43c4655b38432">dict_add_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, wd, NULL, 0);</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;            }</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;            <span class="keywordflow">if</span> (w &lt; 0) {</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;                E_ERROR(<span class="stringliteral">&quot;Unknown word in line: %s\n&quot;</span>, line-&gt;buf);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;                <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;            }</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        }</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;        <span class="keywordflow">if</span> (seqid != i) {</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;            E_ERROR(<span class="stringliteral">&quot;Seqno error: %s\n&quot;</span>, line-&gt;buf);</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;            <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;        }</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;        d = listelem_malloc(dag-&gt;<a class="code" href="structps__lattice__s.html#a14e4e87550647d5119cd1cc48ff4f3f1">latnode_alloc</a>);</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;        darray[i] = d;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a> = w;</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a> = dict_basewid(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, w);</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">id</a> = seqid;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a> = sf;</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#a584ee5a303355d851ac903718998df14">fef</a> = fef;</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#a5c7b9114d131151d6ce85228ea9f829d">lef</a> = lef;</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a> = 0;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a> = d-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a> = NULL;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;        d-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a> = NULL;</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        <span class="keywordflow">if</span> (!dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>)</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;            dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a> = d;</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;            tail-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a> = d;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;        tail = d;</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;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="comment">/* Read initial node ID */</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    k = dag_param_read(line, <span class="stringliteral">&quot;Initial&quot;</span>);</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="keywordflow">if</span> ((k &lt; 0) || (k &gt;= n_nodes)) {</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Initial node parameter missing or invalid\n&quot;</span>);</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    }</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a> = darray[k];</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="comment">/* Read final node ID */</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    k = dag_param_read(line, <span class="stringliteral">&quot;Final&quot;</span>);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <span class="keywordflow">if</span> ((k &lt; 0) || (k &gt;= n_nodes)) {</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Final node parameter missing or invalid\n&quot;</span>);</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    }</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a> = darray[k];</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <span class="comment">/* Read bestsegscore entries and ignore them. */</span></div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <span class="keywordflow">if</span> ((k = dag_param_read(line, <span class="stringliteral">&quot;BestSegAscr&quot;</span>)) &lt; 0) {</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        E_ERROR(<span class="stringliteral">&quot;BestSegAscr parameter missing\n&quot;</span>);</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;        <span class="keywordflow">goto</span> load_error;</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;    <span class="keywordflow">for</span> (i = 0; i &lt; k; i++) {</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;        <span class="keywordflow">if</span> ((line = lineiter_next(line)) == NULL) {</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;            E_ERROR(<span class="stringliteral">&quot;Premature EOF while (%s) ignoring BestSegAscr\n&quot;</span>,</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;                    line);</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;            <span class="keywordflow">goto</span> load_error;</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;    }</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    <span class="comment">/* Read in edges. */</span></div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    <span class="keywordflow">while</span> ((line = lineiter_next(line)) != NULL) {</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;        <span class="keywordflow">if</span> (line-&gt;buf[0] == <span class="charliteral">&#39;#&#39;</span>)</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;        <span class="keywordflow">if</span> (0 == strncmp(line-&gt;buf, <span class="stringliteral">&quot;Edges&quot;</span>, 5))</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;            <span class="keywordflow">break</span>;</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;    <span class="keywordflow">if</span> (line == NULL) {</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Edges missing\n&quot;</span>);</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    }</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    <span class="keywordflow">while</span> ((line = lineiter_next(line)) != NULL) {</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;        <span class="keywordtype">int</span> from, to, ascr;</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;        <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *pd, *d;</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> (sscanf(line-&gt;buf, <span class="stringliteral">&quot;%d %d %d&quot;</span>, &amp;from, &amp;to, &amp;ascr) != 3)</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;        <span class="keywordflow">if</span> (ascr <a class="code" href="hmm_8h.html#aa930fb8fb6fce7f34bcf4018b81d7066">WORSE_THAN</a> <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a>)</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;        pd = darray[from];</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;        d = darray[to];</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;        <span class="keywordflow">if</span> (logratio != 1.0f)</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;            ascr = (int32)(ascr * logratio);</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        <a class="code" href="ps__lattice_8c.html#a4dd3235b91f1c7202127893203c6d2a0">ps_lattice_link</a>(dag, pd, d, ascr, d-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a> - 1);</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    }</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="keywordflow">if</span> (strcmp(line-&gt;buf, <span class="stringliteral">&quot;End\n&quot;</span>) != 0) {</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Terminating &#39;End&#39; missing\n&quot;</span>);</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        <span class="keywordflow">goto</span> load_error;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    }</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    lineiter_free(line);</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    fclose_comp(fp, ispipe);</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    ckd_free(darray);</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="comment">/* Minor hack: If the final node is a filler word and not &lt;/s&gt;,</span></div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;<span class="comment">     * then set its base word ID to &lt;/s&gt;, so that the language model</span></div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;<span class="comment">     * scores won&#39;t be screwed up. */</span></div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>))</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a> = dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a></div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;            ? ps_search_finish_wid(dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>)</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;            : <a class="code" href="dict_8h.html#ad3729eb1a02a9a321e17933f7e90c80e">dict_wordid</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, S3_FINISH_WORD);</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="comment">/* Mark reachable from dag-&gt;end */</span></div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    dag_mark_reachable(dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>);</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    <span class="comment">/* Free nodes unreachable from dag-&gt;end and their links */</span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    <a class="code" href="ps__lattice_8c.html#a6da4e36322aaab4d2ebe812bee9a4439">ps_lattice_delete_unreachable</a>(dag);</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">if</span> (ps) {</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;        <span class="comment">/* Build links around silence and filler words, since they do</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="comment">         * not exist in the language model.  FIXME: This is</span></div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="comment">         * potentially buggy, as we already do this before outputing</span></div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;<span class="comment">         * lattices. */</span></div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;        pip = logmath_log(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>, cmd_ln_float32_r(ps-&gt;<a class="code" href="structps__decoder__s.html#a0565ed97b32408bd05c8104f020cef05">config</a>, <span class="stringliteral">&quot;-pip&quot;</span>));</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;        silpen = pip + logmath_log(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>,</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;                                   cmd_ln_float32_r(ps-&gt;<a class="code" href="structps__decoder__s.html#a0565ed97b32408bd05c8104f020cef05">config</a>, <span class="stringliteral">&quot;-silprob&quot;</span>));</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;        fillpen = pip + logmath_log(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>,</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;                                    cmd_ln_float32_r(ps-&gt;<a class="code" href="structps__decoder__s.html#a0565ed97b32408bd05c8104f020cef05">config</a>, <span class="stringliteral">&quot;-fillprob&quot;</span>));</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        <a class="code" href="ps__lattice_8c.html#a551b8246b45e8953491a24db438c59c1">ps_lattice_penalize_fillers</a>(dag, silpen, fillpen);</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;</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    <span class="keywordflow">return</span> dag;</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;  load_error:</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    E_ERROR(<span class="stringliteral">&quot;Failed to load %s\n&quot;</span>, file);</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    lineiter_free(line);</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    <span class="keywordflow">if</span> (fp) fclose_comp(fp, ispipe);</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    ckd_free(darray);</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;}</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a60b5a6a96a68e9b778dbef2156d859c8">  633</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a60b5a6a96a68e9b778dbef2156d859c8">ps_lattice_n_frames</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;{</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="keywordflow">return</span> dag-&gt;<a class="code" href="structps__lattice__s.html#a3a997dc60d28b84d5bfc01f9ce25a891">n_frames</a>;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;}</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *</div><div class="line"><a name="l00639"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a606f6ee0fd569dd5829d7f84ae7e61bd">  639</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a606f6ee0fd569dd5829d7f84ae7e61bd">ps_lattice_init_search</a>(<a class="code" href="structps__search__s.html">ps_search_t</a> *search, <span class="keywordtype">int</span> n_frame)</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;{</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    <a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    dag = ckd_calloc(1, <span class="keyword">sizeof</span>(*dag));</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a> = search;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a> = <a class="code" href="dict_8h.html#a0edf70be186e8940af9d21243083cb8b">dict_retain</a>(search-&gt;<a class="code" href="structps__search__s.html#a918f243fa966e72c47f697fb9e60089d">dict</a>);</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a> = logmath_retain(search-&gt;<a class="code" href="structps__search__s.html#a0fdf6fe8c4d9c28f10c48c09517c6b91">acmod</a>-&gt;<a class="code" href="structacmod__s.html#a9de7e8ac9c0c4df3d2a9ad5406787f3c">lmath</a>);</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a5159a2ff1e03a7c9782854bc67e56530">frate</a> = cmd_ln_int32_r(dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>-&gt;<a class="code" href="structps__search__s.html#aa6e3e18165bbc70084a06575d5703042">config</a>, <span class="stringliteral">&quot;-frate&quot;</span>);</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#acd3f3ab2649f649ba33bf2a422cf12b8">silence</a> = dict_silwid(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a3a997dc60d28b84d5bfc01f9ce25a891">n_frames</a> = n_frame;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a14e4e87550647d5119cd1cc48ff4f3f1">latnode_alloc</a> = listelem_alloc_init(<span class="keyword">sizeof</span>(<a class="code" href="structps__latnode__s.html">ps_latnode_t</a>));</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">latlink_alloc</a> = listelem_alloc_init(<span class="keyword">sizeof</span>(<a class="code" href="structps__latlink__s.html">ps_latlink_t</a>));</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a> = listelem_alloc_init(<span class="keyword">sizeof</span>(<a class="code" href="structlatlink__list__s.html">latlink_list_t</a>));</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a6d66b392dec016b3304da2f53be17dd1">refcount</a> = 1;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    <span class="keywordflow">return</span> dag;</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;<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *</div><div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#af8a33c587f5b7a6f5b8c86e6068dc297">  658</a></span>&#160;<a class="code" href="ps__lattice_8c.html#af8a33c587f5b7a6f5b8c86e6068dc297">ps_lattice_retain</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;{</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    ++dag-&gt;<a class="code" href="structps__lattice__s.html#a6d66b392dec016b3304da2f53be17dd1">refcount</a>;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    <span class="keywordflow">return</span> dag;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;}</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#aed9371a246b6565a2142c3baefd08002">  665</a></span>&#160;<a class="code" href="ps__lattice_8c.html#aed9371a246b6565a2142c3baefd08002">ps_lattice_free</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;{</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    <span class="keywordflow">if</span> (dag == NULL)</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    <span class="keywordflow">if</span> (--dag-&gt;<a class="code" href="structps__lattice__s.html#a6d66b392dec016b3304da2f53be17dd1">refcount</a> &gt; 0)</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        <span class="keywordflow">return</span> dag-&gt;<a class="code" href="structps__lattice__s.html#a6d66b392dec016b3304da2f53be17dd1">refcount</a>;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;    logmath_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    <a class="code" href="dict_8h.html#a51ee6c067decce8dbc182f95f7b33e91">dict_free</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>);</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    listelem_alloc_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a14e4e87550647d5119cd1cc48ff4f3f1">latnode_alloc</a>);</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    listelem_alloc_free(dag-&gt;<a class="code" href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">latlink_alloc</a>);</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    listelem_alloc_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>);    </div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;    ckd_free(dag-&gt;<a class="code" href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">hyp_str</a>);</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    ckd_free(dag);</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;}</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;logmath_t *</div><div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a4a952a1cb88b833989fb39476da5fe1b">  682</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a4a952a1cb88b833989fb39476da5fe1b">ps_lattice_get_logmath</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</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;    <span class="keywordflow">return</span> dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>;</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;</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;<a class="code" href="structps__latnode__s.html">ps_latnode_iter_t</a> *</div><div class="line"><a name="l00688"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a607bfd65847baff33f404936c1543d16">  688</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a607bfd65847baff33f404936c1543d16">ps_latnode_iter</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</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;    <span class="keywordflow">return</span> dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;}</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;<a class="code" href="structps__latnode__s.html">ps_latnode_iter_t</a> *</div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a77c4bbb13e260c72ed04ad93b02fdf0e">  694</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a77c4bbb13e260c72ed04ad93b02fdf0e">ps_latnode_iter_next</a>(<a class="code" href="structps__latnode__s.html">ps_latnode_iter_t</a> *itor)</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> itor-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>;</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;<span class="keywordtype">void</span></div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#ae1d64649785989033826329b9fcce309">  700</a></span>&#160;<a class="code" href="ps__lattice_8c.html#ae1d64649785989033826329b9fcce309">ps_latnode_iter_free</a>(<a class="code" href="structps__latnode__s.html">ps_latnode_iter_t</a> *itor)</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;{</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    <span class="comment">/* Do absolutely nothing. */</span></div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;}</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;<a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *</div><div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a990f488a747f95bc94777a755401710d">  706</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a990f488a747f95bc94777a755401710d">ps_latnode_iter_node</a>(<a class="code" href="structps__latnode__s.html">ps_latnode_iter_t</a> *itor)</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;{</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="keywordflow">return</span> itor;</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;}</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;<span class="keywordtype">int</span></div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a89b67432447f693f787ec14460cfa2a4">  712</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a89b67432447f693f787ec14460cfa2a4">ps_latnode_times</a>(<a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node, int16 *out_fef, int16 *out_lef)</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;    <span class="keywordflow">if</span> (out_fef) *out_fef = (int16)node-&gt;<a class="code" href="structps__latnode__s.html#a584ee5a303355d851ac903718998df14">fef</a>;</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    if (out_lef) *out_lef = (int16)node-&gt;<a class="code" href="structps__latnode__s.html#a5c7b9114d131151d6ce85228ea9f829d">lef</a>;</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="keywordflow">return</span> node-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a>;</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;}</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;<span class="keywordtype">char</span> <span class="keyword">const</span> *</div><div class="line"><a name="l00720"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a5827c1004a64e7e6c5208928c28d403d">  720</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a5827c1004a64e7e6c5208928c28d403d">ps_latnode_word</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node)</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;{</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    <span class="keywordflow">return</span> dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, node-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>);</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;}</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;<span class="keywordtype">char</span> <span class="keyword">const</span> *</div><div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a42212e56eb6e881a0ceb1b8ad029427a">  726</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a42212e56eb6e881a0ceb1b8ad029427a">ps_latnode_baseword</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node)</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">return</span> dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, node-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;}</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;int32</div><div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#ad9c31352fa8e6286b1221221208075e9">  732</a></span>&#160;<a class="code" href="ps__lattice_8c.html#ad9c31352fa8e6286b1221221208075e9">ps_latnode_prob</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node,</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;                <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> **out_link)</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;{</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *links;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    int32 bestpost = logmath_get_zero(dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>);</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <span class="keywordflow">for</span> (links = node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; links; links = links-&gt;next) {</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        int32 post = links-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + links-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> - dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>;</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;        <span class="keywordflow">if</span> (post &gt; bestpost) {</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;            <span class="keywordflow">if</span> (out_link) *out_link = links-&gt;link;</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;            bestpost = post;</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;        }</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;    <span class="keywordflow">return</span> bestpost;</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;</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;<a class="code" href="structlatlink__list__s.html">ps_latlink_iter_t</a> *</div><div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a6169f8a8d8b7f84596438e5bb3095bc6">  749</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a6169f8a8d8b7f84596438e5bb3095bc6">ps_latnode_exits</a>(<a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node)</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;{</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    <span class="keywordflow">return</span> node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;}</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;<a class="code" href="structlatlink__list__s.html">ps_latlink_iter_t</a> *</div><div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a36f3fa1635d251b908c553153f614e22">  755</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a36f3fa1635d251b908c553153f614e22">ps_latnode_entries</a>(<a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node)</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;{</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    <span class="keywordflow">return</span> node-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>;</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;<a class="code" href="structlatlink__list__s.html">ps_latlink_iter_t</a> *</div><div class="line"><a name="l00761"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a6caee73548f9a6c17626e959256d721c">  761</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a6caee73548f9a6c17626e959256d721c">ps_latlink_iter_next</a>(<a class="code" href="structlatlink__list__s.html">ps_latlink_iter_t</a> *itor)</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;{</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    <span class="keywordflow">return</span> itor-&gt;next;</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;</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#aab5953eafb2e632307259a7fc40c01e3">  767</a></span>&#160;<a class="code" href="ps__lattice_8c.html#aab5953eafb2e632307259a7fc40c01e3">ps_latlink_iter_free</a>(<a class="code" href="structlatlink__list__s.html">ps_latlink_iter_t</a> *itor)</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;    <span class="comment">/* Do absolutely nothing. */</span></div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;}</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a33a6c95621d4c8980a8c6b0f8af3bc67">  773</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a33a6c95621d4c8980a8c6b0f8af3bc67">ps_latlink_iter_link</a>(<a class="code" href="structlatlink__list__s.html">ps_latlink_iter_t</a> *itor)</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;{</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    <span class="keywordflow">return</span> itor-&gt;link;</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;}</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00779"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#afc4403b067467f3c74c97998f1c91886">  779</a></span>&#160;<a class="code" href="ps__lattice_8c.html#afc4403b067467f3c74c97998f1c91886">ps_latlink_times</a>(<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, int16 *out_sf)</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> (out_sf) {</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;        <span class="keywordflow">if</span> (link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>) {</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;            *out_sf = link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a>;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;        }</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;            *out_sf = 0;</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;        }</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;    <span class="keywordflow">return</span> link-&gt;<a class="code" href="structps__latlink__s.html#a59e2bf9a1c0dd6ce4ac76a17c58fbe36">ef</a>;</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;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;<a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *</div><div class="line"><a name="l00793"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a891d9c5aa6a5cbe8631812fbd6e87e25">  793</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a891d9c5aa6a5cbe8631812fbd6e87e25">ps_latlink_nodes</a>(<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> **out_src)</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;{</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    <span class="keywordflow">if</span> (out_src) *out_src = link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>;</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    <span class="keywordflow">return</span> link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;}</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="keywordtype">char</span> <span class="keyword">const</span> *</div><div class="line"><a name="l00800"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a3c765dfc290549e8f27e619269d20e5a">  800</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a3c765dfc290549e8f27e619269d20e5a">ps_latlink_word</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link)</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;{</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    <span class="keywordflow">if</span> (link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == NULL)</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    <span class="keywordflow">return</span> dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>);</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;}</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;<span class="keywordtype">char</span> <span class="keyword">const</span> *</div><div class="line"><a name="l00808"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a1f8f4dba5bbcf9056c5bd3e97e39839d">  808</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a1f8f4dba5bbcf9056c5bd3e97e39839d">ps_latlink_baseword</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link)</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> (link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == NULL)</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    <span class="keywordflow">return</span> dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</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;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l00816"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a6ea04952718752806ad92773c98ac33d">  816</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a6ea04952718752806ad92773c98ac33d">ps_latlink_pred</a>(<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link)</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;{</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="keywordflow">return</span> link-&gt;best_prev;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;}</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;int32</div><div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a7025b47d1224f01fef725ffdae71becc">  822</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a7025b47d1224f01fef725ffdae71becc">ps_latlink_prob</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, int32 *out_ascr)</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;{</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    int32 post = link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> - dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    <span class="keywordflow">if</span> (out_ascr) *out_ascr = link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>;</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    <span class="keywordflow">return</span> post;</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;</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;<span class="keywordtype">char</span> <span class="keyword">const</span> *</div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a02b07c009d23b852bd4db54700dfac5b">  830</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a02b07c009d23b852bd4db54700dfac5b">ps_lattice_hyp</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link)</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;{</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *l;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;    <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    <span class="keywordtype">char</span> *c;</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    <span class="comment">/* Backtrace once to get hypothesis length. */</span></div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    len = 0;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    <span class="comment">/* FIXME: There may not be a search, but actually there should be a dict. */</span></div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#ad2eba4ca92dd1a3721608e003d95d8c1">dict_real_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>)) {</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;        <span class="keywordtype">char</span> *wstr = dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;        <span class="keywordflow">if</span> (wstr != NULL)</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;            len += strlen(wstr) + 1;</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    }</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    <span class="keywordflow">for</span> (l = link; l; l = l-&gt;best_prev) {</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#ad2eba4ca92dd1a3721608e003d95d8c1">dict_real_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, l-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>)) {</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;            <span class="keywordtype">char</span> *wstr = dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, l-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;            <span class="keywordflow">if</span> (wstr != NULL)</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;                len += strlen(wstr) + 1;</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;        }</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    }</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    <span class="comment">/* Backtrace again to construct hypothesis string. */</span></div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    ckd_free(dag-&gt;<a class="code" href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">hyp_str</a>);</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">hyp_str</a> = ckd_calloc(1, len+1); <span class="comment">/* extra one incase the hyp is empty */</span></div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    c = dag-&gt;<a class="code" href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">hyp_str</a> + len - 1;</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#ad2eba4ca92dd1a3721608e003d95d8c1">dict_real_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>)) {</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;        <span class="keywordtype">char</span> *wstr = dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;        <span class="keywordflow">if</span> (wstr != NULL) {</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;            len = strlen(wstr);</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;            c -= len;</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;            memcpy(c, wstr, len);</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;            <span class="keywordflow">if</span> (c &gt; dag-&gt;<a class="code" href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">hyp_str</a>) {</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;                --c;</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;                *c = <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;            }</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;        }</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;    }</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;    <span class="keywordflow">for</span> (l = link; l; l = l-&gt;best_prev) {</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#ad2eba4ca92dd1a3721608e003d95d8c1">dict_real_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, l-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>)) {</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;            <span class="keywordtype">char</span> *wstr = dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, l-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;            <span class="keywordflow">if</span> (wstr != NULL) {</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;                len = strlen(wstr);            </div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;                c -= len;</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;                memcpy(c, wstr, len);</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;                <span class="keywordflow">if</span> (c &gt; dag-&gt;<a class="code" href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">hyp_str</a>) {</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;                    --c;</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;                    *c = <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;                }</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;            }</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;        }</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    }</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    <span class="keywordflow">return</span> dag-&gt;<a class="code" href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">hyp_str</a>;</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;}</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;ps_lattice_compute_lscr(<a class="code" href="structps__seg__s.html">ps_seg_t</a> *seg, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, <span class="keywordtype">int</span> to)</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;{</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    ngram_model_t *lmset;</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    <span class="comment">/* Language model score is included in the link score for FSG</span></div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;<span class="comment">     * search.  FIXME: Of course, this is sort of a hack :( */</span></div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    <span class="keywordflow">if</span> (0 != strcmp(ps_search_type(seg-&gt;<a class="code" href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">search</a>), PS_SEARCH_TYPE_NGRAM)) {</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#a4d86c21f1ed2dc3eb3b1b1b37ce9bb48">lback</a> = 1; <span class="comment">/* Unigram... */</span></div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#a69e605f422eeed1a9c67437e8ddd8b08">lscr</a> = 0;</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;    }</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;        </div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    lmset = ((<a class="code" href="structngram__search__s.html">ngram_search_t</a> *)seg-&gt;<a class="code" href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">search</a>)-&gt;lmset;</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    <span class="keywordflow">if</span> (link-&gt;best_prev == NULL) {</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;        <span class="keywordflow">if</span> (to) <span class="comment">/* Sentence has only two words. */</span></div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;            seg-&gt;<a class="code" href="structps__seg__s.html#a69e605f422eeed1a9c67437e8ddd8b08">lscr</a> = ngram_bg_score(lmset, link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;                                       link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>, &amp;seg-&gt;<a class="code" href="structps__seg__s.html#a4d86c21f1ed2dc3eb3b1b1b37ce9bb48">lback</a>)</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;                &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;        <span class="keywordflow">else</span> {<span class="comment">/* This is the start symbol, its lscr is always 0. */</span></div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;            seg-&gt;<a class="code" href="structps__seg__s.html#a69e605f422eeed1a9c67437e8ddd8b08">lscr</a> = 0;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;            seg-&gt;<a class="code" href="structps__seg__s.html#a4d86c21f1ed2dc3eb3b1b1b37ce9bb48">lback</a> = 1;</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;        }</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    }</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;        <span class="comment">/* Find the two predecessor words. */</span></div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;        <span class="keywordflow">if</span> (to) {</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;            seg-&gt;<a class="code" href="structps__seg__s.html#a69e605f422eeed1a9c67437e8ddd8b08">lscr</a> = ngram_tg_score(lmset, link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;                                       link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;                                       link-&gt;best_prev-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;                                       &amp;seg-&gt;<a class="code" href="structps__seg__s.html#a4d86c21f1ed2dc3eb3b1b1b37ce9bb48">lback</a>) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>;</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;        }</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;            <span class="keywordflow">if</span> (link-&gt;best_prev-&gt;best_prev)</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;                seg-&gt;<a class="code" href="structps__seg__s.html#a69e605f422eeed1a9c67437e8ddd8b08">lscr</a> = ngram_tg_score(lmset, link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;                                           link-&gt;best_prev-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;                                           link-&gt;best_prev-&gt;best_prev-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;                                           &amp;seg-&gt;<a class="code" href="structps__seg__s.html#a4d86c21f1ed2dc3eb3b1b1b37ce9bb48">lback</a>) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>;</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;                seg-&gt;<a class="code" href="structps__seg__s.html#a69e605f422eeed1a9c67437e8ddd8b08">lscr</a> = ngram_bg_score(lmset, link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;                                           link-&gt;best_prev-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;                                           &amp;seg-&gt;<a class="code" href="structps__seg__s.html#a4d86c21f1ed2dc3eb3b1b1b37ce9bb48">lback</a>) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>;</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;        }</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    }</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;}</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;ps_lattice_link2itor(<a class="code" href="structps__seg__s.html">ps_seg_t</a> *seg, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, <span class="keywordtype">int</span> to)</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;{</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    <a class="code" href="structdag__seg__s.html">dag_seg_t</a> *itor = (<a class="code" href="structdag__seg__s.html">dag_seg_t</a> *)seg;</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    <span class="keywordflow">if</span> (to) {</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;        node = link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>;</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#ab25ecc6af8d2695c6097cf7e934eadd4">ef</a> = node-&gt;<a class="code" href="structps__latnode__s.html#a5c7b9114d131151d6ce85228ea9f829d">lef</a>;</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#ae683244d90d0a5339930b47757778432">prob</a> = 0; <span class="comment">/* norm + beta - norm */</span></div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    }</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;        <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *n;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;        logmath_t *lmath = ps_search_acmod(seg-&gt;<a class="code" href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">search</a>)-&gt;lmath;</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;        node = link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>;</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#ab25ecc6af8d2695c6097cf7e934eadd4">ef</a> = link-&gt;<a class="code" href="structps__latlink__s.html#a59e2bf9a1c0dd6ce4ac76a17c58fbe36">ef</a>;</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#ae683244d90d0a5339930b47757778432">prob</a> = link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> - itor-&gt;<a class="code" href="structdag__seg__s.html#a4517656eeaa40d33109d39a251a75dea">norm</a>;</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;        <span class="comment">/* Sum over all exits for this word and any alternate</span></div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;<span class="comment">           pronunciations at the same frame. */</span></div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;        <span class="keywordflow">for</span> (n = node; n; n = n-&gt;<a class="code" href="structps__latnode__s.html#aa4c0a395c74acbacccde561f92fa89e4">alt</a>) {</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;            <span class="keywordflow">for</span> (x = n-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;                <span class="keywordflow">if</span> (x-&gt;link == link)</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;                    <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;                seg-&gt;<a class="code" href="structps__seg__s.html#ae683244d90d0a5339930b47757778432">prob</a> = logmath_add(lmath, seg-&gt;<a class="code" href="structps__seg__s.html#ae683244d90d0a5339930b47757778432">prob</a>,</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;                                        x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> - itor-&gt;<a class="code" href="structdag__seg__s.html#a4517656eeaa40d33109d39a251a75dea">norm</a>);</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;            }</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;        }</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    }</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    seg-&gt;<a class="code" href="structps__seg__s.html#a97a0dc7db931c7e3f98d23d21ce27f04">word</a> = dict_wordstr(ps_search_dict(seg-&gt;<a class="code" href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">search</a>), node-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>);</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;    seg-&gt;<a class="code" href="structps__seg__s.html#a885a599726cd0efba573d106d016e6e2">sf</a> = node-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a>;</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    seg-&gt;<a class="code" href="structps__seg__s.html#a6f7706ec4c0d0ec8ecafaf0f29f41f4b">ascr</a> = link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>;</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;    <span class="comment">/* Compute language model score from best predecessors. */</span></div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;    ps_lattice_compute_lscr(seg, link, to);</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;}</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;ps_lattice_seg_free(<a class="code" href="structps__seg__s.html">ps_seg_t</a> *seg)</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;{</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    <a class="code" href="structdag__seg__s.html">dag_seg_t</a> *itor = (<a class="code" href="structdag__seg__s.html">dag_seg_t</a> *)seg;</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    </div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    ckd_free(itor-&gt;<a class="code" href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">links</a>);</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    ckd_free(itor);</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;}</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;<span class="keyword">static</span> <a class="code" href="structps__seg__s.html">ps_seg_t</a> *</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;ps_lattice_seg_next(<a class="code" href="structps__seg__s.html">ps_seg_t</a> *seg)</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;{</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    <a class="code" href="structdag__seg__s.html">dag_seg_t</a> *itor = (<a class="code" href="structdag__seg__s.html">dag_seg_t</a> *)seg;</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    ++itor-&gt;<a class="code" href="structdag__seg__s.html#a0fed697e06d12e5a0405fdcb0d97faf1">cur</a>;</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;    <span class="keywordflow">if</span> (itor-&gt;<a class="code" href="structdag__seg__s.html#a0fed697e06d12e5a0405fdcb0d97faf1">cur</a> == itor-&gt;<a class="code" href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">n_links</a> + 1) {</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;        ps_lattice_seg_free(seg);</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    }</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (itor-&gt;<a class="code" href="structdag__seg__s.html#a0fed697e06d12e5a0405fdcb0d97faf1">cur</a> == itor-&gt;<a class="code" href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">n_links</a>) {</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;        <span class="comment">/* Re-use the last link but with the &quot;to&quot; node. */</span></div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;        ps_lattice_link2itor(seg, itor-&gt;<a class="code" href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">links</a>[itor-&gt;<a class="code" href="structdag__seg__s.html#a0fed697e06d12e5a0405fdcb0d97faf1">cur</a> - 1], TRUE);</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;    }</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;        ps_lattice_link2itor(seg, itor-&gt;<a class="code" href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">links</a>[itor-&gt;<a class="code" href="structdag__seg__s.html#a0fed697e06d12e5a0405fdcb0d97faf1">cur</a>], FALSE);</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    }</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    <span class="keywordflow">return</span> seg;</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;}</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="keyword">static</span> <a class="code" href="structps__segfuncs__s.html">ps_segfuncs_t</a> ps_lattice_segfuncs = {</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;    <span class="comment">/* seg_next */</span> ps_lattice_seg_next,</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;    <span class="comment">/* seg_free */</span> ps_lattice_seg_free</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;};</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;<a class="code" href="structps__seg__s.html">ps_seg_t</a> *</div><div class="line"><a name="l01006"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#afedbc5558c18f7d029e84a4e27e38187"> 1006</a></span>&#160;<a class="code" href="ps__lattice_8c.html#afedbc5558c18f7d029e84a4e27e38187">ps_lattice_seg_iter</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, float32 lwf)</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;{</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    <a class="code" href="structdag__seg__s.html">dag_seg_t</a> *itor;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *l;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    <span class="keywordtype">int</span> cur;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;    <span class="comment">/* Calling this an &quot;iterator&quot; is a bit of a misnomer since we have</span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="comment">     * to get the entire backtrace in order to produce it.</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    itor = ckd_calloc(1, <span class="keyword">sizeof</span>(*itor));</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    itor-&gt;<a class="code" href="structdag__seg__s.html#a72f90e137c1f83ab3df6ecd5e1b6dc71">base</a>.<a class="code" href="structps__seg__s.html#a510362a2281e374c839397c3e5488515">vt</a> = &amp;ps_lattice_segfuncs;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    itor-&gt;<a class="code" href="structdag__seg__s.html#a72f90e137c1f83ab3df6ecd5e1b6dc71">base</a>.<a class="code" href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">search</a> = dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    itor-&gt;<a class="code" href="structdag__seg__s.html#a72f90e137c1f83ab3df6ecd5e1b6dc71">base</a>.<a class="code" href="structps__seg__s.html#a2249c012b83c902f4f8ed8d98ded7d20">lwf</a> = lwf;</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    itor-&gt;<a class="code" href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">n_links</a> = 0;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;    itor-&gt;<a class="code" href="structdag__seg__s.html#a4517656eeaa40d33109d39a251a75dea">norm</a> = dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    <span class="keywordflow">for</span> (l = link; l; l = l-&gt;best_prev) {</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;        ++itor-&gt;<a class="code" href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">n_links</a>;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    <span class="keywordflow">if</span> (itor-&gt;<a class="code" href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">n_links</a> == 0) {</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;        ckd_free(itor);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    }</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;    itor-&gt;<a class="code" href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">links</a> = ckd_calloc(itor-&gt;<a class="code" href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">n_links</a>, <span class="keyword">sizeof</span>(*itor-&gt;<a class="code" href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">links</a>));</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    cur = itor-&gt;<a class="code" href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">n_links</a> - 1;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    <span class="keywordflow">for</span> (l = link; l; l = l-&gt;best_prev) {</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;        itor-&gt;<a class="code" href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">links</a>[cur] = l;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;        --cur;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;    }</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;    ps_lattice_link2itor((<a class="code" href="structps__seg__s.html">ps_seg_t</a> *)itor, itor-&gt;<a class="code" href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">links</a>[0], FALSE);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    <span class="keywordflow">return</span> (<a class="code" href="structps__seg__s.html">ps_seg_t</a> *)itor;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;}</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;<a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *</div><div class="line"><a name="l01042"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a7197508af770064ea825bb812dd6eddc"> 1042</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a7197508af770064ea825bb812dd6eddc">latlink_list_new</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *next)</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;{</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *ll;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    ll = listelem_malloc(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;    ll-&gt;link = link;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;    ll-&gt;next = next;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;    <span class="keywordflow">return</span> ll;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;}</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l01054"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a04896ebe0e2592bc7950d413b5d5c52e"> 1054</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a04896ebe0e2592bc7950d413b5d5c52e">ps_lattice_pushq</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link)</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;{</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    <span class="keywordflow">if</span> (dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a> == NULL)</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a> = dag-&gt;<a class="code" href="structps__lattice__s.html#a5a9faf5e4aabd84a868d1bff97dd9814">q_tail</a> = <a class="code" href="ps__lattice_8c.html#a7197508af770064ea825bb812dd6eddc">latlink_list_new</a>(dag, link, NULL);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a5a9faf5e4aabd84a868d1bff97dd9814">q_tail</a>-&gt;next = <a class="code" href="ps__lattice_8c.html#a7197508af770064ea825bb812dd6eddc">latlink_list_new</a>(dag, link, NULL);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a5a9faf5e4aabd84a868d1bff97dd9814">q_tail</a> = dag-&gt;<a class="code" href="structps__lattice__s.html#a5a9faf5e4aabd84a868d1bff97dd9814">q_tail</a>-&gt;next;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;    }</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;}</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l01066"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a481c4d941368597e11b0af4709bd03b0"> 1066</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a481c4d941368597e11b0af4709bd03b0">ps_lattice_popq</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;{</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;    <span class="keywordflow">if</span> (dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a> == NULL)</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;    link = dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a>-&gt;link;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    x = dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a>-&gt;next;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;    listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>, dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a>);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a> = x;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;    <span class="keywordflow">if</span> (dag-&gt;<a class="code" href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">q_head</a> == NULL)</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a5a9faf5e4aabd84a868d1bff97dd9814">q_tail</a> = NULL;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;    <span class="keywordflow">return</span> link;</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;}</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l01083"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#ad128ca75e8bc7ca4ba41094fb5b68ee9"> 1083</a></span>&#160;<a class="code" href="ps__lattice_8c.html#ad128ca75e8bc7ca4ba41094fb5b68ee9">ps_lattice_delq</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;{</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;    <span class="keywordflow">while</span> (<a class="code" href="ps__lattice_8c.html#a481c4d941368597e11b0af4709bd03b0">ps_lattice_popq</a>(dag)) {</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;        <span class="comment">/* Do nothing. */</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;}</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l01091"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a3bd22d7b0561c81f874c115a200e84b9"> 1091</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a3bd22d7b0561c81f874c115a200e84b9">ps_lattice_traverse_edges</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *start, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *end)</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;{</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;    <span class="comment">/* Cancel any unfinished traversal. */</span></div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;    <a class="code" href="ps__lattice_8c.html#ad128ca75e8bc7ca4ba41094fb5b68ee9">ps_lattice_delq</a>(dag);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    <span class="comment">/* Initialize node fanin counts and path scores. */</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>)</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;        node-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a> = 0;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;        <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next)</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;            (x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a>)++;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;    }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;    <span class="comment">/* Initialize agenda with all exits from start. */</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;    <span class="keywordflow">if</span> (start == NULL) start = dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    <span class="keywordflow">for</span> (x = start-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next)</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;        <a class="code" href="ps__lattice_8c.html#a04896ebe0e2592bc7950d413b5d5c52e">ps_lattice_pushq</a>(dag, x-&gt;link);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    <span class="comment">/* Pull the first edge off the queue. */</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="ps__lattice_8c.html#a8ab5c5bbbcf02a087a81232476dbd2a3">ps_lattice_traverse_next</a>(dag, end);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;}</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l01117"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a8ab5c5bbbcf02a087a81232476dbd2a3"> 1117</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a8ab5c5bbbcf02a087a81232476dbd2a3">ps_lattice_traverse_next</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *end)</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;{</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *next;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    next = <a class="code" href="ps__lattice_8c.html#a481c4d941368597e11b0af4709bd03b0">ps_lattice_popq</a>(dag);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    <span class="keywordflow">if</span> (next == NULL)</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;    <span class="comment">/* Decrease fanin count for destination node and expand outgoing</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;<span class="comment">     * edges if all incoming edges have been seen. */</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;    --next-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a>;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    <span class="keywordflow">if</span> (next-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a> == 0) {</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;        <span class="keywordflow">if</span> (end == NULL) end = dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;        <span class="keywordflow">if</span> (next-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> == end) {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;            <span class="comment">/* If we have traversed all links entering the end node,</span></div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="comment">             * clear the queue, causing future calls to this function</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="comment">             * to return NULL. */</span></div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;            <a class="code" href="ps__lattice_8c.html#ad128ca75e8bc7ca4ba41094fb5b68ee9">ps_lattice_delq</a>(dag);</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;            <span class="keywordflow">return</span> next;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;        }</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;        <span class="comment">/* Extend all outgoing edges. */</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;        <span class="keywordflow">for</span> (x = next-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next)</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;            <a class="code" href="ps__lattice_8c.html#a04896ebe0e2592bc7950d413b5d5c52e">ps_lattice_pushq</a>(dag, x-&gt;link);</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;    }</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    <span class="keywordflow">return</span> next;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;}</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l01148"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a33e1a31ff250c7e7d555e179e2693f5d"> 1148</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a33e1a31ff250c7e7d555e179e2693f5d">ps_lattice_reverse_edges</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *start, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *end)</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;{</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="comment">/* Cancel any unfinished traversal. */</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <a class="code" href="ps__lattice_8c.html#ad128ca75e8bc7ca4ba41094fb5b68ee9">ps_lattice_delq</a>(dag);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    <span class="comment">/* Initialize node fanout counts and path scores. */</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;        node-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a> = 0;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;        <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next)</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;            ++node-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a>;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;    }</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;    <span class="comment">/* Initialize agenda with all entries from end. */</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;    <span class="keywordflow">if</span> (end == NULL) end = dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;    <span class="keywordflow">for</span> (x = end-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; x; x = x-&gt;next)</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;        <a class="code" href="ps__lattice_8c.html#a04896ebe0e2592bc7950d413b5d5c52e">ps_lattice_pushq</a>(dag, x-&gt;link);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;    <span class="comment">/* Pull the first edge off the queue. */</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="ps__lattice_8c.html#a7a6e0cb0510310b13fd4286cf8f48792">ps_lattice_reverse_next</a>(dag, start);</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;}</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l01173"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a7a6e0cb0510310b13fd4286cf8f48792"> 1173</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a7a6e0cb0510310b13fd4286cf8f48792">ps_lattice_reverse_next</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *start)</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;{</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *next;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    next = <a class="code" href="ps__lattice_8c.html#a481c4d941368597e11b0af4709bd03b0">ps_lattice_popq</a>(dag);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    <span class="keywordflow">if</span> (next == NULL)</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;    <span class="comment">/* Decrease fanout count for source node and expand incoming</span></div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;<span class="comment">     * edges if all incoming edges have been seen. */</span></div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;    --next-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a>;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;    <span class="keywordflow">if</span> (next-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;info.<a class="code" href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">fanin</a> == 0) {</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;        <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;        <span class="keywordflow">if</span> (start == NULL) start = dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;        <span class="keywordflow">if</span> (next-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == start) {</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;            <span class="comment">/* If we have traversed all links entering the start node,</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;<span class="comment">             * clear the queue, causing future calls to this function</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;<span class="comment">             * to return NULL. */</span></div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;            <a class="code" href="ps__lattice_8c.html#ad128ca75e8bc7ca4ba41094fb5b68ee9">ps_lattice_delq</a>(dag);</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;            <span class="keywordflow">return</span> next;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;        }</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;        <span class="comment">/* Extend all outgoing edges. */</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;        <span class="keywordflow">for</span> (x = next-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; x; x = x-&gt;next)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;            <a class="code" href="ps__lattice_8c.html#a04896ebe0e2592bc7950d413b5d5c52e">ps_lattice_pushq</a>(dag, x-&gt;link);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;    }</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;    <span class="keywordflow">return</span> next;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;}</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * Find the best score from dag-&gt;start to end point of any link and</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> * use it to update links further down the path.  This is like</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> * single-source shortest path search, except that it is done over</span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"> * edges rather than nodes, which allows us to do exact trigram scoring.</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment"> * Helpfully enough, we get half of the posterior probability</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment"> * calculation for free that way too.  (interesting research topic: is</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="comment"> * there a reliable Viterbi analogue to word-level Forward-Backward</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;<span class="comment"> * like there is for state-level?  Or, is it just lattice density?)</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *</div><div class="line"><a name="l01215"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a0cc8e4824f4f23ecbf511b0bb096a3ea"> 1215</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a0cc8e4824f4f23ecbf511b0bb096a3ea">ps_lattice_bestpath</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, ngram_model_t *lmset,</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;                    float32 lwf, float32 ascale)</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;{</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    <a class="code" href="structps__search__s.html">ps_search_t</a> *search;</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *bestend;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;    logmath_t *lmath;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    int32 bestescr;</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    search = dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    lmath = dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;    <span class="comment">/* Initialize path scores for all links exiting dag-&gt;start, and</span></div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment">     * set all other scores to the minimum.  Also initialize alphas to</span></div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment">     * log-zero. */</span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;        <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;            x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> = MAX_NEG_INT32;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;            x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> = logmath_get_zero(lmath);</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;        }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;    }</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;    <span class="keywordflow">for</span> (x = dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;        int32 n_used;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;        int16 to_is_fil;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;        to_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>) &amp;&amp; x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;        <span class="comment">/* Best path points to dag-&gt;start, obviously. */</span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;        x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> = x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a>;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;        <span class="keywordflow">if</span> (lmset &amp;&amp; !to_is_fil)</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;            x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> += (ngram_bg_score(lmset, x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;                                ps_search_start_wid(search), &amp;n_used) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * lwf;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;        x-&gt;link-&gt;best_prev = NULL;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;        <span class="comment">/* No predecessors for start links. */</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;        x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> = 0;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;    }</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    <span class="comment">/* Traverse the edges in the graph, updating path scores. */</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;    <span class="keywordflow">for</span> (link = <a class="code" href="ps__lattice_8c.html#a3bd22d7b0561c81f874c115a200e84b9">ps_lattice_traverse_edges</a>(dag, NULL, NULL);</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;         link; link = <a class="code" href="ps__lattice_8c.html#a8ab5c5bbbcf02a087a81232476dbd2a3">ps_lattice_traverse_next</a>(dag, NULL)) {</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;        int32 bprob, n_used;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;        int32 w3_wid, w2_wid;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;        int16 w3_is_fil, w2_is_fil;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;        <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *prev_link;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;        <span class="comment">/* Sanity check, we should not be traversing edges that</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;<span class="comment">         * weren&#39;t previously updated, otherwise nasty overflows will result. */</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;        assert(link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> != MAX_NEG_INT32);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;        <span class="comment">/* Find word predecessor if from-word is filler */</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;        w3_wid = link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;        w2_wid = link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;        w3_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>) &amp;&amp; link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;        w2_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), w2_wid) &amp;&amp; link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;        prev_link = link;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;        <span class="keywordflow">if</span> (w3_is_fil) {</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;            <span class="keywordflow">while</span> (prev_link-&gt;best_prev != NULL) {</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;                prev_link = prev_link-&gt;best_prev;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;                w3_wid = prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;                <span class="keywordflow">if</span> (!<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), w3_wid) || prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>) {</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;                    w3_is_fil = FALSE;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;                }</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;            }</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;        }</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;        <span class="comment">/* Calculate common bigram probability for all alphas. */</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;        <span class="keywordflow">if</span> (lmset &amp;&amp; !w3_is_fil &amp;&amp; !w2_is_fil)</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;            bprob = ngram_ng_prob(lmset, w2_wid, &amp;w3_wid, 1, &amp;n_used);</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;            bprob = 0;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;        <span class="comment">/* Add in this link&#39;s acoustic score, which was a constant</span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;<span class="comment">           factor in previous computations (if any). */</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;        link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> += (link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * ascale;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;        <span class="keywordflow">if</span> (w2_is_fil) {</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;            w2_is_fil = w3_is_fil;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;            w3_is_fil = TRUE;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;            w2_wid = w3_wid;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;            <span class="keywordflow">while</span> (prev_link-&gt;best_prev != NULL) {</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;                prev_link = prev_link-&gt;best_prev;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;                w3_wid = prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;                <span class="keywordflow">if</span> (!<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), w3_wid) || prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>) {</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;                    w3_is_fil = FALSE;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;                }</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;            }</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;        }</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;        <span class="comment">/* Update scores for all paths exiting link-&gt;to. */</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;        <span class="keywordflow">for</span> (x = link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;            int32 score;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;            int32 w1_wid;</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;            int16 w1_is_fil;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;            w1_wid = x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;            w1_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), w1_wid) &amp;&amp; x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;            <span class="comment">/* Update alpha with sum of previous alphas. */</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;            x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> = logmath_add(lmath, x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a>, link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + bprob);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;            <span class="comment">/* Update link score with maximum link score. */</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;            score = link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> + x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a>;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;            <span class="comment">/* Calculate language score for bestpath if possible */</span></div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;            <span class="keywordflow">if</span> (lmset &amp;&amp; !w1_is_fil &amp;&amp; !w2_is_fil) {</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;                <span class="keywordflow">if</span> (w3_is_fil)</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;                    <span class="comment">//partial context available</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;                    score += (ngram_bg_score(lmset, w1_wid, w2_wid, &amp;n_used) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * lwf;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;                    <span class="comment">//full context available</span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;                    score += (ngram_tg_score(lmset, w1_wid, w2_wid, w3_wid, &amp;n_used) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * lwf;</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;            }</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;            <span class="keywordflow">if</span> (score <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a>) {</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;                x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> = score;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;                x-&gt;link-&gt;best_prev = link;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;            }</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;        }</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;    }</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;    <span class="comment">/* Find best link entering final node, and calculate normalizer</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;<span class="comment">     * for posterior probabilities. */</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;    bestend = NULL;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;    bestescr = MAX_NEG_INT32;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    <span class="comment">/* Normalizer is the alpha for the imaginary link exiting the</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="comment">       final node. */</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a> = logmath_get_zero(lmath);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    <span class="keywordflow">for</span> (x = dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;        int32 bprob, n_used;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;        int32 from_wid;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;        int16 from_is_fil;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;        from_wid = x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;        from_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), from_wid) &amp;&amp; x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;        <span class="keywordflow">if</span> (from_is_fil) {</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;            <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *prev_link = x-&gt;link;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;            <span class="keywordflow">while</span> (prev_link-&gt;best_prev != NULL) {</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;                prev_link = prev_link-&gt;best_prev;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;                from_wid = prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;                <span class="keywordflow">if</span> (!<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(ps_search_dict(search), from_wid) || prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>) {</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;                    from_is_fil = FALSE;</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;                }</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;            }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;        }</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;        <span class="keywordflow">if</span> (lmset &amp;&amp; !from_is_fil)</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;            bprob = ngram_ng_prob(lmset,</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;                                  x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;                                  &amp;from_wid, 1, &amp;n_used);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;            bprob = 0;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;        dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a> = logmath_add(lmath, dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>, x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + bprob);</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;        <span class="keywordflow">if</span> (x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> bestescr) {</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;            bestescr = x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a>;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;            bestend = x-&gt;link;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;        }</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;    }</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;    <span class="comment">/* FIXME: floating point... */</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;    dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a> += (int32)(dag-&gt;<a class="code" href="structps__lattice__s.html#aba113d4134c72d7405423c77bcc1247e">final_node_ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * ascale;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;    E_INFO(<span class="stringliteral">&quot;Bestpath score: %d\n&quot;</span>, bestescr);</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;    E_INFO(<span class="stringliteral">&quot;Normalizer P(O) = alpha(%s:%d:%d) = %d\n&quot;</span>,</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;           dict_wordstr(dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>-&gt;<a class="code" href="structps__search__s.html#a918f243fa966e72c47f697fb9e60089d">dict</a>, dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>),</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;           dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a>, dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>-&gt;<a class="code" href="structps__latnode__s.html#a5c7b9114d131151d6ce85228ea9f829d">lef</a>,</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;           dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>);</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;    <span class="keywordflow">return</span> bestend;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;}</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;<span class="keyword">static</span> int32</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;ps_lattice_joint(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link, float32 ascale)</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;{</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    ngram_model_t *lmset;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    int32 jprob;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    <span class="comment">/* Sort of a hack... */</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;    <span class="keywordflow">if</span> (dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a> &amp;&amp; 0 == strcmp(ps_search_type(dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>), PS_SEARCH_TYPE_NGRAM))</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;        lmset = ((<a class="code" href="structngram__search__s.html">ngram_search_t</a> *)dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>)-&gt;lmset;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;        lmset = NULL;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;    jprob = (dag-&gt;<a class="code" href="structps__lattice__s.html#aba113d4134c72d7405423c77bcc1247e">final_node_ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * ascale;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;    <span class="keywordflow">while</span> (link) {</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;        <span class="keywordflow">if</span> (lmset) {</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;            <span class="keywordtype">int</span> lback;</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;            int32 from_wid, to_wid;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;            int16 from_is_fil, to_is_fil;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;            from_wid = link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;            to_wid = link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;            from_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, from_wid) &amp;&amp; link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;            to_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, to_wid) &amp;&amp; link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;            <span class="comment">/* Find word predecessor if from-word is filler */</span></div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;            <span class="keywordflow">if</span> (!to_is_fil &amp;&amp; from_is_fil) {</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;                <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *prev_link = link;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;                <span class="keywordflow">while</span> (prev_link-&gt;best_prev != NULL) {</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;                    prev_link = prev_link-&gt;best_prev;</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;                    from_wid = prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;                    <span class="keywordflow">if</span> (!<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, from_wid) || prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>) {</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;                        from_is_fil = FALSE;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;                    }</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;                }</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;            }</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;            <span class="comment">/* Compute unscaled language model probability.  Note that</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="comment">               this is actually not the language model probability</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;<span class="comment">               that corresponds to this link, but that is okay,</span></div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;<span class="comment">               because we are just taking the sum over all links in</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;<span class="comment">               the best path. */</span></div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;            <span class="keywordflow">if</span> (!from_is_fil &amp;&amp; !to_is_fil)</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;                jprob += ngram_ng_prob(lmset, to_wid,</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;                                       &amp;from_wid, 1, &amp;lback);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;        }</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;        <span class="comment">/* If there is no language model, we assume that the language</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;<span class="comment">           model probability (such as it is) has been included in the</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<span class="comment">           link score. */</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;        jprob += (link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * ascale;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;        link = link-&gt;best_prev;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;    }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;    E_INFO(<span class="stringliteral">&quot;Joint P(O,S) = %d P(S|O) = %d\n&quot;</span>, jprob, jprob - dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    <span class="keywordflow">return</span> jprob;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;}</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;int32</div><div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#aafee8a8325301db72711a3680bc385c6"> 1446</a></span>&#160;<a class="code" href="ps__lattice_8c.html#aafee8a8325301db72711a3680bc385c6">ps_lattice_posterior</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, ngram_model_t *lmset,</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;                     float32 ascale)</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;{</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;    logmath_t *lmath;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link;</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *bestend;</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;    int32 bestescr;</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;    lmath = dag-&gt;<a class="code" href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">lmath</a>;</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;    <span class="comment">/* Reset all betas to zero. */</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;        <span class="keywordflow">for</span> (x = node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;            x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> = logmath_get_zero(lmath);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;        }</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    }</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;    bestend = NULL;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    bestescr = MAX_NEG_INT32;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;    <span class="comment">/* Accumulate backward probabilities for all links. */</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;    <span class="keywordflow">for</span> (link = <a class="code" href="ps__lattice_8c.html#a33e1a31ff250c7e7d555e179e2693f5d">ps_lattice_reverse_edges</a>(dag, NULL, NULL);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;         link; link = <a class="code" href="ps__lattice_8c.html#a7a6e0cb0510310b13fd4286cf8f48792">ps_lattice_reverse_next</a>(dag, NULL)) {</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;        int32 bprob, n_used;</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;        int32 from_wid, to_wid;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;        int16 from_is_fil, to_is_fil;</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;        from_wid = link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;        to_wid = link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;        from_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, from_wid) &amp;&amp; link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;        to_is_fil = <a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, to_wid) &amp;&amp; link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> != dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;        <span class="comment">/* Find word predecessor if from-word is filler */</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;        <span class="keywordflow">if</span> (!to_is_fil &amp;&amp; from_is_fil) {</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;            <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *prev_link = link;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;            <span class="keywordflow">while</span> (prev_link-&gt;best_prev != NULL) {</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;                prev_link = prev_link-&gt;best_prev;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;                from_wid = prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;                <span class="keywordflow">if</span> (!<a class="code" href="dict_8h.html#aa5cade4dc6464c620718b86344540aff">dict_filler_word</a>(dag-&gt;<a class="code" href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">dict</a>, from_wid) || prev_link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>) {</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;                    from_is_fil = FALSE;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;                }</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;            }</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;        }</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;        <span class="comment">/* Calculate LM probability. */</span></div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;        <span class="keywordflow">if</span> (lmset &amp;&amp; !from_is_fil &amp;&amp; !to_is_fil)</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;            bprob = ngram_ng_prob(lmset, to_wid, &amp;from_wid, 1, &amp;n_used);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;            bprob = 0;</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;        <span class="keywordflow">if</span> (link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>) {</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;            <span class="comment">/* Track the best path - we will backtrace in order to</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;<span class="comment">               calculate the unscaled joint probability for sentence</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;<span class="comment">               posterior. */</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;            <span class="keywordflow">if</span> (link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a> <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> bestescr) {</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;                bestescr = link-&gt;<a class="code" href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">path_scr</a>;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;                bestend = link;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;            }</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;            <span class="comment">/* Imaginary exit link from final node has beta = 1.0 */</span></div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;            link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> = bprob + (dag-&gt;<a class="code" href="structps__lattice__s.html#aba113d4134c72d7405423c77bcc1247e">final_node_ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * ascale;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;        }</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;            <span class="comment">/* Update beta from all outgoing betas. */</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;            <span class="keywordflow">for</span> (x = link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;                link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> = logmath_add(lmath, link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a>,</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;                                         x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> + bprob</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;                                         + (x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a> &lt;&lt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>) * ascale);</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;            }</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;        }</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;    }</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;    <span class="comment">/* Return P(S|O) = P(O,S)/P(O) */</span></div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;    <span class="keywordflow">return</span> ps_lattice_joint(dag, bestend, ascale) - dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a>;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;}</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;int32</div><div class="line"><a name="l01524"></a><span class="lineno"><a class="line" href="ps__lattice_8c.html#a54c24dc8436c39d0ccc044f7b0ef8f3a"> 1524</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a54c24dc8436c39d0ccc044f7b0ef8f3a">ps_lattice_posterior_prune</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag, int32 beam)</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;{</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;    <a class="code" href="structps__latlink__s.html">ps_latlink_t</a> *link;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;    <span class="keywordtype">int</span> npruned = 0;</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;    <span class="keywordflow">for</span> (link = <a class="code" href="ps__lattice_8c.html#a3bd22d7b0561c81f874c115a200e84b9">ps_lattice_traverse_edges</a>(dag, dag-&gt;<a class="code" href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">start</a>, dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;         link; link = <a class="code" href="ps__lattice_8c.html#a8ab5c5bbbcf02a087a81232476dbd2a3">ps_lattice_traverse_next</a>(dag, dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>)) {</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;        link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">reachable</a> = FALSE;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;        <span class="keywordflow">if</span> (link-&gt;<a class="code" href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">alpha</a> + link-&gt;<a class="code" href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">beta</a> - dag-&gt;<a class="code" href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">norm</a> &lt; beam) {</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;            <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x, *tmp, *next;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;            tmp = NULL;</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;            <span class="keywordflow">for</span> (x = link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = next) {</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;                next = x-&gt;next;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;                <span class="keywordflow">if</span> (x-&gt;link == link) {</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;                    listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>, x);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;                }</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;                <span class="keywordflow">else</span> {</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;                    x-&gt;next = tmp;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;                    tmp = x;</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;                }</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;            }</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;            link-&gt;<a class="code" href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">from</a>-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a> = tmp;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;            tmp = NULL;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;            <span class="keywordflow">for</span> (x = link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a>; x; x = next) {</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;                next = x-&gt;next;</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;                <span class="keywordflow">if</span> (x-&gt;link == link) {</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;                    listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">latlink_list_alloc</a>, x);</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;                }</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;                <span class="keywordflow">else</span> {</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;                    x-&gt;next = tmp;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;                    tmp = x;</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;                }</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;            }</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;            link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">entries</a> = tmp;</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;            listelem_free(dag-&gt;<a class="code" href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">latlink_alloc</a>, link);</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;            ++npruned;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;        }</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;    }</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;    dag_mark_reachable(dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;    <a class="code" href="ps__lattice_8c.html#a6da4e36322aaab4d2ebe812bee9a4439">ps_lattice_delete_unreachable</a>(dag);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;    <span class="keywordflow">return</span> npruned;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;}</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;<span class="comment">/* Parameters to prune n-best alternatives search */</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;<span class="preprocessor">#define MAX_PATHS       500     </span><span class="comment">/* Max allowed active paths at any time */</span><span class="preprocessor"></span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;<span class="preprocessor">#define MAX_HYP_TRIES   10000</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;<span class="comment"> * For each node in any path between from and end of utt, find the</span></div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;<span class="comment"> * best score from &quot;from&quot;.sf to end of utt.  (NOTE: Uses bigram probs;</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;<span class="comment"> * this is an estimate of the best score from &quot;from&quot;.)  (NOTE #2: yes,</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;<span class="comment"> * this is the &quot;heuristic score&quot; used in A* search)</span></div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;<span class="keyword">static</span> int32</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;best_rem_score(<a class="code" href="structps__astar__s.html">ps_astar_t</a> *nbest, <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> * from)</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;{</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;    int32 bestscore, score;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    <span class="keywordflow">if</span> (from-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a> &lt;= 0)</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;        <span class="keywordflow">return</span> (from-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a>);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;    <span class="comment">/* Best score from &quot;from&quot; to end of utt not known; compute from successors */</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;    bestscore = <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a>;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;    <span class="keywordflow">for</span> (x = from-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;        int32 n_used;</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;        score = best_rem_score(nbest, x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;        score += x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a>;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;        <span class="keywordflow">if</span> (nbest-&gt;lmset)</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;            score += (ngram_bg_score(nbest-&gt;lmset, x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;                                     from-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>, &amp;n_used) &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>)</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;                      * nbest-&gt;lwf;</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;        if (score <a class="code" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a> bestscore)</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;            bestscore = score;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    }</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;    from-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a> = bestscore;</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;    <span class="keywordflow">return</span> bestscore;</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;}</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;<span class="comment"> * Insert newpath in sorted (by path score) list of paths.  But if newpath is</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;<span class="comment"> * too far down the list, drop it (FIXME: necessary?)</span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;<span class="comment"> * total_score = path score (newpath) + rem_score to end of utt.</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;path_insert(<a class="code" href="structps__astar__s.html">ps_astar_t</a> *nbest, <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *newpath, int32 total_score)</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;{</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *prev, *p;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;    int32 i;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;    prev = NULL;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;    <span class="keywordflow">for</span> (i = 0, p = nbest-&gt;path_list; (i &lt; MAX_PATHS) &amp;&amp; p; p = p-&gt;<a class="code" href="structps__latpath__s.html#a614ad4a857fb07f76959d385abf50a6d">next</a>, i++) {</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;        <span class="keywordflow">if</span> ((p-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> + p-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a>) &lt; total_score)</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;        prev = p;</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;    }</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;    <span class="comment">/* newpath should be inserted between prev and p */</span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;    <span class="keywordflow">if</span> (i &lt; MAX_PATHS) {</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;        <span class="comment">/* Insert new partial hyp */</span></div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;        newpath-&gt;<a class="code" href="structps__latpath__s.html#a614ad4a857fb07f76959d385abf50a6d">next</a> = p;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;        <span class="keywordflow">if</span> (!prev)</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;            nbest-&gt;path_list = newpath;</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;            prev-&gt;<a class="code" href="structps__latpath__s.html#a614ad4a857fb07f76959d385abf50a6d">next</a> = newpath;</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;        <span class="keywordflow">if</span> (!p)</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;            nbest-&gt;path_tail = newpath;</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;        nbest-&gt;n_path++;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;        nbest-&gt;n_hyp_insert++;</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;        nbest-&gt;insert_depth += i;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;    }</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;        <span class="comment">/* newpath score too low; reject it and also prune paths beyond MAX_PATHS */</span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;        nbest-&gt;path_tail = prev;</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;        prev-&gt;<a class="code" href="structps__latpath__s.html#a614ad4a857fb07f76959d385abf50a6d">next</a> = NULL;</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;        nbest-&gt;n_path = MAX_PATHS;</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;        listelem_free(nbest-&gt;<a class="code" href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">latpath_alloc</a>, newpath);</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;        nbest-&gt;n_hyp_reject++;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;        <span class="keywordflow">for</span> (; p; p = newpath) {</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;            newpath = p-&gt;<a class="code" href="structps__latpath__s.html#a614ad4a857fb07f76959d385abf50a6d">next</a>;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;            listelem_free(nbest-&gt;<a class="code" href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">latpath_alloc</a>, p);</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;            nbest-&gt;n_hyp_reject++;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;        }</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;    }</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;}</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;<span class="comment">/* Find all possible extensions to given partial path */</span></div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;path_extend(<a class="code" href="structps__astar__s.html">ps_astar_t</a> *nbest, <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> * path)</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;{</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;    <a class="code" href="structlatlink__list__s.html">latlink_list_t</a> *x;</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;    <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *newpath;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;    int32 total_score, tail_score;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;    <span class="comment">/* Consider all successors of path-&gt;node */</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;    <span class="keywordflow">for</span> (x = path-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a>; x; x = x-&gt;next) {</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;        int32 n_used;</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;        <span class="comment">/* Skip successor if no path from it reaches the final node */</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;        <span class="keywordflow">if</span> (x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a> &lt;= <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a>)</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;        <span class="comment">/* Create path extension and compute exact score for this extension */</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;        newpath = listelem_malloc(nbest-&gt;<a class="code" href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">latpath_alloc</a>);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;        newpath-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a> = x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">to</a>;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;        newpath-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a> = path;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;        newpath-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> = path-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> + x-&gt;link-&gt;<a class="code" href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ascr</a>;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;        <span class="keywordflow">if</span> (nbest-&gt;lmset) {</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;            <span class="keywordflow">if</span> (path-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a>) {</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;                newpath-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> += nbest-&gt;lwf</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;                    * (ngram_tg_score(nbest-&gt;lmset, newpath-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;                                      path-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;                                      path-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a>-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>, &amp;n_used)</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;                       &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>);</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;            }</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;            <span class="keywordflow">else</span> </div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;                newpath-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> += nbest-&gt;lwf</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;                    * (ngram_bg_score(nbest-&gt;lmset, newpath-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>,</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;                                      path-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>, &amp;n_used)</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;                       &gt;&gt; <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>);</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;        }</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;        <span class="comment">/* Insert new partial path hypothesis into sorted path_list */</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;        nbest-&gt;n_hyp_tried++;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;        total_score = newpath-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> + newpath-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a>;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;        <span class="comment">/* First see if hyp would be worse than the worst */</span></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;        <span class="keywordflow">if</span> (nbest-&gt;n_path &gt;= MAX_PATHS) {</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;            tail_score =</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;                nbest-&gt;path_tail-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a></div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;                + nbest-&gt;path_tail-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a>;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;            <span class="keywordflow">if</span> (total_score &lt; tail_score) {</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;                listelem_free(nbest-&gt;<a class="code" href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">latpath_alloc</a>, newpath);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;                nbest-&gt;n_hyp_reject++;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;            }</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;        }</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;        path_insert(nbest, newpath, total_score);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;    }</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;}</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;<a class="code" href="structps__astar__s.html">ps_astar_t</a> *</div><div class="line"><a name="l01712"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#aaf9aedd3cd8bd1d45053e10828215a25"> 1712</a></span>&#160;<a class="code" href="ps__lattice_8c.html#aaf9aedd3cd8bd1d45053e10828215a25">ps_astar_start</a>(<a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag,</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;                  ngram_model_t *lmset,</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;                  float32 lwf,</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;                  <span class="keywordtype">int</span> sf, <span class="keywordtype">int</span> ef,</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;                  <span class="keywordtype">int</span> w1, <span class="keywordtype">int</span> w2)</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;{</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;    <a class="code" href="structps__astar__s.html">ps_astar_t</a> *nbest;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;    nbest = ckd_calloc(1, <span class="keyword">sizeof</span>(*nbest));</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;    nbest-&gt;dag = dag;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;    nbest-&gt;lmset = lmset;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;    nbest-&gt;lwf = lwf;</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;    nbest-&gt;sf = sf;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;    <span class="keywordflow">if</span> (ef &lt; 0)</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;        nbest-&gt;ef = dag-&gt;<a class="code" href="structps__lattice__s.html#a3a997dc60d28b84d5bfc01f9ce25a891">n_frames</a> + 1;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;        nbest-&gt;ef = ef;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;    nbest-&gt;w1 = w1;</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;    nbest-&gt;w2 = w2;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;    nbest-&gt;<a class="code" href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">latpath_alloc</a> = listelem_alloc_init(<span class="keyword">sizeof</span>(<a class="code" href="structps__latpath__s.html">ps_latpath_t</a>));</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;    <span class="comment">/* Initialize rem_score (A* heuristic) to default values */</span></div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;        <span class="keywordflow">if</span> (node == dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>)</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;            node-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a> = 0;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (node-&gt;<a class="code" href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">exits</a> == NULL)</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;            node-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a> = <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a>;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;            node-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a> = 1;   <span class="comment">/* +ve =&gt; unknown value */</span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;    }</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;    <span class="comment">/* Create initial partial hypotheses list consisting of nodes starting at sf */</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;    nbest-&gt;path_list = nbest-&gt;path_tail = NULL;</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;    <span class="keywordflow">for</span> (node = dag-&gt;<a class="code" href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">nodes</a>; node; node = node-&gt;<a class="code" href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">next</a>) {</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;        <span class="keywordflow">if</span> (node-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a> == sf) {</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;            <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *path;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;            int32 n_used;</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;            best_rem_score(nbest, node);</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;            path = listelem_malloc(nbest-&gt;<a class="code" href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">latpath_alloc</a>);</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;            path-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a> = node;</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;            path-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a> = NULL;</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;            <span class="keywordflow">if</span> (nbest-&gt;lmset)</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;                path-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> = nbest-&gt;lwf *</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;                    ((w1 &lt; 0)</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;                    ? ngram_bg_score(nbest-&gt;lmset, node-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>, w2, &amp;n_used)</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;                    : ngram_tg_score(nbest-&gt;lmset, node-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>, w2, w1, &amp;n_used));</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;                path-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> = 0;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;            path-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> &gt;&gt;= <a class="code" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>;</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;            path_insert(nbest, path, path-&gt;<a class="code" href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">score</a> + node-&gt;info.<a class="code" href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">rem_score</a>);</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;        }</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;    }</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;    <span class="keywordflow">return</span> nbest;</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;}</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;<a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *</div><div class="line"><a name="l01771"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#a6bea95f8fb827af790bbe6ce1920908c"> 1771</a></span>&#160;<a class="code" href="ps__lattice_8c.html#a6bea95f8fb827af790bbe6ce1920908c">ps_astar_next</a>(<a class="code" href="structps__astar__s.html">ps_astar_t</a> *nbest)</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;{</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;    <a class="code" href="structps__lattice__s.html">ps_lattice_t</a> *dag;</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;    dag = nbest-&gt;dag;</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;    <span class="comment">/* Pop the top (best) partial hypothesis */</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;    <span class="keywordflow">while</span> ((nbest-&gt;top = nbest-&gt;path_list) != NULL) {</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;        nbest-&gt;path_list = nbest-&gt;path_list-&gt;<a class="code" href="structps__latpath__s.html#a614ad4a857fb07f76959d385abf50a6d">next</a>;</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;        <span class="keywordflow">if</span> (nbest-&gt;top == nbest-&gt;path_tail)</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;            nbest-&gt;path_tail = NULL;</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;        nbest-&gt;n_path--;</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;        <span class="comment">/* Complete hypothesis? */</span></div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;        <span class="keywordflow">if</span> ((nbest-&gt;top-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a> &gt;= nbest-&gt;ef)</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;            || ((nbest-&gt;top-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a> == dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>) &amp;&amp;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;                (nbest-&gt;ef &gt; dag-&gt;<a class="code" href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">end</a>-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a>))) {</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;            <span class="comment">/* FIXME: Verify that it is non-empty.  Also we may want</span></div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;<span class="comment">             * to verify that it is actually distinct from other</span></div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;<span class="comment">             * paths, since often this is not the case*/</span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;            <span class="keywordflow">return</span> nbest-&gt;top;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;        }</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;            <span class="keywordflow">if</span> (nbest-&gt;top-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#a584ee5a303355d851ac903718998df14">fef</a> &lt; nbest-&gt;ef)</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;                path_extend(nbest, nbest-&gt;top);</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;        }</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;    }</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;    <span class="comment">/* Did not find any more paths to extend. */</span></div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;    <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;}</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;<span class="keywordtype">char</span> <span class="keyword">const</span> *</div><div class="line"><a name="l01804"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#ac7372b5c5ec111f6814ce1ba495593e4"> 1804</a></span>&#160;<a class="code" href="ps__lattice_8c.html#ac7372b5c5ec111f6814ce1ba495593e4">ps_astar_hyp</a>(<a class="code" href="structps__astar__s.html">ps_astar_t</a> *nbest, <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *path)</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;{</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;    <a class="code" href="structps__search__s.html">ps_search_t</a> *search;</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;    <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *p;</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;    <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;    <span class="keywordtype">char</span> *c;</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;    <span class="keywordtype">char</span> *hyp;</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;    search = nbest-&gt;dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>;</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;    <span class="comment">/* Backtrace once to get hypothesis length. */</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;    len = 0;</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;    <span class="keywordflow">for</span> (p = path; p; p = p-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a>) {</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#ad2eba4ca92dd1a3721608e003d95d8c1">dict_real_word</a>(ps_search_dict(search), p-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>)) {</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;            <span class="keywordtype">char</span> *wstr = dict_wordstr(ps_search_dict(search), p-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;            <span class="keywordflow">if</span> (wstr != NULL)</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;                len += strlen(wstr) + 1;</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;        }</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;    }</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;    <span class="keywordflow">if</span> (len == 0) {</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;    }</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;    <span class="comment">/* Backtrace again to construct hypothesis string. */</span></div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;    hyp = ckd_calloc(1, len);</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;    c = hyp + len - 1;</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;    <span class="keywordflow">for</span> (p = path; p; p = p-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a>) {</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="dict_8h.html#ad2eba4ca92dd1a3721608e003d95d8c1">dict_real_word</a>(ps_search_dict(search), p-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>)) {</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;            <span class="keywordtype">char</span> *wstr = dict_wordstr(ps_search_dict(search), p-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>-&gt;<a class="code" href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">basewid</a>);</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;            <span class="keywordflow">if</span> (wstr != NULL) {</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;                len = strlen(wstr);</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;                c -= len;</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;                memcpy(c, wstr, len);</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;                <span class="keywordflow">if</span> (c &gt; hyp) {</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;                    --c;</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;                    *c = <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;                }</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;            }</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;        }</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;    }</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;    nbest-&gt;<a class="code" href="structps__astar__s.html#ace603617a74a81575519ae1bb94720c4">hyps</a> = glist_add_ptr(nbest-&gt;<a class="code" href="structps__astar__s.html#ace603617a74a81575519ae1bb94720c4">hyps</a>, hyp);</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;    <span class="keywordflow">return</span> hyp;</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;}</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;ps_astar_node2itor(<a class="code" href="structastar__seg__s.html">astar_seg_t</a> *itor)</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;{</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;    <a class="code" href="structps__seg__s.html">ps_seg_t</a> *seg = (<a class="code" href="structps__seg__s.html">ps_seg_t</a> *)itor;</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;    <a class="code" href="structps__latnode__s.html">ps_latnode_t</a> *node;</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;    assert(itor-&gt;cur &lt; itor-&gt;n_nodes);</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;    node = itor-&gt;nodes[itor-&gt;cur];</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;    <span class="keywordflow">if</span> (itor-&gt;cur == itor-&gt;n_nodes - 1)</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#ab25ecc6af8d2695c6097cf7e934eadd4">ef</a> = node-&gt;<a class="code" href="structps__latnode__s.html#a5c7b9114d131151d6ce85228ea9f829d">lef</a>;</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;        seg-&gt;<a class="code" href="structps__seg__s.html#ab25ecc6af8d2695c6097cf7e934eadd4">ef</a> = itor-&gt;nodes[itor-&gt;cur + 1]-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a> - 1;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;    seg-&gt;<a class="code" href="structps__seg__s.html#a97a0dc7db931c7e3f98d23d21ce27f04">word</a> = dict_wordstr(ps_search_dict(seg-&gt;<a class="code" href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">search</a>), node-&gt;<a class="code" href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">wid</a>);</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;    seg-&gt;<a class="code" href="structps__seg__s.html#a885a599726cd0efba573d106d016e6e2">sf</a> = node-&gt;<a class="code" href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">sf</a>;</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;    seg-&gt;<a class="code" href="structps__seg__s.html#ae683244d90d0a5339930b47757778432">prob</a> = 0; <span class="comment">/* FIXME: implement forward-backward */</span></div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;}</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;ps_astar_seg_free(<a class="code" href="structps__seg__s.html">ps_seg_t</a> *seg)</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;{</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;    <a class="code" href="structastar__seg__s.html">astar_seg_t</a> *itor = (<a class="code" href="structastar__seg__s.html">astar_seg_t</a> *)seg;</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;    ckd_free(itor-&gt;nodes);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;    ckd_free(itor);</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;}</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;<span class="keyword">static</span> <a class="code" href="structps__seg__s.html">ps_seg_t</a> *</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;ps_astar_seg_next(<a class="code" href="structps__seg__s.html">ps_seg_t</a> *seg)</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;{</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;    <a class="code" href="structastar__seg__s.html">astar_seg_t</a> *itor = (<a class="code" href="structastar__seg__s.html">astar_seg_t</a> *)seg;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;    ++itor-&gt;cur;</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;    <span class="keywordflow">if</span> (itor-&gt;cur == itor-&gt;n_nodes) {</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;        ps_astar_seg_free(seg);</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    }</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;        ps_astar_node2itor(itor);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;    }</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;    <span class="keywordflow">return</span> seg;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;}</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;<span class="keyword">static</span> <a class="code" href="structps__segfuncs__s.html">ps_segfuncs_t</a> ps_astar_segfuncs = {</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;    <span class="comment">/* seg_next */</span> ps_astar_seg_next,</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;    <span class="comment">/* seg_free */</span> ps_astar_seg_free</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;};</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;<a class="code" href="structps__seg__s.html">ps_seg_t</a> *</div><div class="line"><a name="l01898"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#ac8e3dff7276c03c93377d0cb79fbdbd7"> 1898</a></span>&#160;<a class="code" href="ps__lattice_8c.html#ac8e3dff7276c03c93377d0cb79fbdbd7">ps_astar_seg_iter</a>(<a class="code" href="structps__astar__s.html">ps_astar_t</a> *astar, <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *path, float32 lwf)</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;{</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;    <a class="code" href="structastar__seg__s.html">astar_seg_t</a> *itor;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    <a class="code" href="structps__latpath__s.html">ps_latpath_t</a> *p;</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;    <span class="keywordtype">int</span> cur;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;    <span class="comment">/* Backtrace and make an iterator, this should look familiar by now. */</span></div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;    itor = ckd_calloc(1, <span class="keyword">sizeof</span>(*itor));</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;    itor-&gt;base.<a class="code" href="structps__seg__s.html#a510362a2281e374c839397c3e5488515">vt</a> = &amp;ps_astar_segfuncs;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;    itor-&gt;base.<a class="code" href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">search</a> = astar-&gt;dag-&gt;<a class="code" href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">search</a>;</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;    itor-&gt;base.<a class="code" href="structps__seg__s.html#a2249c012b83c902f4f8ed8d98ded7d20">lwf</a> = lwf;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;    itor-&gt;n_nodes = itor-&gt;cur = 0;</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;    <span class="keywordflow">for</span> (p = path; p; p = p-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a>) {</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;        ++itor-&gt;n_nodes;</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;    }</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;    itor-&gt;nodes = ckd_calloc(itor-&gt;n_nodes, <span class="keyword">sizeof</span>(*itor-&gt;nodes));</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;    cur = itor-&gt;n_nodes - 1;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;    <span class="keywordflow">for</span> (p = path; p; p = p-&gt;<a class="code" href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">parent</a>) {</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;        itor-&gt;nodes[cur] = p-&gt;<a class="code" href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">node</a>;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;        --cur;</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;    }</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;    ps_astar_node2itor(itor);</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;    <span class="keywordflow">return</span> (<a class="code" href="structps__seg__s.html">ps_seg_t</a> *)itor;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;}</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l01925"></a><span class="lineno"><a class="line" href="ps__lattice__internal_8h.html#abfb03e9e0fcbe3def45120f5ba43be14"> 1925</a></span>&#160;<a class="code" href="ps__lattice_8c.html#abfb03e9e0fcbe3def45120f5ba43be14">ps_astar_finish</a>(<a class="code" href="structps__astar__s.html">ps_astar_t</a> *nbest)</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;{</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;    gnode_t *gn;</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;    <span class="comment">/* Free all hyps. */</span></div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;    <span class="keywordflow">for</span> (gn = nbest-&gt;<a class="code" href="structps__astar__s.html#ace603617a74a81575519ae1bb94720c4">hyps</a>; gn; gn = gnode_next(gn)) {</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;        ckd_free(gnode_ptr(gn));</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;    }</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;    glist_free(nbest-&gt;<a class="code" href="structps__astar__s.html#ace603617a74a81575519ae1bb94720c4">hyps</a>);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;    <span class="comment">/* Free all paths. */</span></div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;    listelem_alloc_free(nbest-&gt;<a class="code" href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">latpath_alloc</a>);</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;    <span class="comment">/* Free the Henge. */</span></div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;    ckd_free(nbest);</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;}</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;</div><div class="ttc" id="dict_8h_html_a05d8dac3e5fe5399ccb8bf7776e203e2"><div class="ttname"><a href="dict_8h.html#a05d8dac3e5fe5399ccb8bf7776e203e2">dict_init</a></div><div class="ttdeci">dict_t * dict_init(cmd_ln_t *config, bin_mdef_t *mdef)</div><div class="ttdoc">Initialize a new dictionary. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00252">dict.c:252</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a6169f8a8d8b7f84596438e5bb3095bc6"><div class="ttname"><a href="ps__lattice_8c.html#a6169f8a8d8b7f84596438e5bb3095bc6">ps_latnode_exits</a></div><div class="ttdeci">ps_latlink_iter_t * ps_latnode_exits(ps_latnode_t *node)</div><div class="ttdoc">Iterate over exits from this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00749">ps_lattice.c:749</a></div></div>
<div class="ttc" id="pocketsphinx__internal_8h_html"><div class="ttname"><a href="pocketsphinx__internal_8h.html">pocketsphinx_internal.h</a></div><div class="ttdoc">Internal implementation of PocketSphinx decoder. </div></div>
<div class="ttc" id="ps__lattice_8c_html_aafee8a8325301db72711a3680bc385c6"><div class="ttname"><a href="ps__lattice_8c.html#aafee8a8325301db72711a3680bc385c6">ps_lattice_posterior</a></div><div class="ttdeci">int32 ps_lattice_posterior(ps_lattice_t *dag, ngram_model_t *lmset, float32 ascale)</div><div class="ttdoc">Calculate link posterior probabilities on a word graph. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01446">ps_lattice.c:1446</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a3bd22d7b0561c81f874c115a200e84b9"><div class="ttname"><a href="ps__lattice_8c.html#a3bd22d7b0561c81f874c115a200e84b9">ps_lattice_traverse_edges</a></div><div class="ttdeci">ps_latlink_t * ps_lattice_traverse_edges(ps_lattice_t *dag, ps_latnode_t *start, ps_latnode_t *end)</div><div class="ttdoc">Start a forward traversal of edges in a word graph. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01091">ps_lattice.c:1091</a></div></div>
<div class="ttc" id="structps__latnode__s_html_af9c4c69f5f85bbc36818357a52432565"><div class="ttname"><a href="structps__latnode__s.html#af9c4c69f5f85bbc36818357a52432565">ps_latnode_s::reachable</a></div><div class="ttdeci">int16 reachable</div><div class="ttdoc">From. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00121">ps_lattice_internal.h:121</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_abfb03e9e0fcbe3def45120f5ba43be14"><div class="ttname"><a href="ps__lattice_8c.html#abfb03e9e0fcbe3def45120f5ba43be14">ps_astar_finish</a></div><div class="ttdeci">void ps_astar_finish(ps_astar_t *nbest)</div><div class="ttdoc">Finish N-best search, releasing resources associated with it. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01925">ps_lattice.c:1925</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a6bea95f8fb827af790bbe6ce1920908c"><div class="ttname"><a href="ps__lattice_8c.html#a6bea95f8fb827af790bbe6ce1920908c">ps_astar_next</a></div><div class="ttdeci">ps_latpath_t * ps_astar_next(ps_astar_t *nbest)</div><div class="ttdoc">Find next best hypothesis of A* on a word graph. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01771">ps_lattice.c:1771</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_ad128ca75e8bc7ca4ba41094fb5b68ee9"><div class="ttname"><a href="ps__lattice_8c.html#ad128ca75e8bc7ca4ba41094fb5b68ee9">ps_lattice_delq</a></div><div class="ttdeci">void ps_lattice_delq(ps_lattice_t *dag)</div><div class="ttdoc">Clear and reset the traversal queue. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01083">ps_lattice.c:1083</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_ac7372b5c5ec111f6814ce1ba495593e4"><div class="ttname"><a href="ps__lattice_8c.html#ac7372b5c5ec111f6814ce1ba495593e4">ps_astar_hyp</a></div><div class="ttdeci">char const * ps_astar_hyp(ps_astar_t *nbest, ps_latpath_t *path)</div><div class="ttdoc">Get hypothesis string from A* search. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01804">ps_lattice.c:1804</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a8e9cfaf92f9a3588d018578854c61e88"><div class="ttname"><a href="structps__lattice__s.html#a8e9cfaf92f9a3588d018578854c61e88">ps_lattice_s::latlink_list_alloc</a></div><div class="ttdeci">listelem_alloc_t * latlink_list_alloc</div><div class="ttdoc">List element allocator for this DAG. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00082">ps_lattice_internal.h:82</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a0cc8e4824f4f23ecbf511b0bb096a3ea"><div class="ttname"><a href="ps__lattice_8c.html#a0cc8e4824f4f23ecbf511b0bb096a3ea">ps_lattice_bestpath</a></div><div class="ttdeci">ps_latlink_t * ps_lattice_bestpath(ps_lattice_t *dag, ngram_model_t *lmset, float32 lwf, float32 ascale)</div><div class="ttdoc">Do N-Gram based best-path search on a word graph. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01215">ps_lattice.c:1215</a></div></div>
<div class="ttc" id="structps__search__s_html"><div class="ttname"><a href="structps__search__s.html">ps_search_s</a></div><div class="ttdoc">Base structure for search module. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00098">pocketsphinx_internal.h:98</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_afedbc5558c18f7d029e84a4e27e38187"><div class="ttname"><a href="ps__lattice_8c.html#afedbc5558c18f7d029e84a4e27e38187">ps_lattice_seg_iter</a></div><div class="ttdeci">ps_seg_t * ps_lattice_seg_iter(ps_lattice_t *dag, ps_latlink_t *link, float32 lwf)</div><div class="ttdoc">Get hypothesis segmentation iterator after bestpath search. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01006">ps_lattice.c:1006</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a28f4ff5039e0961d57331d2605801010"><div class="ttname"><a href="structps__lattice__s.html#a28f4ff5039e0961d57331d2605801010">ps_lattice_s::lmath</a></div><div class="ttdeci">logmath_t * lmath</div><div class="ttdoc">Log-math object. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00064">ps_lattice_internal.h:64</a></div></div>
<div class="ttc" id="structps__decoder__s_html_aef6228c17907cc1d0cef835b238b5d91"><div class="ttname"><a href="structps__decoder__s.html#aef6228c17907cc1d0cef835b238b5d91">ps_decoder_s::dict</a></div><div class="ttdeci">dict_t * dict</div><div class="ttdoc">Pronunciation dictionary. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00208">pocketsphinx_internal.h:208</a></div></div>
<div class="ttc" id="structps__latnode__s_html_a74ba4cfd8ebbb73772b8377d4517d9c0"><div class="ttname"><a href="structps__latnode__s.html#a74ba4cfd8ebbb73772b8377d4517d9c0">ps_latnode_s::fanin</a></div><div class="ttdeci">int32 fanin</div><div class="ttdoc">Number nodes with links to this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00125">ps_lattice_internal.h:125</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="structps__latnode__s_html_a5c7b9114d131151d6ce85228ea9f829d"><div class="ttname"><a href="structps__latnode__s.html#a5c7b9114d131151d6ce85228ea9f829d">ps_latnode_s::lef</a></div><div class="ttdeci">int32 lef</div><div class="ttdoc">Last end frame. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00119">ps_lattice_internal.h:119</a></div></div>
<div class="ttc" id="structps__latlink__s_html_a59e2bf9a1c0dd6ce4ac76a17c58fbe36"><div class="ttname"><a href="structps__latlink__s.html#a59e2bf9a1c0dd6ce4ac76a17c58fbe36">ps_latlink_s::ef</a></div><div class="ttdeci">frame_idx_t ef</div><div class="ttdoc">Ending frame of this word. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00102">ps_lattice_internal.h:102</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a607bfd65847baff33f404936c1543d16"><div class="ttname"><a href="ps__lattice_8c.html#a607bfd65847baff33f404936c1543d16">ps_latnode_iter</a></div><div class="ttdeci">ps_latnode_iter_t * ps_latnode_iter(ps_lattice_t *dag)</div><div class="ttdoc">Start iterating over nodes in the lattice. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00688">ps_lattice.c:688</a></div></div>
<div class="ttc" id="structps__search__s_html_a0fdf6fe8c4d9c28f10c48c09517c6b91"><div class="ttname"><a href="structps__search__s.html#a0fdf6fe8c4d9c28f10c48c09517c6b91">ps_search_s::acmod</a></div><div class="ttdeci">acmod_t * acmod</div><div class="ttdoc">Acoustic model. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00106">pocketsphinx_internal.h:106</a></div></div>
<div class="ttc" id="dict_8h_html_a51ee6c067decce8dbc182f95f7b33e91"><div class="ttname"><a href="dict_8h.html#a51ee6c067decce8dbc182f95f7b33e91">dict_free</a></div><div class="ttdeci">int dict_free(dict_t *d)</div><div class="ttdoc">Release a pointer to a dictionary. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00468">dict.c:468</a></div></div>
<div class="ttc" id="structps__latnode__s_html_a78243b37753f7a209c15d6adf98ee3f7"><div class="ttname"><a href="structps__latnode__s.html#a78243b37753f7a209c15d6adf98ee3f7">ps_latnode_s::id</a></div><div class="ttdeci">int32 id</div><div class="ttdoc">Unique id for this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00114">ps_lattice_internal.h:114</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a551b8246b45e8953491a24db438c59c1"><div class="ttname"><a href="ps__lattice_8c.html#a551b8246b45e8953491a24db438c59c1">ps_lattice_penalize_fillers</a></div><div class="ttdeci">void ps_lattice_penalize_fillers(ps_lattice_t *dag, int32 silpen, int32 fillpen)</div><div class="ttdoc">Insert penalty for fillers. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00106">ps_lattice.c:106</a></div></div>
<div class="ttc" id="structdag__seg__s_html_a72f90e137c1f83ab3df6ecd5e1b6dc71"><div class="ttname"><a href="structdag__seg__s.html#a72f90e137c1f83ab3df6ecd5e1b6dc71">dag_seg_s::base</a></div><div class="ttdeci">ps_seg_t base</div><div class="ttdoc">Base structure. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00140">ps_lattice_internal.h:140</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a1f8f4dba5bbcf9056c5bd3e97e39839d"><div class="ttname"><a href="ps__lattice_8c.html#a1f8f4dba5bbcf9056c5bd3e97e39839d">ps_latlink_baseword</a></div><div class="ttdeci">char const * ps_latlink_baseword(ps_lattice_t *dag, ps_latlink_t *link)</div><div class="ttdoc">Get base word string from a lattice link. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00808">ps_lattice.c:808</a></div></div>
<div class="ttc" id="structps__astar__s_html_ace603617a74a81575519ae1bb94720c4"><div class="ttname"><a href="structps__astar__s.html#ace603617a74a81575519ae1bb94720c4">ps_astar_s::hyps</a></div><div class="ttdeci">glist_t hyps</div><div class="ttdoc">List of hypothesis strings. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00183">ps_lattice_internal.h:183</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_aed9371a246b6565a2142c3baefd08002"><div class="ttname"><a href="ps__lattice_8c.html#aed9371a246b6565a2142c3baefd08002">ps_lattice_free</a></div><div class="ttdeci">int ps_lattice_free(ps_lattice_t *dag)</div><div class="ttdoc">Free a lattice. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00665">ps_lattice.c:665</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a5d936695a3813e117d20b585d48db8fe"><div class="ttname"><a href="structps__lattice__s.html#a5d936695a3813e117d20b585d48db8fe">ps_lattice_s::start</a></div><div class="ttdeci">ps_latnode_t * start</div><div class="ttdoc">Starting node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00071">ps_lattice_internal.h:71</a></div></div>
<div class="ttc" id="structps__seg__s_html_a510362a2281e374c839397c3e5488515"><div class="ttname"><a href="structps__seg__s.html#a510362a2281e374c839397c3e5488515">ps_seg_s::vt</a></div><div class="ttdeci">ps_segfuncs_t * vt</div><div class="ttdoc">V-table of seg methods. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00179">pocketsphinx_internal.h:179</a></div></div>
<div class="ttc" id="structacmod__s_html_a9de7e8ac9c0c4df3d2a9ad5406787f3c"><div class="ttname"><a href="structacmod__s.html#a9de7e8ac9c0c4df3d2a9ad5406787f3c">acmod_s::lmath</a></div><div class="ttdeci">logmath_t * lmath</div><div class="ttdoc">Log-math computation. </div><div class="ttdef"><b>Definition:</b> <a href="acmod_8h_source.html#l00151">acmod.h:151</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a990f488a747f95bc94777a755401710d"><div class="ttname"><a href="ps__lattice_8c.html#a990f488a747f95bc94777a755401710d">ps_latnode_iter_node</a></div><div class="ttdeci">ps_latnode_t * ps_latnode_iter_node(ps_latnode_iter_t *itor)</div><div class="ttdoc">Get node from iterator. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00706">ps_lattice.c:706</a></div></div>
<div class="ttc" id="structdag__seg__s_html_a5fcc22d787e4db1bdc728ff8faead738"><div class="ttname"><a href="structdag__seg__s.html#a5fcc22d787e4db1bdc728ff8faead738">dag_seg_s::links</a></div><div class="ttdeci">ps_latlink_t ** links</div><div class="ttdoc">Array of lattice links. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00141">ps_lattice_internal.h:141</a></div></div>
<div class="ttc" id="structps__seg__s_html_a69e605f422eeed1a9c67437e8ddd8b08"><div class="ttname"><a href="structps__seg__s.html#a69e605f422eeed1a9c67437e8ddd8b08">ps_seg_s::lscr</a></div><div class="ttdeci">int32 lscr</div><div class="ttdoc">Language model score. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00185">pocketsphinx_internal.h:185</a></div></div>
<div class="ttc" id="dict_8h_html"><div class="ttname"><a href="dict_8h.html">dict.h</a></div><div class="ttdoc">Operations on dictionary. </div></div>
<div class="ttc" id="structps__lattice__s_html_a26c029189074db2f668d5a9d67eb7af5"><div class="ttname"><a href="structps__lattice__s.html#a26c029189074db2f668d5a9d67eb7af5">ps_lattice_s::q_head</a></div><div class="ttdeci">latlink_list_t * q_head</div><div class="ttdoc">Queue of links for traversal. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00085">ps_lattice_internal.h:85</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a891d9c5aa6a5cbe8631812fbd6e87e25"><div class="ttname"><a href="ps__lattice_8c.html#a891d9c5aa6a5cbe8631812fbd6e87e25">ps_latlink_nodes</a></div><div class="ttdeci">ps_latnode_t * ps_latlink_nodes(ps_latlink_t *link, ps_latnode_t **out_src)</div><div class="ttdoc">Get destination and source nodes from a lattice link. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00793">ps_lattice.c:793</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a9ebaeb7be7a83980569f0c544eb6babb"><div class="ttname"><a href="structps__lattice__s.html#a9ebaeb7be7a83980569f0c544eb6babb">ps_lattice_s::search</a></div><div class="ttdeci">ps_search_t * search</div><div class="ttdoc">Search (if generated by search). </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00065">ps_lattice_internal.h:65</a></div></div>
<div class="ttc" id="s3types_8h_html_a5c42410b7125da611210c5a4be29898b"><div class="ttname"><a href="s3types_8h.html#a5c42410b7125da611210c5a4be29898b">BAD_S3WID</a></div><div class="ttdeci">#define BAD_S3WID</div><div class="ttdoc">Dictionary word id. </div><div class="ttdef"><b>Definition:</b> <a href="s3types_8h_source.html#l00090">s3types.h:90</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_af8a33c587f5b7a6f5b8c86e6068dc297"><div class="ttname"><a href="ps__lattice_8c.html#af8a33c587f5b7a6f5b8c86e6068dc297">ps_lattice_retain</a></div><div class="ttdeci">ps_lattice_t * ps_lattice_retain(ps_lattice_t *dag)</div><div class="ttdoc">Retain a lattice. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00658">ps_lattice.c:658</a></div></div>
<div class="ttc" id="structps__latlink__s_html_ab0912c26d1472b4c5c07042c19ffb979"><div class="ttname"><a href="structps__latlink__s.html#ab0912c26d1472b4c5c07042c19ffb979">ps_latlink_s::from</a></div><div class="ttdeci">struct ps_latnode_s * from</div><div class="ttdoc">From node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00097">ps_lattice_internal.h:97</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a3a997dc60d28b84d5bfc01f9ce25a891"><div class="ttname"><a href="structps__lattice__s.html#a3a997dc60d28b84d5bfc01f9ce25a891">ps_lattice_s::n_frames</a></div><div class="ttdeci">frame_idx_t n_frames</div><div class="ttdoc">Number of frames for this utterance. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00074">ps_lattice_internal.h:74</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a7a6e0cb0510310b13fd4286cf8f48792"><div class="ttname"><a href="ps__lattice_8c.html#a7a6e0cb0510310b13fd4286cf8f48792">ps_lattice_reverse_next</a></div><div class="ttdeci">ps_latlink_t * ps_lattice_reverse_next(ps_lattice_t *dag, ps_latnode_t *start)</div><div class="ttdoc">Get the next link in reverse traversal. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01173">ps_lattice.c:1173</a></div></div>
<div class="ttc" id="ps__lattice__internal_8h_html"><div class="ttname"><a href="ps__lattice__internal_8h.html">ps_lattice_internal.h</a></div><div class="ttdoc">Word graph search implementation. </div></div>
<div class="ttc" id="ps__lattice_8c_html_a4dd3235b91f1c7202127893203c6d2a0"><div class="ttname"><a href="ps__lattice_8c.html#a4dd3235b91f1c7202127893203c6d2a0">ps_lattice_link</a></div><div class="ttdeci">void ps_lattice_link(ps_lattice_t *dag, ps_latnode_t *from, ps_latnode_t *to, int32 score, int32 ef)</div><div class="ttdoc">Create a directed link between &quot;from&quot; and &quot;to&quot; nodes, but if a link already exists, choose one with the best link_scr. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00065">ps_lattice.c:65</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a5159a2ff1e03a7c9782854bc67e56530"><div class="ttname"><a href="structps__lattice__s.html#a5159a2ff1e03a7c9782854bc67e56530">ps_lattice_s::frate</a></div><div class="ttdeci">int32 frate</div><div class="ttdoc">Frame rate. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00068">ps_lattice_internal.h:68</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a838bd9223e35d012419e6225b54e393d"><div class="ttname"><a href="structps__lattice__s.html#a838bd9223e35d012419e6225b54e393d">ps_lattice_s::nodes</a></div><div class="ttdeci">ps_latnode_t * nodes</div><div class="ttdoc">List of all nodes. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00070">ps_lattice_internal.h:70</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a14e4e87550647d5119cd1cc48ff4f3f1"><div class="ttname"><a href="structps__lattice__s.html#a14e4e87550647d5119cd1cc48ff4f3f1">ps_lattice_s::latnode_alloc</a></div><div class="ttdeci">listelem_alloc_t * latnode_alloc</div><div class="ttdoc">Node allocator for this DAG. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00080">ps_lattice_internal.h:80</a></div></div>
<div class="ttc" id="structps__latlink__s_html_ad2f031d271f1d875223aae33116d3f40"><div class="ttname"><a href="structps__latlink__s.html#ad2f031d271f1d875223aae33116d3f40">ps_latlink_s::alpha</a></div><div class="ttdeci">int32 alpha</div><div class="ttdoc">Forward probability of this link P(w,o_1^{ef}) </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00103">ps_lattice_internal.h:103</a></div></div>
<div class="ttc" id="structps__astar__s_html"><div class="ttname"><a href="structps__astar__s.html">ps_astar_s</a></div><div class="ttdoc">A* search structure. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00163">ps_lattice_internal.h:163</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a6ea04952718752806ad92773c98ac33d"><div class="ttname"><a href="ps__lattice_8c.html#a6ea04952718752806ad92773c98ac33d">ps_latlink_pred</a></div><div class="ttdeci">ps_latlink_t * ps_latlink_pred(ps_latlink_t *link)</div><div class="ttdoc">Get predecessor link in best path. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00816">ps_lattice.c:816</a></div></div>
<div class="ttc" id="structps__seg__s_html_ae683244d90d0a5339930b47757778432"><div class="ttname"><a href="structps__seg__s.html#ae683244d90d0a5339930b47757778432">ps_seg_s::prob</a></div><div class="ttdeci">int32 prob</div><div class="ttdoc">Log posterior probability. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00186">pocketsphinx_internal.h:186</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_afc4403b067467f3c74c97998f1c91886"><div class="ttname"><a href="ps__lattice_8c.html#afc4403b067467f3c74c97998f1c91886">ps_latlink_times</a></div><div class="ttdeci">int ps_latlink_times(ps_latlink_t *link, int16 *out_sf)</div><div class="ttdoc">Get start and end times from a lattice link. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00779">ps_lattice.c:779</a></div></div>
<div class="ttc" id="dict_8h_html_a0edf70be186e8940af9d21243083cb8b"><div class="ttname"><a href="dict_8h.html#a0edf70be186e8940af9d21243083cb8b">dict_retain</a></div><div class="ttdeci">dict_t * dict_retain(dict_t *d)</div><div class="ttdoc">Retain a pointer to an dict_t. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00461">dict.c:461</a></div></div>
<div class="ttc" id="structps__latnode__s_html_a051a7eed31e29dd75151d1b34cc4eefa"><div class="ttname"><a href="structps__latnode__s.html#a051a7eed31e29dd75151d1b34cc4eefa">ps_latnode_s::entries</a></div><div class="ttdeci">latlink_list_t * entries</div><div class="ttdoc">Links into this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00130">ps_lattice_internal.h:130</a></div></div>
<div class="ttc" id="structps__latnode__s_html_aa4c0a395c74acbacccde561f92fa89e4"><div class="ttname"><a href="structps__latnode__s.html#aa4c0a395c74acbacccde561f92fa89e4">ps_latnode_s::alt</a></div><div class="ttdeci">struct ps_latnode_s * alt</div><div class="ttdoc">Node with alternate pronunciation for this word. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00132">ps_lattice_internal.h:132</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a5827c1004a64e7e6c5208928c28d403d"><div class="ttname"><a href="ps__lattice_8c.html#a5827c1004a64e7e6c5208928c28d403d">ps_latnode_word</a></div><div class="ttdeci">char const * ps_latnode_word(ps_lattice_t *dag, ps_latnode_t *node)</div><div class="ttdoc">Get word string for this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00720">ps_lattice.c:720</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a42212e56eb6e881a0ceb1b8ad029427a"><div class="ttname"><a href="ps__lattice_8c.html#a42212e56eb6e881a0ceb1b8ad029427a">ps_latnode_baseword</a></div><div class="ttdeci">char const * ps_latnode_baseword(ps_lattice_t *dag, ps_latnode_t *node)</div><div class="ttdoc">Get base word string for this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00726">ps_lattice.c:726</a></div></div>
<div class="ttc" id="structps__seg__s_html_a97a0dc7db931c7e3f98d23d21ce27f04"><div class="ttname"><a href="structps__seg__s.html#a97a0dc7db931c7e3f98d23d21ce27f04">ps_seg_s::word</a></div><div class="ttdeci">char const * word</div><div class="ttdoc">Word string (pointer into dictionary hash) </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00181">pocketsphinx_internal.h:181</a></div></div>
<div class="ttc" id="structps__seg__s_html_a14168ddcb60e094dad36c7c920a79bb3"><div class="ttname"><a href="structps__seg__s.html#a14168ddcb60e094dad36c7c920a79bb3">ps_seg_s::search</a></div><div class="ttdeci">ps_search_t * search</div><div class="ttdoc">Search object from whence this came. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00180">pocketsphinx_internal.h:180</a></div></div>
<div class="ttc" id="structps__lattice__s_html_aba113d4134c72d7405423c77bcc1247e"><div class="ttname"><a href="structps__lattice__s.html#aba113d4134c72d7405423c77bcc1247e">ps_lattice_s::final_node_ascr</a></div><div class="ttdeci">int32 final_node_ascr</div><div class="ttdoc">Acoustic score of implicit link exiting final node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00076">ps_lattice_internal.h:76</a></div></div>
<div class="ttc" id="structps__decoder__s_html_ad337270efc93613cf8dd7594f6515799"><div class="ttname"><a href="structps__decoder__s.html#ad337270efc93613cf8dd7594f6515799">ps_decoder_s::search</a></div><div class="ttdeci">ps_search_t * search</div><div class="ttdoc">Currently active search module. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00216">pocketsphinx_internal.h:216</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a8ab5c5bbbcf02a087a81232476dbd2a3"><div class="ttname"><a href="ps__lattice_8c.html#a8ab5c5bbbcf02a087a81232476dbd2a3">ps_lattice_traverse_next</a></div><div class="ttdeci">ps_latlink_t * ps_lattice_traverse_next(ps_lattice_t *dag, ps_latnode_t *end)</div><div class="ttdoc">Get the next link in forward traversal. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01117">ps_lattice.c:1117</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a481c4d941368597e11b0af4709bd03b0"><div class="ttname"><a href="ps__lattice_8c.html#a481c4d941368597e11b0af4709bd03b0">ps_lattice_popq</a></div><div class="ttdeci">ps_latlink_t * ps_lattice_popq(ps_lattice_t *dag)</div><div class="ttdoc">Remove an edge from the traversal queue. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01066">ps_lattice.c:1066</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a6caee73548f9a6c17626e959256d721c"><div class="ttname"><a href="ps__lattice_8c.html#a6caee73548f9a6c17626e959256d721c">ps_latlink_iter_next</a></div><div class="ttdeci">ps_latlink_iter_t * ps_latlink_iter_next(ps_latlink_iter_t *itor)</div><div class="ttdoc">Get next link from a lattice link iterator. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00761">ps_lattice.c:761</a></div></div>
<div class="ttc" id="structps__latpath__s_html_a614ad4a857fb07f76959d385abf50a6d"><div class="ttname"><a href="structps__latpath__s.html#a614ad4a857fb07f76959d385abf50a6d">ps_latpath_s::next</a></div><div class="ttdeci">struct ps_latpath_s * next</div><div class="ttdoc">Pointer to next path in list of paths. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00156">ps_lattice_internal.h:156</a></div></div>
<div class="ttc" id="structps__decoder__s_html_abd17fe329f2fb219c5a534f3217c5b95"><div class="ttname"><a href="structps__decoder__s.html#abd17fe329f2fb219c5a534f3217c5b95">ps_decoder_s::lmath</a></div><div class="ttdeci">logmath_t * lmath</div><div class="ttdoc">Log math computation. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00210">pocketsphinx_internal.h:210</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a04896ebe0e2592bc7950d413b5d5c52e"><div class="ttname"><a href="ps__lattice_8c.html#a04896ebe0e2592bc7950d413b5d5c52e">ps_lattice_pushq</a></div><div class="ttdeci">void ps_lattice_pushq(ps_lattice_t *dag, ps_latlink_t *link)</div><div class="ttdoc">Add an edge to the traversal queue. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01054">ps_lattice.c:1054</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_ad9c31352fa8e6286b1221221208075e9"><div class="ttname"><a href="ps__lattice_8c.html#ad9c31352fa8e6286b1221221208075e9">ps_latnode_prob</a></div><div class="ttdeci">int32 ps_latnode_prob(ps_lattice_t *dag, ps_latnode_t *node, ps_latlink_t **out_link)</div><div class="ttdoc">Get best posterior probability and associated acoustic score from a lattice node. ...</div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00732">ps_lattice.c:732</a></div></div>
<div class="ttc" id="structngram__search__s_html"><div class="ttname"><a href="structngram__search__s.html">ngram_search_s</a></div><div class="ttdoc">N-Gram search module structure. </div><div class="ttdef"><b>Definition:</b> <a href="ngram__search_8h_source.html#l00197">ngram_search.h:197</a></div></div>
<div class="ttc" id="structps__latpath__s_html_a87acd26322fca11aa1432cdf9d1a2128"><div class="ttname"><a href="structps__latpath__s.html#a87acd26322fca11aa1432cdf9d1a2128">ps_latpath_s::parent</a></div><div class="ttdeci">struct ps_latpath_s * parent</div><div class="ttdoc">Previous element in this path. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00155">ps_lattice_internal.h:155</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a1ac6d846fbecfcaba6094d84e93655f7"><div class="ttname"><a href="ps__lattice_8c.html#a1ac6d846fbecfcaba6094d84e93655f7">ps_lattice_write_htk</a></div><div class="ttdeci">int32 ps_lattice_write_htk(ps_lattice_t *dag, char const *filename)</div><div class="ttdoc">Write a lattice to disk in HTK format. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00270">ps_lattice.c:270</a></div></div>
<div class="ttc" id="structps__decoder__s_html"><div class="ttname"><a href="structps__decoder__s.html">ps_decoder_s</a></div><div class="ttdoc">Decoder object. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00201">pocketsphinx_internal.h:201</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a6da4e36322aaab4d2ebe812bee9a4439"><div class="ttname"><a href="ps__lattice_8c.html#a6da4e36322aaab4d2ebe812bee9a4439">ps_lattice_delete_unreachable</a></div><div class="ttdeci">void ps_lattice_delete_unreachable(ps_lattice_t *dag)</div><div class="ttdoc">Remove nodes marked as unreachable. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00174">ps_lattice.c:174</a></div></div>
<div class="ttc" id="structdag__seg__s_html_a2a858ea6ef051074be2bd1716a4939fb"><div class="ttname"><a href="structdag__seg__s.html#a2a858ea6ef051074be2bd1716a4939fb">dag_seg_s::n_links</a></div><div class="ttdeci">int16 n_links</div><div class="ttdoc">Number of lattice links. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00143">ps_lattice_internal.h:143</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a00f30e2689853d6bcb31c8005a69dc7b"><div class="ttname"><a href="structps__lattice__s.html#a00f30e2689853d6bcb31c8005a69dc7b">ps_lattice_s::end</a></div><div class="ttdeci">ps_latnode_t * end</div><div class="ttdoc">Ending node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00072">ps_lattice_internal.h:72</a></div></div>
<div class="ttc" id="structps__latnode__s_html_a4171e956043e7856c04d84498f16cf29"><div class="ttname"><a href="structps__latnode__s.html#a4171e956043e7856c04d84498f16cf29">ps_latnode_s::sf</a></div><div class="ttdeci">frame_idx_t sf</div><div class="ttdoc">Start frame. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00120">ps_lattice_internal.h:120</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a4a952a1cb88b833989fb39476da5fe1b"><div class="ttname"><a href="ps__lattice_8c.html#a4a952a1cb88b833989fb39476da5fe1b">ps_lattice_get_logmath</a></div><div class="ttdeci">logmath_t * ps_lattice_get_logmath(ps_lattice_t *dag)</div><div class="ttdoc">Get the log-math computation object for this lattice. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00682">ps_lattice.c:682</a></div></div>
<div class="ttc" id="structps__latnode__s_html_a5232eefbc6e800b77e7a3c8ee3f4135d"><div class="ttname"><a href="structps__latnode__s.html#a5232eefbc6e800b77e7a3c8ee3f4135d">ps_latnode_s::exits</a></div><div class="ttdeci">latlink_list_t * exits</div><div class="ttdoc">Links out of this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00129">ps_lattice_internal.h:129</a></div></div>
<div class="ttc" id="structps__lattice__s_html_acd3f3ab2649f649ba33bf2a422cf12b8"><div class="ttname"><a href="structps__lattice__s.html#acd3f3ab2649f649ba33bf2a422cf12b8">ps_lattice_s::silence</a></div><div class="ttdeci">int32 silence</div><div class="ttdoc">Silence word ID. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00067">ps_lattice_internal.h:67</a></div></div>
<div class="ttc" id="hmm_8h_html_a833f100ee293ad0f1c03f2a5ef9be77a"><div class="ttname"><a href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a></div><div class="ttdeci">#define WORST_SCORE</div><div class="ttdoc">Large &quot;bad&quot; score. </div><div class="ttdef"><b>Definition:</b> <a href="hmm_8h_source.html#l00084">hmm.h:84</a></div></div>
<div class="ttc" id="ngram__search_8h_html"><div class="ttname"><a href="ngram__search_8h.html">ngram_search.h</a></div><div class="ttdoc">N-Gram based multi-pass search (&quot;FBS&quot;) </div></div>
<div class="ttc" id="structps__seg__s_html_ab25ecc6af8d2695c6097cf7e934eadd4"><div class="ttname"><a href="structps__seg__s.html#ab25ecc6af8d2695c6097cf7e934eadd4">ps_seg_s::ef</a></div><div class="ttdeci">frame_idx_t ef</div><div class="ttdoc">End frame. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00183">pocketsphinx_internal.h:183</a></div></div>
<div class="ttc" id="structps__seg__s_html_a6f7706ec4c0d0ec8ecafaf0f29f41f4b"><div class="ttname"><a href="structps__seg__s.html#a6f7706ec4c0d0ec8ecafaf0f29f41f4b">ps_seg_s::ascr</a></div><div class="ttdeci">int32 ascr</div><div class="ttdoc">Acoustic score. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00184">pocketsphinx_internal.h:184</a></div></div>
<div class="ttc" id="structps__decoder__s_html_a0565ed97b32408bd05c8104f020cef05"><div class="ttname"><a href="structps__decoder__s.html#a0565ed97b32408bd05c8104f020cef05">ps_decoder_s::config</a></div><div class="ttdeci">cmd_ln_t * config</div><div class="ttdoc">Configuration. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00203">pocketsphinx_internal.h:203</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_aab5953eafb2e632307259a7fc40c01e3"><div class="ttname"><a href="ps__lattice_8c.html#aab5953eafb2e632307259a7fc40c01e3">ps_latlink_iter_free</a></div><div class="ttdeci">void ps_latlink_iter_free(ps_latlink_iter_t *itor)</div><div class="ttdoc">Stop iterating over links. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00767">ps_lattice.c:767</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="structps__lattice__s_html_a71865c59fae65743ef3c6b5aceb17da6"><div class="ttname"><a href="structps__lattice__s.html#a71865c59fae65743ef3c6b5aceb17da6">ps_lattice_s::dict</a></div><div class="ttdeci">dict_t * dict</div><div class="ttdoc">Dictionary for this DAG. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00066">ps_lattice_internal.h:66</a></div></div>
<div class="ttc" id="structps__astar__s_html_a754bce124cd92b1b2b6aa6dbbcd73cee"><div class="ttname"><a href="structps__astar__s.html#a754bce124cd92b1b2b6aa6dbbcd73cee">ps_astar_s::latpath_alloc</a></div><div class="ttdeci">listelem_alloc_t * latpath_alloc</div><div class="ttdoc">Path allocator for N-best search. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00184">ps_lattice_internal.h:184</a></div></div>
<div class="ttc" id="structps__latlink__s_html_a4c27cd5d4f514832d3d46993e2ee87df"><div class="ttname"><a href="structps__latlink__s.html#a4c27cd5d4f514832d3d46993e2ee87df">ps_latlink_s::beta</a></div><div class="ttdeci">int32 beta</div><div class="ttdoc">Backward probability of this link P(w|o_{ef+1}^T) </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00104">ps_lattice_internal.h:104</a></div></div>
<div class="ttc" id="structps__lattice__s_html_afa8ca535dc8bf2cc656f6ad477e13b9f"><div class="ttname"><a href="structps__lattice__s.html#afa8ca535dc8bf2cc656f6ad477e13b9f">ps_lattice_s::latlink_alloc</a></div><div class="ttdeci">listelem_alloc_t * latlink_alloc</div><div class="ttdoc">Link allocator for this DAG. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00081">ps_lattice_internal.h:81</a></div></div>
<div class="ttc" id="structps__latlink__s_html_a704fcfbdb57b1461325544c782289599"><div class="ttname"><a href="structps__latlink__s.html#a704fcfbdb57b1461325544c782289599">ps_latlink_s::path_scr</a></div><div class="ttdeci">int32 path_scr</div><div class="ttdoc">Best path score from root of DAG. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00101">ps_lattice_internal.h:101</a></div></div>
<div class="ttc" id="structps__latnode__s_html"><div class="ttname"><a href="structps__latnode__s.html">ps_latnode_s</a></div><div class="ttdoc">DAG nodes. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00113">ps_lattice_internal.h:113</a></div></div>
<div class="ttc" id="structps__latnode__s_html_afd85dbd410d6e6d970c73088bc6fb97e"><div class="ttname"><a href="structps__latnode__s.html#afd85dbd410d6e6d970c73088bc6fb97e">ps_latnode_s::wid</a></div><div class="ttdeci">int32 wid</div><div class="ttdoc">Dictionary word id. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00115">ps_lattice_internal.h:115</a></div></div>
<div class="ttc" id="structps__latnode__s_html_a50d14c033652a4fb387f76881df1c3f6"><div class="ttname"><a href="structps__latnode__s.html#a50d14c033652a4fb387f76881df1c3f6">ps_latnode_s::node_id</a></div><div class="ttdeci">int32 node_id</div><div class="ttdoc">Node from fsg model, used to map lattice back to model. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00122">ps_lattice_internal.h:122</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="ps__lattice_8c_html_a36f3fa1635d251b908c553153f614e22"><div class="ttname"><a href="ps__lattice_8c.html#a36f3fa1635d251b908c553153f614e22">ps_latnode_entries</a></div><div class="ttdeci">ps_latlink_iter_t * ps_latnode_entries(ps_latnode_t *node)</div><div class="ttdoc">Iterate over entries to this node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00755">ps_lattice.c:755</a></div></div>
<div class="ttc" id="structps__latlink__s_html"><div class="ttname"><a href="structps__latlink__s.html">ps_latlink_s</a></div><div class="ttdoc">Links between DAG nodes. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00096">ps_lattice_internal.h:96</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a02b07c009d23b852bd4db54700dfac5b"><div class="ttname"><a href="ps__lattice_8c.html#a02b07c009d23b852bd4db54700dfac5b">ps_lattice_hyp</a></div><div class="ttdeci">char const * ps_lattice_hyp(ps_lattice_t *dag, ps_latlink_t *link)</div><div class="ttdoc">Get hypothesis string after bestpath search. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00830">ps_lattice.c:830</a></div></div>
<div class="ttc" id="dict_8h_html_ad2eba4ca92dd1a3721608e003d95d8c1"><div class="ttname"><a href="dict_8h.html#ad2eba4ca92dd1a3721608e003d95d8c1">dict_real_word</a></div><div class="ttdeci">POCKETSPHINX_EXPORT int dict_real_word(dict_t *d, s3wid_t w)</div><div class="ttdoc">Test if w is a &quot;real&quot; word, i.e. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00427">dict.c:427</a></div></div>
<div class="ttc" id="structps__lattice__s_html"><div class="ttname"><a href="structps__lattice__s.html">ps_lattice_s</a></div><div class="ttdoc">Word graph structure used in bestpath/nbest search. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00061">ps_lattice_internal.h:61</a></div></div>
<div class="ttc" id="hmm_8h_html_aa930fb8fb6fce7f34bcf4018b81d7066"><div class="ttname"><a href="hmm_8h.html#aa930fb8fb6fce7f34bcf4018b81d7066">WORSE_THAN</a></div><div class="ttdeci">#define WORSE_THAN</div><div class="ttdoc">Is one score worse than another? </div><div class="ttdef"><b>Definition:</b> <a href="hmm_8h_source.html#l00100">hmm.h:100</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_aaf9aedd3cd8bd1d45053e10828215a25"><div class="ttname"><a href="ps__lattice_8c.html#aaf9aedd3cd8bd1d45053e10828215a25">ps_astar_start</a></div><div class="ttdeci">ps_astar_t * ps_astar_start(ps_lattice_t *dag, ngram_model_t *lmset, float32 lwf, int sf, int ef, int w1, int w2)</div><div class="ttdoc">Begin N-Gram based A* search on a word graph. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01712">ps_lattice.c:1712</a></div></div>
<div class="ttc" id="structdag__seg__s_html_a4517656eeaa40d33109d39a251a75dea"><div class="ttname"><a href="structdag__seg__s.html#a4517656eeaa40d33109d39a251a75dea">dag_seg_s::norm</a></div><div class="ttdeci">int32 norm</div><div class="ttdoc">Normalizer for posterior probabilities. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00142">ps_lattice_internal.h:142</a></div></div>
<div class="ttc" id="structastar__seg__s_html"><div class="ttname"><a href="structastar__seg__s.html">astar_seg_s</a></div><div class="ttdoc">Segmentation &quot;iterator&quot; for A* search results. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00190">ps_lattice_internal.h:190</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a6d66b392dec016b3304da2f53be17dd1"><div class="ttname"><a href="structps__lattice__s.html#a6d66b392dec016b3304da2f53be17dd1">ps_lattice_s::refcount</a></div><div class="ttdeci">int refcount</div><div class="ttdoc">Reference count. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00062">ps_lattice_internal.h:62</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a5a9faf5e4aabd84a868d1bff97dd9814"><div class="ttname"><a href="structps__lattice__s.html#a5a9faf5e4aabd84a868d1bff97dd9814">ps_lattice_s::q_tail</a></div><div class="ttdeci">latlink_list_t * q_tail</div><div class="ttdoc">Queue of links for traversal. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00086">ps_lattice_internal.h:86</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a60b5a6a96a68e9b778dbef2156d859c8"><div class="ttname"><a href="ps__lattice_8c.html#a60b5a6a96a68e9b778dbef2156d859c8">ps_lattice_n_frames</a></div><div class="ttdeci">int ps_lattice_n_frames(ps_lattice_t *dag)</div><div class="ttdoc">Get the number of frames in the lattice. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00633">ps_lattice.c:633</a></div></div>
<div class="ttc" id="structps__latlink__s_html_ae8a94ce1afb49292b044a0d4ba42b46d"><div class="ttname"><a href="structps__latlink__s.html#ae8a94ce1afb49292b044a0d4ba42b46d">ps_latlink_s::ascr</a></div><div class="ttdeci">int32 ascr</div><div class="ttdoc">Score for from-&gt;wid (from-&gt;sf to this-&gt;ef) </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00100">ps_lattice_internal.h:100</a></div></div>
<div class="ttc" id="structdag__seg__s_html_a0fed697e06d12e5a0405fdcb0d97faf1"><div class="ttname"><a href="structdag__seg__s.html#a0fed697e06d12e5a0405fdcb0d97faf1">dag_seg_s::cur</a></div><div class="ttdeci">int16 cur</div><div class="ttdoc">Current position in bpidx. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00144">ps_lattice_internal.h:144</a></div></div>
<div class="ttc" id="structps__latpath__s_html"><div class="ttname"><a href="structps__latpath__s.html">ps_latpath_s</a></div><div class="ttdoc">Partial path structure used in N-best (A*) search. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00153">ps_lattice_internal.h:153</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a33a6c95621d4c8980a8c6b0f8af3bc67"><div class="ttname"><a href="ps__lattice_8c.html#a33a6c95621d4c8980a8c6b0f8af3bc67">ps_latlink_iter_link</a></div><div class="ttdeci">ps_latlink_t * ps_latlink_iter_link(ps_latlink_iter_t *itor)</div><div class="ttdoc">Get link from iterator. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00773">ps_lattice.c:773</a></div></div>
<div class="ttc" id="structdag__seg__s_html"><div class="ttname"><a href="structdag__seg__s.html">dag_seg_s</a></div><div class="ttdoc">Segmentation &quot;iterator&quot; for backpointer table results. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00139">ps_lattice_internal.h:139</a></div></div>
<div class="ttc" id="hmm_8h_html_a2874ab52613ff781c96f570ec0eb0d98"><div class="ttname"><a href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a></div><div class="ttdeci">#define BETTER_THAN</div><div class="ttdoc">Is one score better than another? </div><div class="ttdef"><b>Definition:</b> <a href="hmm_8h_source.html#l00095">hmm.h:95</a></div></div>
<div class="ttc" id="structps__search__s_html_a918f243fa966e72c47f697fb9e60089d"><div class="ttname"><a href="structps__search__s.html#a918f243fa966e72c47f697fb9e60089d">ps_search_s::dict</a></div><div class="ttdeci">dict_t * dict</div><div class="ttdoc">Pronunciation dictionary. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00107">pocketsphinx_internal.h:107</a></div></div>
<div class="ttc" id="structps__latnode__s_html_a584ee5a303355d851ac903718998df14"><div class="ttname"><a href="structps__latnode__s.html#a584ee5a303355d851ac903718998df14">ps_latnode_s::fef</a></div><div class="ttdeci">int32 fef</div><div class="ttdoc">First end frame. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00118">ps_lattice_internal.h:118</a></div></div>
<div class="ttc" id="structps__lattice__s_html_a68c3259613a16628e1dd2e8147705d8e"><div class="ttname"><a href="structps__lattice__s.html#a68c3259613a16628e1dd2e8147705d8e">ps_lattice_s::norm</a></div><div class="ttdeci">int32 norm</div><div class="ttdoc">Normalizer for posterior probabilities. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00077">ps_lattice_internal.h:77</a></div></div>
<div class="ttc" id="structps__seg__s_html_a4d86c21f1ed2dc3eb3b1b1b37ce9bb48"><div class="ttname"><a href="structps__seg__s.html#a4d86c21f1ed2dc3eb3b1b1b37ce9bb48">ps_seg_s::lback</a></div><div class="ttdeci">int32 lback</div><div class="ttdoc">Language model backoff. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00189">pocketsphinx_internal.h:189</a></div></div>
<div class="ttc" id="structps__latnode__s_html_ae3b3dc7d14347e6380859c74b9a02589"><div class="ttname"><a href="structps__latnode__s.html#ae3b3dc7d14347e6380859c74b9a02589">ps_latnode_s::basewid</a></div><div class="ttdeci">int32 basewid</div><div class="ttdoc">Dictionary base word id. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00116">ps_lattice_internal.h:116</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a7197508af770064ea825bb812dd6eddc"><div class="ttname"><a href="ps__lattice_8c.html#a7197508af770064ea825bb812dd6eddc">latlink_list_new</a></div><div class="ttdeci">latlink_list_t * latlink_list_new(ps_lattice_t *dag, ps_latlink_t *link, latlink_list_t *next)</div><div class="ttdoc">Create a new lattice link element. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01042">ps_lattice.c:1042</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a89b67432447f693f787ec14460cfa2a4"><div class="ttname"><a href="ps__lattice_8c.html#a89b67432447f693f787ec14460cfa2a4">ps_latnode_times</a></div><div class="ttdeci">int ps_latnode_times(ps_latnode_t *node, int16 *out_fef, int16 *out_lef)</div><div class="ttdoc">Get start and end time range for a node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00712">ps_lattice.c:712</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a33e1a31ff250c7e7d555e179e2693f5d"><div class="ttname"><a href="ps__lattice_8c.html#a33e1a31ff250c7e7d555e179e2693f5d">ps_lattice_reverse_edges</a></div><div class="ttdeci">ps_latlink_t * ps_lattice_reverse_edges(ps_lattice_t *dag, ps_latnode_t *start, ps_latnode_t *end)</div><div class="ttdoc">Start a reverse traversal of edges in a word graph. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01148">ps_lattice.c:1148</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a77c4bbb13e260c72ed04ad93b02fdf0e"><div class="ttname"><a href="ps__lattice_8c.html#a77c4bbb13e260c72ed04ad93b02fdf0e">ps_latnode_iter_next</a></div><div class="ttdeci">ps_latnode_iter_t * ps_latnode_iter_next(ps_latnode_iter_t *itor)</div><div class="ttdoc">Move to next node in iteration. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00694">ps_lattice.c:694</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a606f6ee0fd569dd5829d7f84ae7e61bd"><div class="ttname"><a href="ps__lattice_8c.html#a606f6ee0fd569dd5829d7f84ae7e61bd">ps_lattice_init_search</a></div><div class="ttdeci">ps_lattice_t * ps_lattice_init_search(ps_search_t *search, int n_frame)</div><div class="ttdoc">Construct an empty word graph with reference to a search structure. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00639">ps_lattice.c:639</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_aaf4a101f324943c7635746ec6ba7ab06"><div class="ttname"><a href="ps__lattice_8c.html#aaf4a101f324943c7635746ec6ba7ab06">ps_lattice_read</a></div><div class="ttdeci">ps_lattice_t * ps_lattice_read(ps_decoder_t *ps, char const *file)</div><div class="ttdoc">Read a lattice from a file on disk. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00387">ps_lattice.c:387</a></div></div>
<div class="ttc" id="structlatlink__list__s_html"><div class="ttname"><a href="structlatlink__list__s.html">latlink_list_s</a></div><div class="ttdoc">Linked list of DAG link pointers. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00053">ps_lattice_internal.h:53</a></div></div>
<div class="ttc" id="dict_8h_html_a24888ac8e24259e553c43c4655b38432"><div class="ttname"><a href="dict_8h.html#a24888ac8e24259e553c43c4655b38432">dict_add_word</a></div><div class="ttdeci">s3wid_t dict_add_word(dict_t *d, char const *word, s3cipid_t const *p, int32 np)</div><div class="ttdoc">Add a word with the given ciphone pronunciation list to the dictionary. </div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00080">dict.c:80</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a3c765dfc290549e8f27e619269d20e5a"><div class="ttname"><a href="ps__lattice_8c.html#a3c765dfc290549e8f27e619269d20e5a">ps_latlink_word</a></div><div class="ttdeci">char const * ps_latlink_word(ps_lattice_t *dag, ps_latlink_t *link)</div><div class="ttdoc">Get word string from a lattice link. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00800">ps_lattice.c:800</a></div></div>
<div class="ttc" id="structps__latnode__s_html_aca6f3d543a1712a1ca3bb8ec60f71c84"><div class="ttname"><a href="structps__latnode__s.html#aca6f3d543a1712a1ca3bb8ec60f71c84">ps_latnode_s::next</a></div><div class="ttdeci">struct ps_latnode_s * next</div><div class="ttdoc">Next node in DAG (no ordering implied) </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00133">ps_lattice_internal.h:133</a></div></div>
<div class="ttc" id="structps__latnode__s_html_ac0e665aedad3044c79b35c4038627a77"><div class="ttname"><a href="structps__latnode__s.html#ac0e665aedad3044c79b35c4038627a77">ps_latnode_s::rem_score</a></div><div class="ttdeci">int32 rem_score</div><div class="ttdoc">Estimated best score from node.sf to end. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00126">ps_lattice_internal.h:126</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_ae1d64649785989033826329b9fcce309"><div class="ttname"><a href="ps__lattice_8c.html#ae1d64649785989033826329b9fcce309">ps_latnode_iter_free</a></div><div class="ttdeci">void ps_latnode_iter_free(ps_latnode_iter_t *itor)</div><div class="ttdoc">Stop iterating over nodes. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00700">ps_lattice.c:700</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_ac8e3dff7276c03c93377d0cb79fbdbd7"><div class="ttname"><a href="ps__lattice_8c.html#ac8e3dff7276c03c93377d0cb79fbdbd7">ps_astar_seg_iter</a></div><div class="ttdeci">ps_seg_t * ps_astar_seg_iter(ps_astar_t *astar, ps_latpath_t *path, float32 lwf)</div><div class="ttdoc">Get hypothesis segmentation from A* search. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01898">ps_lattice.c:1898</a></div></div>
<div class="ttc" id="structps__lattice__s_html_ac3844c69f8393b607047bd9b302b979a"><div class="ttname"><a href="structps__lattice__s.html#ac3844c69f8393b607047bd9b302b979a">ps_lattice_s::hyp_str</a></div><div class="ttdeci">char * hyp_str</div><div class="ttdoc">Current hypothesis string. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00078">ps_lattice_internal.h:78</a></div></div>
<div class="ttc" id="structps__seg__s_html"><div class="ttname"><a href="structps__seg__s.html">ps_seg_s</a></div><div class="ttdoc">Base structure for hypothesis segmentation iterator. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00178">pocketsphinx_internal.h:178</a></div></div>
<div class="ttc" id="structps__search__s_html_aa6e3e18165bbc70084a06575d5703042"><div class="ttname"><a href="structps__search__s.html#aa6e3e18165bbc70084a06575d5703042">ps_search_s::config</a></div><div class="ttdeci">cmd_ln_t * config</div><div class="ttdoc">Configuration. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00105">pocketsphinx_internal.h:105</a></div></div>
<div class="ttc" id="structps__latpath__s_html_a9672f7a5002d994985039aece2a69250"><div class="ttname"><a href="structps__latpath__s.html#a9672f7a5002d994985039aece2a69250">ps_latpath_s::node</a></div><div class="ttdeci">ps_latnode_t * node</div><div class="ttdoc">Node ending this path. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00154">ps_lattice_internal.h:154</a></div></div>
<div class="ttc" id="structps__latpath__s_html_a9249fb528f754db992df1d494a69b580"><div class="ttname"><a href="structps__latpath__s.html#a9249fb528f754db992df1d494a69b580">ps_latpath_s::score</a></div><div class="ttdeci">int32 score</div><div class="ttdoc">Exact score from start node up to node-&gt;sf. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00157">ps_lattice_internal.h:157</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a54c24dc8436c39d0ccc044f7b0ef8f3a"><div class="ttname"><a href="ps__lattice_8c.html#a54c24dc8436c39d0ccc044f7b0ef8f3a">ps_lattice_posterior_prune</a></div><div class="ttdeci">int32 ps_lattice_posterior_prune(ps_lattice_t *dag, int32 beam)</div><div class="ttdoc">Prune all links (and associated nodes) below a certain posterior probability. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l01524">ps_lattice.c:1524</a></div></div>
<div class="ttc" id="structps__segfuncs__s_html"><div class="ttname"><a href="structps__segfuncs__s.html">ps_segfuncs_s</a></div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00170">pocketsphinx_internal.h:170</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a7025b47d1224f01fef725ffdae71becc"><div class="ttname"><a href="ps__lattice_8c.html#a7025b47d1224f01fef725ffdae71becc">ps_latlink_prob</a></div><div class="ttdeci">int32 ps_latlink_prob(ps_lattice_t *dag, ps_latlink_t *link, int32 *out_ascr)</div><div class="ttdoc">Get acoustic score and posterior probability from a lattice link. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00822">ps_lattice.c:822</a></div></div>
<div class="ttc" id="structps__seg__s_html_a2249c012b83c902f4f8ed8d98ded7d20"><div class="ttname"><a href="structps__seg__s.html#a2249c012b83c902f4f8ed8d98ded7d20">ps_seg_s::lwf</a></div><div class="ttdeci">float32 lwf</div><div class="ttdoc">Language weight factor (for second-pass searches) </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00191">pocketsphinx_internal.h:191</a></div></div>
<div class="ttc" id="structps__seg__s_html_a885a599726cd0efba573d106d016e6e2"><div class="ttname"><a href="structps__seg__s.html#a885a599726cd0efba573d106d016e6e2">ps_seg_s::sf</a></div><div class="ttdeci">frame_idx_t sf</div><div class="ttdoc">Start frame. </div><div class="ttdef"><b>Definition:</b> <a href="pocketsphinx__internal_8h_source.html#l00182">pocketsphinx_internal.h:182</a></div></div>
<div class="ttc" id="structps__latlink__s_html_a782a15b1aeabf68983ca521e51f2c1e1"><div class="ttname"><a href="structps__latlink__s.html#a782a15b1aeabf68983ca521e51f2c1e1">ps_latlink_s::to</a></div><div class="ttdeci">struct ps_latnode_s * to</div><div class="ttdoc">To node. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice__internal_8h_source.html#l00098">ps_lattice_internal.h:98</a></div></div>
<div class="ttc" id="ps__lattice_8c_html_a520b99eff2c1dba89927f0f3d258b8aa"><div class="ttname"><a href="ps__lattice_8c.html#a520b99eff2c1dba89927f0f3d258b8aa">ps_lattice_write</a></div><div class="ttdeci">int32 ps_lattice_write(ps_lattice_t *dag, char const *filename)</div><div class="ttdoc">Write a lattice to disk. </div><div class="ttdef"><b>Definition:</b> <a href="ps__lattice_8c_source.html#l00210">ps_lattice.c:210</a></div></div>
<div class="ttc" id="dict_8h_html_a3a128531ae9c077be9882119ed05fe3a"><div class="ttname"><a href="dict_8h.html#a3a128531ae9c077be9882119ed05fe3a">dict_word2basestr</a></div><div class="ttdeci">int32 dict_word2basestr(char *word)</div><div class="ttdoc">If the given word contains a trailing &quot;(....)&quot; (i.e., a Sphinx-II style alternative pronunciation spe...</div><div class="ttdef"><b>Definition:</b> <a href="dict_8c_source.html#l00442">dict.c:442</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="ps__lattice_8c.html">ps_lattice.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>