blob: 8feb14bd77c4f1f1dd39c2f99d699f6958bb28f8 [file] [log] [blame]
<!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.3"/>
<title>Lucene.Net: contrib/Analyzers/Shingle/ShingleMatrixFilter.cs 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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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="projectlogo"><img alt="Logo" src="lucene-net-icon-128x128.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">Lucene.Net
&#160;<span id="projectnumber">3.0.3</span>
</div>
<div id="projectbrief">Lucene.Net is a .NET port of the Java Lucene Indexing Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="Index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Packages</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</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>File&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Properties</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_3a8d697be1e2feab9f01acc78e9570fb.html">contrib</a></li><li class="navelem"><a class="el" href="dir_d6f46d6f08706e7c5949ba49fb409a42.html">Analyzers</a></li><li class="navelem"><a class="el" href="dir_bc8987e9336a798069f7a91052400b66.html">Shingle</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">ShingleMatrixFilter.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_shingle_matrix_filter_8cs.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">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one or more</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * this work for additional information regarding copyright ownership.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * (the &quot;License&quot;); you may not use this file except in compliance with</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the License. You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * limitations under the License.</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using</span> System;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using</span> System.Collections.Generic;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> System.Linq;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">using</span> System.Text;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">using</span> Lucene.Net.Analysis.Miscellaneous;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">using</span> Lucene.Net.Analysis.Shingle.Codec;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">using</span> Lucene.Net.Analysis.Shingle.Matrix;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">using</span> Lucene.Net.Analysis.Tokenattributes;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">using</span> Lucene.Net.Support;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">namespace </span>Lucene.Net.Analysis.Shingle</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html"> 105</a></span>&#160; <span class="keyword">public</span> sealed <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html">ShingleMatrixFilter</a> : <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html" title="A TokenStream enumerates the sequence of tokens, either from Fields of a Document or from query text...">TokenStream</a></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
<div class="line"><a name="l00107"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a2deaf44ecf0cc7f94480533b1d7a79b0"> 107</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> Char DefaultSpacerCharacter = <span class="charliteral">&#39;_&#39;</span>;</div>
<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#aacaf6867e8f8ce97180ae242dce66e84"> 108</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_codec_1_1_token_settings_codec.html" title="Strategy used to code and decode meta data of the tokens from the input stream regarding how to posit...">TokenSettingsCodec</a> DefaultSettingsCodec = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_codec_1_1_one_dimensional_non_weighted_token_settings_codec.html" title="Using this codec makes a ShingleMatrixFilter act like ShingleFilter. It produces the most simple sort...">OneDimensionalNonWeightedTokenSettingsCodec</a>();</div>
<div class="line"><a name="l00109"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#affcc6c28d33ed4f37664fcfebb8f785c"> 109</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#affcc6c28d33ed4f37664fcfebb8f785c">IgnoringSinglePrefixOrSuffixShingleByDefault</a>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_flags_attribute.html" title="This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter ...">IFlagsAttribute</a> _flagsAtt;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_flags_attribute.html" title="This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter ...">IFlagsAttribute</a> _inFlagsAtt;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_offset_attribute.html" title="The start and end character offset of a Token. ">IOffsetAttribute</a> _inOffsetAtt;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_payload_attribute.html" title="The payload of a Token. See also Payload.">IPayloadAttribute</a> _inPayloadAtt;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_position_increment_attribute.html" title="The positionIncrement determines the position of this token relative to the previous Token in a Token...">IPositionIncrementAttribute</a> _inPosIncrAtt;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_term_attribute.html" title="The term text of a Token.">ITermAttribute</a> _inTermAtt;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_type_attribute.html" title="A Token&#39;s lexical type. The Default value is &quot;word&quot;. ">ITypeAttribute</a> _inTypeAtt;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html" title="A TokenStream enumerates the sequence of tokens, either from Fields of a Document or from query text...">TokenStream</a> _input;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_offset_attribute.html" title="The start and end character offset of a Token. ">IOffsetAttribute</a> _offsetAtt;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_payload_attribute.html" title="The payload of a Token. See also Payload.">IPayloadAttribute</a> _payloadAtt;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_position_increment_attribute.html" title="The positionIncrement determines the position of this token relative to the previous Token in a Token...">IPositionIncrementAttribute</a> _posIncrAtt;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> _requestNextToken = <span class="keyword">new</span> <a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a>();</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> _reusableToken = <span class="keyword">new</span> <a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a>();</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_codec_1_1_token_settings_codec.html" title="Strategy used to code and decode meta data of the tokens from the input stream regarding how to posit...">TokenSettingsCodec</a> _settingsCodec;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">private</span> readonly HashSet&lt;EquatableList&lt;Token&gt;&gt; _shinglesSeen =</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">new</span> HashSet&lt;EquatableList&lt;Token&gt;&gt;(); </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_term_attribute.html" title="The term text of a Token.">ITermAttribute</a> _termAtt;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_type_attribute.html" title="A Token&#39;s lexical type. The Default value is &quot;word&quot;. ">ITypeAttribute</a> _typeAtt;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">private</span> List&lt;Token&gt; _currentPermuationTokens;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// Index to what row a token in currentShingleTokens represents</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">private</span> List&lt;Row&gt; _currentPermutationRows;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> _currentPermutationTokensStartOffset;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> _currentShingleLength;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix_permutation_iterator.html">MatrixPermutationIterator</a> _permutations;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> _readColumnBuf;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#aea72e4d6829fddd30e271965f80e7420"> 166</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html">ShingleMatrixFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#ac5ec4e2f01eb608735497c9ff2dfcfa1">Matrix</a> matrix, <span class="keywordtype">int</span> minimumShingleSize, <span class="keywordtype">int</span> maximumShingleSize, Char spacerCharacter, <span class="keywordtype">bool</span> ignoringSinglePrefixOrSuffixShingle, <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_codec_1_1_token_settings_codec.html" title="Strategy used to code and decode meta data of the tokens from the input stream regarding how to posit...">TokenSettingsCodec</a> settingsCodec)</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; <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a> = matrix;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; MinimumShingleSize = minimumShingleSize;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; MaximumShingleSize = maximumShingleSize;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; SpacerCharacter = spacerCharacter;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; IsIgnoringSinglePrefixOrSuffixShingle = ignoringSinglePrefixOrSuffixShingle;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; _settingsCodec = settingsCodec;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// ReSharper disable DoNotCallOverridableMethodsInConstructor</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; _termAtt = AddAttribute&lt;ITermAttribute&gt;();</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; _posIncrAtt = AddAttribute&lt;IPositionIncrementAttribute&gt;();</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; _payloadAtt = AddAttribute&lt;IPayloadAttribute&gt;();</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; _offsetAtt = AddAttribute&lt;IOffsetAttribute&gt;();</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; _typeAtt = AddAttribute&lt;ITypeAttribute&gt;();</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; _flagsAtt = AddAttribute&lt;IFlagsAttribute&gt;();</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">// ReSharper restore DoNotCallOverridableMethodsInConstructor</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// set the input to be an empty token stream, we already have the data.</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; _input = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_miscellaneous_1_1_empty_token_stream.html" title="An always exhausted token stream ">EmptyTokenStream</a>();</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; _inTermAtt = _input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_term_attribute.html" title="The term text of a Token.">ITermAttribute</a>&gt;();</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; _inPosIncrAtt = _input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_position_increment_attribute.html" title="The positionIncrement determines the position of this token relative to the previous Token in a Token...">IPositionIncrementAttribute</a>&gt;();</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; _inPayloadAtt = _input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_payload_attribute.html" title="The payload of a Token. See also Payload.">IPayloadAttribute</a>&gt;();</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; _inOffsetAtt = _input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_offset_attribute.html" title="The start and end character offset of a Token. ">IOffsetAttribute</a>&gt;();</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; _inTypeAtt = _input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_type_attribute.html" title="A Token&#39;s lexical type. The Default value is &quot;word&quot;. ">ITypeAttribute</a>&gt;();</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; _inFlagsAtt = _input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_flags_attribute.html" title="This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter ...">IFlagsAttribute</a>&gt;();</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="l00205"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a5f78d3def785008c03e98a32cc527cf4"> 205</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html">ShingleMatrixFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html" title="A TokenStream enumerates the sequence of tokens, either from Fields of a Document or from query text...">TokenStream</a> input, <span class="keywordtype">int</span> minimumShingleSize, <span class="keywordtype">int</span> maximumShingleSize)</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; : this(input, minimumShingleSize, maximumShingleSize, DefaultSpacerCharacter) { }</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div>
<div class="line"><a name="l00217"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a26d357e4c5d2420e5919e30f7e011e4d"> 217</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html">ShingleMatrixFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html" title="A TokenStream enumerates the sequence of tokens, either from Fields of a Document or from query text...">TokenStream</a> input, <span class="keywordtype">int</span> minimumShingleSize, <span class="keywordtype">int</span> maximumShingleSize, Char? spacerCharacter)</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; : this( input, minimumShingleSize, maximumShingleSize, spacerCharacter, IgnoringSinglePrefixOrSuffixShingleByDefault) { }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a3e4b19603d981084dc65609ccf598682"> 230</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html">ShingleMatrixFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html" title="A TokenStream enumerates the sequence of tokens, either from Fields of a Document or from query text...">TokenStream</a> input, <span class="keywordtype">int</span> minimumShingleSize, <span class="keywordtype">int</span> maximumShingleSize, Char? spacerCharacter, <span class="keywordtype">bool</span> ignoringSinglePrefixOrSuffixShingle)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; : this(input, minimumShingleSize, maximumShingleSize, spacerCharacter, ignoringSinglePrefixOrSuffixShingle, DefaultSettingsCodec) { }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div>
<div class="line"><a name="l00242"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a93a71b35af8e53630737de4ce0c61889"> 242</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html">ShingleMatrixFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html" title="A TokenStream enumerates the sequence of tokens, either from Fields of a Document or from query text...">TokenStream</a> input, <span class="keywordtype">int</span> minimumShingleSize, <span class="keywordtype">int</span> maximumShingleSize, Char? spacerCharacter, <span class="keywordtype">bool</span> ignoringSinglePrefixOrSuffixShingle, <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_codec_1_1_token_settings_codec.html" title="Strategy used to code and decode meta data of the tokens from the input stream regarding how to posit...">TokenSettingsCodec</a> settingsCodec)</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; _input = input;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; MinimumShingleSize = minimumShingleSize;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; MaximumShingleSize = maximumShingleSize;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; SpacerCharacter = spacerCharacter;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; IsIgnoringSinglePrefixOrSuffixShingle = ignoringSinglePrefixOrSuffixShingle;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; _settingsCodec = settingsCodec;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// ReSharper disable DoNotCallOverridableMethodsInConstructor</span></div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; _termAtt = AddAttribute&lt;ITermAttribute&gt;();</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; _posIncrAtt = AddAttribute&lt;IPositionIncrementAttribute&gt;();</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; _payloadAtt = AddAttribute&lt;IPayloadAttribute&gt;();</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; _offsetAtt = AddAttribute&lt;IOffsetAttribute&gt;();</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; _typeAtt = AddAttribute&lt;ITypeAttribute&gt;();</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; _flagsAtt = AddAttribute&lt;IFlagsAttribute&gt;();</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// ReSharper restore DoNotCallOverridableMethodsInConstructor</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; _inTermAtt = input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_term_attribute.html" title="The term text of a Token.">ITermAttribute</a>&gt;();</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; _inPosIncrAtt = input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_position_increment_attribute.html" title="The positionIncrement determines the position of this token relative to the previous Token in a Token...">IPositionIncrementAttribute</a>&gt;();</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; _inPayloadAtt = input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_payload_attribute.html" title="The payload of a Token. See also Payload.">IPayloadAttribute</a>&gt;();</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; _inOffsetAtt = input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_offset_attribute.html" title="The start and end character offset of a Token. ">IOffsetAttribute</a>&gt;();</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; _inTypeAtt = input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_type_attribute.html" title="A Token&#39;s lexical type. The Default value is &quot;word&quot;. ">ITypeAttribute</a>&gt;();</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; _inFlagsAtt = input.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_flags_attribute.html" title="This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter ...">IFlagsAttribute</a>&gt;();</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</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"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a424dba19bb5eeca1a76a0c0ab2795b74"> 268</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">int</span> MinimumShingleSize { <span class="keyword">get</span>; <span class="keyword">set</span>; }</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div>
<div class="line"><a name="l00270"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a85cc8643cd71bd5348971d3113ebcbcc"> 270</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">int</span> MaximumShingleSize { <span class="keyword">get</span>; <span class="keyword">set</span>; }</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"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a408182346270e41b52722538d77d1d85"> 272</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#ac5ec4e2f01eb608735497c9ff2dfcfa1">Matrix</a> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div>
<div class="line"><a name="l00274"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a759eeced2e5ffc9900e4dc0844bf1cfe"> 274</a></span>&#160; <span class="keyword">public</span> Char? SpacerCharacter { <span class="keyword">get</span>; <span class="keyword">set</span>; }</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"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#ae5927e0811018481f2cea8b64b740942"> 276</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">bool</span> IsIgnoringSinglePrefixOrSuffixShingle { <span class="keyword">get</span>; <span class="keyword">set</span>; }</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div>
<div class="line"><a name="l00278"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a38d93cb7458afcbfae55dc3554e02e71"> 278</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Reset()</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; {</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; _permutations = null;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; _shinglesSeen.Clear();</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; _input.Reset();</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"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a78c40485f765e2b702cf2c6a130311ba"> 285</a></span>&#160; <span class="keyword">protected</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Do nothing</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div>
<div class="line"><a name="l00290"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#ae7bb9d5011b8527cf2571994d3492eae"> 290</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> sealed <span class="keywordtype">bool</span> IncrementToken()</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a> == null)</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a> = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#ac5ec4e2f01eb608735497c9ff2dfcfa1">Matrix</a>();</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// fill matrix with maximumShingleSize columns</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#a70728d0ebf1effa293c025006ca7a0d4">Columns</a>.Count &lt; MaximumShingleSize &amp;&amp; ReadColumn())</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; <span class="comment">// this loop looks ugly</span></div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// This loop exists in order to avoid recursive calls to the next method</span></div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// as the complexity of a large matrix</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// then would require a multi gigabyte sized stack.</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> token;</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; token = ProduceNextToken(_reusableToken);</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; } <span class="keywordflow">while</span> (token == _requestNextToken);</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">if</span> (token == null) </div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; ClearAttributes();</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; _termAtt.SetTermBuffer(token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a452174268b8297bbfd5a3fb464cbe04c" title="Returns the internal termBuffer character array which you can then directly alter. If the array is too small for your token, use ResizeTermBuffer(int) to increase it. After altering the buffer be sure to call SetTermLength to record the number of valid characters that were placed into the termBuffer. ">TermBuffer</a>(), 0, token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a06d3ac24f755c433802c6200a60dbda4" title="Return number of valid characters (length of the term) in the termBuffer array. ">TermLength</a>());</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; _posIncrAtt.PositionIncrement = token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a18cc1de69d72cea8f63246b9437a1399" title="Set the position increment. This determines the position of this token relative to the previous Token...">PositionIncrement</a>;</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; _flagsAtt.Flags = token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a7a2c75871d2e56906e8329e8dfe92125" title="EXPERIMENTAL: While we think this is here to stay, we may want to change it to be a long...">Flags</a>;</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; _offsetAtt.SetOffset(token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a421271c40ecfd6be5852f55a4a08ccb0" title="Gets or sets this Token&#39;s starting offset, the position of the first character corresponding to this ...">StartOffset</a>, token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a8dac36e25c06d03003cf46748858026f" title="Gets or sets this Token&#39;s ending offset, one greater than the position of the last character correspo...">EndOffset</a>);</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; _typeAtt.Type = token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a61943bcca47590fc996a1ced87587ebc" title="Returns this Token&#39;s lexical type. Defaults to &quot;word&quot;. ">Type</a>;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; _payloadAtt.Payload = token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#aed3aa6f2f6759e126b1d837c2049cee7" title="Returns this Token&#39;s payload.">Payload</a>;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> GetNextInputToken(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> token)</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">if</span> (!_input.IncrementToken()) <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#af33e3e56ddfaae9179d39da6ce0402dc" title="Copies the contents of buffer, starting at offset for length characters, into the termBuffer array...">SetTermBuffer</a>(_inTermAtt.TermBuffer(), 0, _inTermAtt.TermLength());</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a18cc1de69d72cea8f63246b9437a1399" title="Set the position increment. This determines the position of this token relative to the previous Token...">PositionIncrement</a> = _inPosIncrAtt.PositionIncrement;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a7a2c75871d2e56906e8329e8dfe92125" title="EXPERIMENTAL: While we think this is here to stay, we may want to change it to be a long...">Flags</a> = _inFlagsAtt.Flags;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a08be487236606c501726d84749755f64" title="Set the starting and ending offset. See StartOffset() and EndOffset() ">SetOffset</a>(_inOffsetAtt.StartOffset, _inOffsetAtt.EndOffset);</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a61943bcca47590fc996a1ced87587ebc" title="Returns this Token&#39;s lexical type. Defaults to &quot;word&quot;. ">Type</a> = _inTypeAtt.Type;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#aed3aa6f2f6759e126b1d837c2049cee7" title="Returns this Token&#39;s payload.">Payload</a> = _inPayloadAtt.Payload;</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> token;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> GetNextToken(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> token)</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (!this.IncrementToken()) <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#af33e3e56ddfaae9179d39da6ce0402dc" title="Copies the contents of buffer, starting at offset for length characters, into the termBuffer array...">SetTermBuffer</a>(_termAtt.TermBuffer(), 0, _termAtt.TermLength());</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a18cc1de69d72cea8f63246b9437a1399" title="Set the position increment. This determines the position of this token relative to the previous Token...">PositionIncrement</a> = _posIncrAtt.PositionIncrement;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a7a2c75871d2e56906e8329e8dfe92125" title="EXPERIMENTAL: While we think this is here to stay, we may want to change it to be a long...">Flags</a> = _flagsAtt.Flags;</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a08be487236606c501726d84749755f64" title="Set the starting and ending offset. See StartOffset() and EndOffset() ">SetOffset</a>(_offsetAtt.StartOffset, _offsetAtt.EndOffset);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a61943bcca47590fc996a1ced87587ebc" title="Returns this Token&#39;s lexical type. Defaults to &quot;word&quot;. ">Type</a> = _typeAtt.Type;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#aed3aa6f2f6759e126b1d837c2049cee7" title="Returns this Token&#39;s payload.">Payload</a> = _payloadAtt.Payload;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">return</span> token;</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">private</span> <a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a> ProduceNextToken(<a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a> reusableToken)</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="keywordflow">if</span> (_currentPermuationTokens != null)</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; _currentShingleLength++;</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="keywordflow">if</span> (_currentShingleLength + _currentPermutationTokensStartOffset &lt;= _currentPermuationTokens.Count</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; &amp;&amp; _currentShingleLength &lt;= MaximumShingleSize)</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// it is possible to create at least one more shingle of the current matrix permutation</span></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">if</span> (IsIgnoringSinglePrefixOrSuffixShingle &amp;&amp; </div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; _currentShingleLength == 1 &amp;&amp; </div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; (_currentPermutationRows[_currentPermutationTokensStartOffset].<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_column.html">Column</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_column.html#af221df9a10bbba1fd362a4c7850febd4">IsFirst</a> || _currentPermutationRows[_currentPermutationTokensStartOffset].Column.IsLast))</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">return</span> GetNextToken(reusableToken);</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</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; var termLength = 0;</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; var shingle = <span class="keyword">new</span> EquatableList&lt;Token&gt;();</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; _currentShingleLength; i++)</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; {</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; var shingleToken = _currentPermuationTokens[i + _currentPermutationTokensStartOffset];</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; termLength += shingleToken.TermLength();</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; shingle.Add(shingleToken);</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; }</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span> (SpacerCharacter != null)</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; termLength += _currentShingleLength - 1;</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">// only produce shingles that not already has been created</span></div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">if</span> (!_shinglesSeen.Add(shingle))</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">return</span> _requestNextToken;</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// shingle token factory</span></div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; var sb = <span class="keyword">new</span> StringBuilder(termLength + 10); <span class="comment">// paranormal ability to foresee the future. ;)</span></div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">foreach</span> (var shingleToken <span class="keywordflow">in</span> shingle)</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span> (SpacerCharacter != null &amp;&amp; sb.Length &gt; 0)</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; sb.Append(SpacerCharacter);</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; sb.Append(shingleToken.TermBuffer(), 0, shingleToken.TermLength());</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; reusableToken.SetTermBuffer(sb.ToString());</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; UpdateToken(reusableToken, shingle, _currentPermutationTokensStartOffset, _currentPermutationRows,</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; _currentPermuationTokens);</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">return</span> reusableToken;</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="comment">// it is NOT possible to create one more shingles of the current matrix permutation</span></div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span> (_currentPermutationTokensStartOffset &lt; _currentPermuationTokens.Count - 1)</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// reset shingle size and move one step to the right in the current tokens permutation</span></div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; _currentPermutationTokensStartOffset++;</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; _currentShingleLength = MinimumShingleSize - 1;</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">return</span> _requestNextToken;</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;</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// todo does this ever occur?</span></div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span> (_permutations == null)</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (!_permutations.HasNext())</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; <span class="comment">// load more data (if available) to the matrix</span></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">// don&#39;t really care, we just read it.</span></div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (_input != null)</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; ReadColumn();</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// get rid of resources</span></div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// delete the first column in the matrix</span></div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; var deletedColumn = <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#a70728d0ebf1effa293c025006ca7a0d4">Columns</a>[0];</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#a70728d0ebf1effa293c025006ca7a0d4">Columns</a>.RemoveAt(0);</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// remove all shingles seen that include any of the tokens from the deleted column.</span></div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; var deletedColumnTokens = deletedColumn.Rows.SelectMany(row =&gt; row.Tokens).ToList();</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="comment">// I&#39;m a little concerned about this part of the code, because the unit tests currently </span></div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// don&#39;t cover this scenario. (I put a break point here, and ran the unit tests in debug mode </span></div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// and this code block was never hit... I also changed it significatly from the Java version</span></div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="comment">// to use RemoveWhere and LINQ. </span></div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// TODO: Write a unit test to cover this and make sure this is a good port! -thoward</span></div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// linq version</span></div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; _shinglesSeen.RemoveWhere(</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; shingle =&gt; (shingle.Find(deletedColumnTokens.Contains) != <span class="keywordflow">default</span>(<a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a>)));</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="comment">//var shinglesSeenIterator = _shinglesSeen.ToList();</span></div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="comment">//foreach (var shingle in shinglesSeenIterator)</span></div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">//{</span></div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="comment">// foreach (var deletedColumnToken in deletedColumnTokens)</span></div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="comment">// {</span></div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="comment">// if (shingle.Contains(deletedColumnToken))</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="comment">// {</span></div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="comment">// _shinglesSeen.Remove(shingle);</span></div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="comment">// break;</span></div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// }</span></div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// }</span></div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">//}</span></div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// exhausted</span></div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#a70728d0ebf1effa293c025006ca7a0d4">Columns</a>.Count &lt; MinimumShingleSize)</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span> null;</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">// create permutations of the matrix it now looks</span></div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; _permutations = <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#a46e00f4727297c3d09fe847d3631c776">PermutationIterator</a>();</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; NextTokensPermutation();</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> _requestNextToken;</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</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> (_permutations == null)</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; _permutations = <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html#a46e00f4727297c3d09fe847d3631c776">PermutationIterator</a>();</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">if</span> (!_permutations.HasNext())</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; NextTokensPermutation();</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">return</span> _requestNextToken;</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> NextTokensPermutation()</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; {</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; var rowsPermutation = _permutations.Next();</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; var currentPermutationRows = <span class="keyword">new</span> List&lt;Row&gt;();</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; var currentPermuationTokens = <span class="keyword">new</span> List&lt;Token&gt;();</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">foreach</span> (var row <span class="keywordflow">in</span> rowsPermutation)</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">foreach</span> (var token <span class="keywordflow">in</span> row.Tokens)</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; currentPermuationTokens.Add(token);</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; currentPermutationRows.Add(row);</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; }</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; _currentPermuationTokens = currentPermuationTokens;</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; _currentPermutationRows = currentPermutationRows;</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; _currentPermutationTokensStartOffset = 0;</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; _currentShingleLength = MinimumShingleSize - 1;</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div>
<div class="line"><a name="l00528"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a2df2953ae09d1779348232f7e7ea471e"> 528</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> UpdateToken(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> token, List&lt;Token&gt; shingle, <span class="keywordtype">int</span> currentPermutationStartOffset, List&lt;Row&gt; currentPermutationRows, List&lt;Token&gt; currentPermuationTokens)</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a61943bcca47590fc996a1ced87587ebc" title="Returns this Token&#39;s lexical type. Defaults to &quot;word&quot;. ">Type</a> = typeof(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html">ShingleMatrixFilter</a>).Name;</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a7a2c75871d2e56906e8329e8dfe92125" title="EXPERIMENTAL: While we think this is here to stay, we may want to change it to be a long...">Flags</a> = 0;</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a18cc1de69d72cea8f63246b9437a1399" title="Set the position increment. This determines the position of this token relative to the previous Token...">PositionIncrement</a> = 1;</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a421271c40ecfd6be5852f55a4a08ccb0" title="Gets or sets this Token&#39;s starting offset, the position of the first character corresponding to this ...">StartOffset</a> = (shingle[0]).StartOffset;</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; token.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html#a8dac36e25c06d03003cf46748858026f" title="Gets or sets this Token&#39;s ending offset, one greater than the position of the last character correspo...">EndOffset</a> = shingle[shingle.Count - 1].EndOffset;</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; _settingsCodec.SetWeight(</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; token, </div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; CalculateShingleWeight(token, shingle, currentPermutationStartOffset, currentPermutationRows, currentPermuationTokens)</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; );</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;</div>
<div class="line"><a name="l00557"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_shingle_matrix_filter.html#a7dc744291b09100cca6b76e32a597bb3"> 557</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">float</span> CalculateShingleWeight(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> shingleToken, List&lt;Token&gt; shingle, <span class="keywordtype">int</span> currentPermutationStartOffset, List&lt;Row&gt; currentPermutationRows, List&lt;Token&gt; currentPermuationTokens)</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; {</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; var weights = <span class="keyword">new</span> <span class="keywordtype">double</span>[shingle.Count];</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; <span class="keywordtype">double</span> total = 0f;</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordtype">double</span> top = 0d;</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; weights.Length; i++)</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; weights[i] = _settingsCodec.GetWeight(shingle[i]);</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordtype">double</span> tmp = weights[i];</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">if</span> (tmp &gt; top)</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; top = tmp;</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; total += tmp;</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordtype">double</span> factor = 1d/Math.Sqrt(total);</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordtype">double</span> weight = weights.Sum(partWeight =&gt; partWeight*factor);</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) weight;</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; }</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> ReadColumn()</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; <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token.html" title="A Token is an occurrence of a term from the text of a field. It consists of a term&#39;s text...">Token</a> token;</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (_readColumnBuf != null)</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; token = _readColumnBuf;</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; _readColumnBuf = null;</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; {</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; token = GetNextInputToken(<span class="keyword">new</span> <a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a>());</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; }</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="keywordflow">if</span> (token == null)</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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; var currentReaderColumn = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_column.html">Column</a>(<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_matrix.html" title="A column focused matrix in three dimensions:">Matrix</a>);</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; var currentReaderRow = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_row.html">Row</a>(currentReaderColumn);</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; currentReaderRow.Tokens.AddLast(token);</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; TokenPositioner tokenPositioner;</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">while</span> ((_readColumnBuf = GetNextInputToken(<span class="keyword">new</span> <a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a>())) != null &amp;&amp;</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; (tokenPositioner = _settingsCodec.GetTokenPositioner(_readColumnBuf)) != TokenPositioner.NewColumn)</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; {</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">if</span> (tokenPositioner == TokenPositioner.SameRow)</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; {</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; currentReaderRow.Tokens.AddLast(_readColumnBuf);</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">else</span></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; currentReaderRow = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_shingle_1_1_matrix_1_1_row.html">Row</a>(currentReaderColumn);</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; currentReaderRow.Tokens.AddLast(_readColumnBuf);</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; _readColumnBuf = null;</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">if</span> (_readColumnBuf == null)</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; {</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; _readColumnBuf = GetNextInputToken(<span class="keyword">new</span> <a class="code" href="_snowball_filter_8cs.html#a6f0cf8ca71e14fbb50a33080d0492fff">Token</a>());</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; <span class="keywordflow">if</span> (_readColumnBuf == null)</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; currentReaderColumn.IsLast = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</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> <span class="keyword">true</span>;</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;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 3 2013 02:12:43 for Lucene.Net by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.3
</small></address>
</body>
</html>