blob: f9186e91fb72f32cf40c9cb98d61f74d8bccf860 [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: core/Index/MultiReader.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_1efe588324fc547683bba4a3f1bac847.html">core</a></li><li class="navelem"><a class="el" href="dir_508bd2a9867f606940156debe4946ca8.html">Index</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">MultiReader.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_multi_reader_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.Linq;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> Lucene.Net.Support;</div>
<div class="line"><a name="l00021"></a><span class="lineno"><a class="code" href="_multi_reader_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd"> 21</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_more_like_this_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd">Document</a> = Lucene.Net.Documents.Document;</div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="code" href="_multi_reader_8cs.html#a64b447ee53d30ce66ebd27b2715e7bca"> 22</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_directory_reader_8cs.html#a64b447ee53d30ce66ebd27b2715e7bca">FieldSelector</a> = Lucene.Net.Documents.FieldSelector;</div>
<div class="line"><a name="l00023"></a><span class="lineno"><a class="code" href="_multi_reader_8cs.html#a1d9007c47f37b7be513110f307c0d100"> 23</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_multi_reader_8cs.html#a1d9007c47f37b7be513110f307c0d100">MultiTermDocs</a> = Lucene.Net.Index.DirectoryReader.MultiTermDocs;</div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990"> 24</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990">MultiTermEnum</a> = Lucene.Net.Index.DirectoryReader.MultiTermEnum;</div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="code" href="_multi_reader_8cs.html#a3e6849e6ee630366bc621f2e37b89c13"> 25</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_multi_reader_8cs.html#a3e6849e6ee630366bc621f2e37b89c13">MultiTermPositions</a> = Lucene.Net.Index.DirectoryReader.MultiTermPositions;</div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="code" href="_multi_reader_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f"> 26</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_more_like_this_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f">DefaultSimilarity</a> = Lucene.Net.Search.DefaultSimilarity;</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.Index</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html"> 34</a></span>&#160; <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html" title="An IndexReader which reads multiple indexes, appending their content. ">MultiReader</a>:<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>, System.ICloneable</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] subReaders;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span>[] starts; <span class="comment">// 1st docno for each segment</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span>[] decrefOnClose; <span class="comment">// remember which subreaders to decRef on close</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">private</span> System.Collections.Generic.IDictionary&lt;string, byte[]&gt; normsCache = <span class="keyword">new</span> HashMap&lt;string,byte[]&gt;();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> maxDoc = 0;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> numDocs = - 1;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> hasDeletions = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#acc17a4028f28b656218ac309e407aeb1"> 52</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html" title="An IndexReader which reads multiple indexes, appending their content. ">MultiReader</a>(params <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] subReaders)</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; Initialize(subReaders, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#ab345feb6e6b9382046a79a6e0781818b"> 67</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html" title="An IndexReader which reads multiple indexes, appending their content. ">MultiReader</a>(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] subReaders, <span class="keywordtype">bool</span> closeSubReaders)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; Initialize(subReaders, closeSubReaders);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> Initialize(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] subReaders, <span class="keywordtype">bool</span> closeSubReaders)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Deep copy</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; this.subReaders = subReaders.ToArray();</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; starts = <span class="keyword">new</span> <span class="keywordtype">int</span>[subReaders.Length + 1]; <span class="comment">// build starts array</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; decrefOnClose = <span class="keyword">new</span> <span class="keywordtype">bool</span>[subReaders.Length];</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; starts[i] = maxDoc;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; maxDoc += subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>; <span class="comment">// compute maxDocs</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">if</span> (!closeSubReaders)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a708656e6bce03eae40f2d08151ef4017" title="Expert: increments the refCount of this IndexReader instance. RefCounts are used to determine when a ...">IncRef</a>();</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; decrefOnClose[i] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">else</span></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; decrefOnClose[i] = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (subReaders[i].HasDeletions)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; hasDeletions = <span class="keyword">true</span>;</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; starts[subReaders.Length] = maxDoc;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#ab518765dd5660f9e5adfc2f4491aaba2"> 117</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> Reopen()</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> DoReopen(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a842d5d754229dd3338fee127d53a4010"> 133</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> System.Object Clone()</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">try</span></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; <span class="keywordflow">return</span> DoReopen(<span class="keyword">true</span>);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">catch</span> (System.Exception ex)</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; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.SystemException(ex.Message, ex);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">virtual</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> DoReopen(<span class="keywordtype">bool</span> doClone)</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; EnsureOpen();</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; <span class="keywordtype">bool</span> reopened = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] newSubReaders = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[subReaders.Length];</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">if</span> (doClone)</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; newSubReaders[i] = (<a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a>) subReaders[i].Clone();</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; newSubReaders[i] = subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#afdbae91b13509eca9832c2b4aa33591d" title="Refreshes an IndexReader if the index has changed since this instance was (re)opened. Opening an IndexReader is an expensive operation. This method can be used to refresh an existing IndexReader to reduce these costs. This method tries to only load segments that have changed or were created after the IndexReader was (re)opened. If the index has not changed since this instance was (re)opened, then this call is a NOOP and returns this instance. Otherwise, a new instance is returned. The old instance is not closed and remains usable. If the reader is reopened, even though they share resources internally, it&#39;s safe to make changes (deletions, norms) with the new reader. All shared mutable state obeys &quot;copy on write&quot; semantics to ensure the changes are not seen by other readers. You can determine whether a reader was actually reopened by comparing the old instance with the instance returned by this method:">Reopen</a>();</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// if at least one of the subreaders was updated we remember that</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// and return a new MultiReader</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (newSubReaders[i] != subReaders[i])</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; reopened = <span class="keyword">true</span>;</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; }</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">finally</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (!success &amp;&amp; reopened)</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; newSubReaders.Length; i++)</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="keywordflow">if</span> (newSubReaders[i] != subReaders[i])</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; newSubReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a1e6264ef01957145748af40d689eaf4d">Close</a>();</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">catch</span> (System.IO.IOException)</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// keep going - we want to clean up as much as possible</span></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; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (reopened)</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="keywordtype">bool</span>[] newDecrefOnClose = <span class="keyword">new</span> <span class="keywordtype">bool</span>[subReaders.Length];</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</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="keywordflow">if</span> (newSubReaders[i] == subReaders[i])</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; newSubReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a708656e6bce03eae40f2d08151ef4017" title="Expert: increments the refCount of this IndexReader instance. RefCounts are used to determine when a ...">IncRef</a>();</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; newDecrefOnClose[i] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; MultiReader mr = <span class="keyword">new</span> MultiReader(newSubReaders);</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; mr.decrefOnClose = newDecrefOnClose;</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> mr;</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">else</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; <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</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; </div>
<div class="line"><a name="l00220"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a8195a3f68a52ab41d2470b42383e136c"> 220</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_i_term_freq_vector.html" title="Provides access to stored term vector of a document field. The vector consists of the name of the fie...">ITermFreqVector</a>[] GetTermFreqVectors(<span class="keywordtype">int</span> n)</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a67c222dd92a57ebf5f1dbd86b86cfce5" title="Return an array of term frequency vectors for the specified document. The array contains a vector for...">GetTermFreqVectors</a>(n - starts[i]); <span class="comment">// dispatch to segment</span></div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00227"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a0fe66e42ce1bb0abb3b7705aa17709a3"> 227</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_i_term_freq_vector.html" title="Provides access to stored term vector of a document field. The vector consists of the name of the fie...">ITermFreqVector</a> GetTermFreqVector(<span class="keywordtype">int</span> n, System.String field)</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a93ef270cec13352696660ca154d4a1be" title="Return a term frequency vector for the specified document and field. The returned vector contains ter...">GetTermFreqVector</a>(n - starts[i], field);</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; </div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00235"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#afae0131cd422029926befcba41fde082"> 235</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> GetTermFreqVector(<span class="keywordtype">int</span> docNumber, System.String field, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vector_mapper.html" title="The TermVectorMapper can be used to map Term Vectors into your own structure instead of the parallel ...">TermVectorMapper</a> mapper)</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(docNumber); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a93ef270cec13352696660ca154d4a1be" title="Return a term frequency vector for the specified document and field. The returned vector contains ter...">GetTermFreqVector</a>(docNumber - starts[i], field, mapper);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
<div class="line"><a name="l00242"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a4e06b79d956bbb23ac1bfdb08dfcd131"> 242</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> GetTermFreqVector(<span class="keywordtype">int</span> docNumber, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vector_mapper.html" title="The TermVectorMapper can be used to map Term Vectors into your own structure instead of the parallel ...">TermVectorMapper</a> mapper)</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; EnsureOpen();</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(docNumber); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a93ef270cec13352696660ca154d4a1be" title="Return a term frequency vector for the specified document and field. The returned vector contains ter...">GetTermFreqVector</a>(docNumber - starts[i], mapper);</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;</div>
<div class="line"><a name="l00249"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#aca9f796998b608af8032e7ace77696e0"> 249</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> IsOptimized()</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="keywordflow">return</span> <span class="keyword">false</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;</div>
<div class="line"><a name="l00254"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a698ebd7ada81601981a1e2a66731d2b0"> 254</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> NumDocs()</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// NOTE: multiple threads may wind up init&#39;ing</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// numDocs... but that&#39;s harmless</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span> (numDocs == - 1)</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// check cache</span></div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordtype">int</span> n = 0; <span class="comment">// cache miss--recompute</span></div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; n += subReaders[i].NumDocs(); <span class="comment">// sum from readers</span></div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; numDocs = n;</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; <span class="keywordflow">return</span> numDocs;</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;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> MaxDoc</div>
<div class="line"><a name="l00271"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#aa4c6bfec9be7f90c6548d00eba5bac28"> 271</a></span>&#160; {</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">get</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"> 274</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> maxDoc;</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</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; <span class="comment">// inherit javadoc</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#aa10cba6e4e53971f41953e348c51b94a"> 280</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_more_like_this_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd">Document</a> <a class="code" href="_more_like_this_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd">Document</a>(<span class="keywordtype">int</span> n, <a class="code" href="_directory_reader_8cs.html#a64b447ee53d30ce66ebd27b2715e7bca">FieldSelector</a> fieldSelector)</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ae5a8698ada40868908ea27f502337ee2" title="Returns the stored fields of the nth Document in this index. NOTE: for performance reasons...">Document</a>(n - starts[i], fieldSelector); <span class="comment">// dispatch to segment reader</span></div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a5e6c87e8abd40492b92e4e9163fe43d5"> 287</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> IsDeleted(<span class="keywordtype">int</span> n)</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; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a13d56c7f3ac58f9e4990d9df156bada9" title="Returns true if document n has been deleted ">IsDeleted</a>(n - starts[i]); <span class="comment">// dispatch to segment reader</span></div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> HasDeletions</div>
<div class="line"><a name="l00295"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a1d7b9a7e74ab33572dad94758dc15120"> 295</a></span>&#160; {</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> hasDeletions;</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="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> DoDelete(<span class="keywordtype">int</span> n)</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; numDocs = - 1; <span class="comment">// invalidate cache</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a3b7fd13e4df23385d13d129a361e632e" title="Deletes the document numbered docNum. Once a document is deleted it will not appear in TermDocs or Te...">DeleteDocument</a>(n - starts[i]); <span class="comment">// dispatch to segment reader</span></div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; hasDeletions = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> DoUndeleteAll()</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; subReaders[i].UndeleteAll();</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; </div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; hasDeletions = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; numDocs = - 1; <span class="comment">// invalidate cache</span></div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; </div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> ReaderIndex(<span class="keywordtype">int</span> n)</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// find reader for doc n:</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> DirectoryReader.ReaderIndex(n, this.starts, this.subReaders.Length);</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a1ec76b755c5504a5977e159e6e408d54"> 326</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> HasNorms(System.String field)</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; EnsureOpen();</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</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; <span class="keywordflow">if</span> (subReaders[i].HasNorms(field))</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div>
<div class="line"><a name="l00337"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a59f746b971b75ee465c3a15137c9ed69"> 337</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> byte[] Norms(System.String field)</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; byte[] bytes = normsCache[field];</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">if</span> (bytes != null)</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> bytes; <span class="comment">// cache hit</span></div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (!HasNorms(field))</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> null;</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; bytes = <span class="keyword">new</span> byte[MaxDoc];</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; subReaders[i].Norms(field, bytes, starts[i]);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; normsCache[field] = bytes; <span class="comment">// update cache</span></div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">return</span> bytes;</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; </div>
<div class="line"><a name="l00356"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a366466532d0ae5d82300185e5d1c87be"> 356</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Norms(System.String field, byte[] result, <span class="keywordtype">int</span> offset)</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; byte[] bytes = normsCache[field];</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="comment">// read from segments</span></div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; subReaders[i].Norms(field, result, offset + starts[i]);</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> (bytes == null &amp;&amp; !HasNorms(field))</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset; i &lt; result.Length; i++)</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; result[i] = (byte) <a class="code" href="_more_like_this_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f">DefaultSimilarity</a>.EncodeNorm(1.0f);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bytes != null)</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="comment">// cache hit</span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; Array.Copy(bytes, 0, result, offset, MaxDoc);</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; <span class="keywordflow">else</span></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; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</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="comment">// read from segments</span></div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#af4de7403582385c9c14de9a58fca523c" title="Returns the byte-encoded normalization factor for the named field of every document. This is used by the search code to score documents. ">Norms</a>(field, result, offset + starts[i]);</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; }</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; </div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> DoSetNorm(<span class="keywordtype">int</span> n, System.String field, byte value_Renamed)</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; lock (normsCache)</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; normsCache.Remove(field); <span class="comment">// clear cache</span></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="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a8258426814ce3796c5000a09c00f8ea0" title="Expert: Resets the normalization factor for the named field of the named document. The norm represents the product of the field&#39;s boost and its length normalization. Thus, to preserve the length normalization values when resetting this, one should base the new value upon the old.">SetNorm</a>(n - starts[i], field, value_Renamed); <span class="comment">// dispatch</span></div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
<div class="line"><a name="l00399"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#aaf27ba411920052d1c06b219231cd16d"> 399</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_enum.html" title="Abstract class for enumerating terms. Term enumerations are always ordered by Term.compareTo(). Each term in the enumeration is greater than all that precede it. ">TermEnum</a> Terms()</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; EnsureOpen();</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990">MultiTermEnum</a>(<span class="keyword">this</span>, subReaders, starts, null);</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a0b506440344a8df07e4e238e766a228a"> 405</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_enum.html" title="Abstract class for enumerating terms. Term enumerations are always ordered by Term.compareTo(). Each term in the enumeration is greater than all that precede it. ">TermEnum</a> Terms(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> term)</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990">MultiTermEnum</a>(<span class="keyword">this</span>, subReaders, starts, term);</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a5ed43ee3c594adec6fd1164f76247269"> 411</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> DocFreq(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> t)</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordtype">int</span> total = 0; <span class="comment">// sum freqs in segments</span></div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; total += subReaders[i].DocFreq(t);</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">return</span> total;</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; </div>
<div class="line"><a name="l00420"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a7581944c6b3b3d2cc0a9af0b88ea4339"> 420</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_term_docs.html" title="TermDocs provides an interface for enumerating &lt;document, frequency&gt; pairs for a term. The document portion names each document containing the term. Documents are indicated by number. The frequency portion gives the number of times the term occurred in each document. The pairs are ordered by document number. ">TermDocs</a> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>()</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; EnsureOpen();</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="_multi_reader_8cs.html#a1d9007c47f37b7be513110f307c0d100">MultiTermDocs</a>(<span class="keyword">this</span>, subReaders, starts);</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; </div>
<div class="line"><a name="l00426"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a5568cc1aba0604494b1049b03df941c5"> 426</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_term_positions.html" title="TermPositions provides an interface for enumerating the &lt;document, frequency, &lt;position&gt;* &gt; tuples fo...">TermPositions</a> <a class="code" href="core_2_analysis_2_token_8cs.html#a17a77b770c87cb0e7153982c4171bfcc">TermPositions</a>()</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; EnsureOpen();</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="_multi_reader_8cs.html#a3e6849e6ee630366bc621f2e37b89c13">MultiTermPositions</a>(<span class="keyword">this</span>, subReaders, starts);</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> DoCommit(System.Collections.Generic.IDictionary&lt;<span class="keywordtype">string</span>, <span class="keywordtype">string</span>&gt; commitUserData)</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="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; subReaders[i].Commit(commitUserData);</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; </div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> DoClose()</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">if</span> (decrefOnClose[i])</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a8bfc113eced23a4b5a1fabb756d1977a" title="Expert: decreases the refCount of this IndexReader instance. If the refCount drops to 0...">DecRef</a>();</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; <span class="keywordflow">else</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; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a1e6264ef01957145748af40d689eaf4d">Close</a>();</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="comment">// NOTE: only needed in case someone had asked for</span></div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="comment">// FieldCache for top-level reader (which is generally</span></div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">// not a good idea):</span></div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; Lucene.Net.Search.FieldCache_Fields.DEFAULT.Purge(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;</div>
<div class="line"><a name="l00461"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a1f75dc5cbb97790dc3aa88cb17ae2b01"> 461</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> System.Collections.Generic.ICollection&lt;<span class="keywordtype">string</span>&gt; GetFieldNames(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>.FieldOption fieldNames)</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html" title="An IndexReader which reads indexes with multiple segments.">DirectoryReader</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a04f870765fbb41c2961e9ed2aa9bf93a">GetFieldNames</a>(fieldNames, this.subReaders);</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div>
<div class="line"><a name="l00468"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#ab417ec513e9c7f1b6b6b8328c25d1203"> 468</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> IsCurrent()</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; {</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</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="keywordflow">if</span> (!subReaders[i].IsCurrent())</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; {</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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; }</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// all subreaders are up to date</span></div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; }</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">long</span> <a class="code" href="_arabic_analyzer_8cs.html#a63c914dcb7d19365ff0f7c6ea7ef77c4">Version</a></div>
<div class="line"><a name="l00485"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#abcfd4c0547a704b55a87ce4535f68536"> 485</a></span>&#160; {</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">throw</span> <span class="keyword">new</span> System.NotSupportedException(<span class="stringliteral">&quot;MultiReader does not support this method.&quot;</span>); }</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;</div>
<div class="line"><a name="l00489"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_multi_reader.html#a7694421e000a511c51bc3ea5cf3044b2"> 489</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] GetSequentialSubReaders()</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; <span class="keywordflow">return</span> subReaders;</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</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:45 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>