blob: 3e004df34912a4b0fb4a620f17da7f10aeafd4b9 [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/DirectoryReader.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">DirectoryReader.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_directory_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.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> Lucene.Net.Support;</div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="code" href="_directory_reader_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd"> 22</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="l00023"></a><span class="lineno"><a class="code" href="_directory_reader_8cs.html#a64b447ee53d30ce66ebd27b2715e7bca"> 23</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="l00024"></a><span class="lineno"><a class="code" href="_directory_reader_8cs.html#ac7fdd4fc5daf7ce3e6be563664f8bf64"> 24</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> = Lucene.Net.Store.Directory;</div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="code" href="_directory_reader_8cs.html#a1fbfd61efe054805d79812bbe65054a9"> 25</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_compound_file_reader_8cs.html#a1fbfd61efe054805d79812bbe65054a9">Lock</a> = Lucene.Net.Store.Lock;</div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="code" href="_directory_reader_8cs.html#a681d344289754da86d367afaac7bd3d7"> 26</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_directory_reader_8cs.html#a681d344289754da86d367afaac7bd3d7">LockObtainFailedException</a> = Lucene.Net.Store.LockObtainFailedException;</div>
<div class="line"><a name="l00027"></a><span class="lineno"><a class="code" href="_directory_reader_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f"> 27</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="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span>Lucene.Net.Index</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html"> 33</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_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_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">/*new*/</span> <span class="keyword">private</span> <span class="keyword">class </span>AnonymousClassFindSegmentsFile:<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>.FindSegmentsFile</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> InitBlock(<span class="keywordtype">bool</span> readOnly, <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_index_deletion_policy.html" title="Expert: policy for deletion of stale index commits.">IndexDeletionPolicy</a> deletionPolicy, <span class="keywordtype">int</span> termInfosIndexDivisor)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; this.readOnly = readOnly;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; this.deletionPolicy = deletionPolicy;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; this.termInfosIndexDivisor = termInfosIndexDivisor;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> readOnly;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">private</span> <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_index_deletion_policy.html" title="Expert: policy for deletion of stale index commits.">IndexDeletionPolicy</a> deletionPolicy;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> termInfosIndexDivisor;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">internal</span> AnonymousClassFindSegmentsFile(<span class="keywordtype">bool</span> readOnly, Lucene.Net.Index.IndexDeletionPolicy deletionPolicy, <span class="keywordtype">int</span> termInfosIndexDivisor, Lucene.Net.Store.Directory Param1):base(Param1)</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; InitBlock(readOnly, deletionPolicy, termInfosIndexDivisor);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">public</span> <span class="comment">/*protected internal*/</span> <span class="keyword">override</span> System.Object DoBody(System.String segmentFileName)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; var infos = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; infos.Read(directory, segmentFileName);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span> (readOnly)</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_read_only_directory_reader.html">ReadOnlyDirectoryReader</a>(directory, infos, deletionPolicy, termInfosIndexDivisor);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</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>(directory, infos, deletionPolicy, <span class="keyword">false</span>, termInfosIndexDivisor);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">private</span> <span class="keyword">class </span>AnonymousClassFindSegmentsFile1:<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>.FindSegmentsFile</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> InitBlock(<span class="keywordtype">bool</span> openReadOnly, <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> enclosingInstance)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; this.openReadOnly = openReadOnly;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; this.enclosingInstance = enclosingInstance;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> openReadOnly;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">private</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> enclosingInstance;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">public</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> Enclosing_Instance</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; <span class="keyword">get</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> enclosingInstance;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">internal</span> AnonymousClassFindSegmentsFile1(<span class="keywordtype">bool</span> openReadOnly, <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> enclosingInstance, Lucene.Net.Store.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#aa59ec06655a94ed489db58f3e6a3633b" title="Returns the directory this index resides in. ">Directory</a> Param1):base(Param1)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; InitBlock(openReadOnly, enclosingInstance);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">public</span> <span class="comment">/*protected internal*/</span> <span class="keyword">override</span> System.Object DoBody(System.String segmentFileName)</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; var infos = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>();</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; infos.Read(directory, segmentFileName);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> Enclosing_Instance.DoReopen(infos, <span class="keyword">false</span>, openReadOnly);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</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="keyword">protected</span> <span class="keyword">internal</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> internalDirectory;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keywordtype">bool</span> readOnly;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_writer.html" title="An IndexWriter creates and maintains an index. The create argument to the constructor determines whet...">IndexWriter</a> writer;</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="keyword">private</span> <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_index_deletion_policy.html" title="Expert: policy for deletion of stale index commits.">IndexDeletionPolicy</a> deletionPolicy;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">private</span> readonly HashSet&lt;string&gt; synced = <span class="keyword">new</span> HashSet&lt;string&gt;();</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">private</span> <a class="code" href="_compound_file_reader_8cs.html#a1fbfd61efe054805d79812bbe65054a9">Lock</a> writeLock;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a> segmentInfos;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a> segmentInfosStart;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> stale;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">private</span> readonly <span class="keywordtype">int</span> termInfosIndexDivisor;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> rollbackHasChanges;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>[] subReaders;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</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="l00105"></a><span class="lineno"> 105</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="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> maxDoc = 0;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> numDocs = - 1;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> hasDeletions = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// Max version in index as of when we opened; this can be</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// &gt; our current segmentInfos version in case we were</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// opened on a past IndexCommit:</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">private</span> <span class="keywordtype">long</span> maxIndexVersion;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">internal</span> <span class="keyword">static</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> Open(<a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> directory, <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_index_deletion_policy.html" title="Expert: policy for deletion of stale index commits.">IndexDeletionPolicy</a> deletionPolicy, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_commit.html" title="Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader...">IndexCommit</a> commit, <span class="keywordtype">bool</span> readOnly, <span class="keywordtype">int</span> termInfosIndexDivisor)</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</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>) <span class="keyword">new</span> AnonymousClassFindSegmentsFile(readOnly, deletionPolicy, termInfosIndexDivisor, directory).Run(commit);</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; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">internal</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="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> directory, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a> sis, <a class="code" href="interface_lucene_1_1_net_1_1_index_1_1_index_deletion_policy.html" title="Expert: policy for deletion of stale index commits.">IndexDeletionPolicy</a> deletionPolicy, <span class="keywordtype">bool</span> readOnly, <span class="keywordtype">int</span> termInfosIndexDivisor)</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; internalDirectory = directory;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; this.readOnly = readOnly;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; this.segmentInfos = sis;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; this.deletionPolicy = deletionPolicy;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; this.termInfosIndexDivisor = termInfosIndexDivisor;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (!readOnly)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// We assume that this segments_N was previously</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// properly sync&#39;d:</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; synced.UnionWith(sis.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#ad8f7fa9954554726d9bc32eac3cda8ac" title="Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files ...">Files</a>(directory, <span class="keyword">true</span>));</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; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// To reduce the chance of hitting FileNotFound</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// (and having to retry), we open segments in</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// reverse because IndexWriter merges &amp; deletes</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// the newest segments first.</span></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; var readers = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>[sis.Count];</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = sis.Count - 1; i &gt;= 0; i--)</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="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">try</span></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; readers[i] = <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a40267dbe995c00bf0e3eaf66d72a4bba">Get</a>(readOnly, sis.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(i), termInfosIndexDivisor);</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">finally</span></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; <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// Close all readers we had opened:</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">for</span> (i++; i &lt; sis.Count; i++)</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="keywordflow">try</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; readers[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="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">catch</span> (System.Exception)</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="comment">// keep going - we want to clean up as much as possible</span></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; }</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</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; }</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; Initialize(readers);</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// Used by near real-time search</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">internal</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_index_writer.html" title="An IndexWriter creates and maintains an index. The create argument to the constructor determines whet...">IndexWriter</a> writer, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a> infos, <span class="keywordtype">int</span> termInfosIndexDivisor)</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; this.internalDirectory = writer.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_writer.html#a3b1c7cb1f5060b72d2cd346870525c3c" title="Returns the Directory used by this index. ">Directory</a>;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; this.readOnly = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; segmentInfos = infos;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; segmentInfosStart = (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>) infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#aa5d7093ba63baaf85037149ed7f8ba67" title="Returns a copy of this instance, also copying each SegmentInfo. ">Clone</a>();</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; this.termInfosIndexDivisor = termInfosIndexDivisor;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span> (!readOnly)</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// We assume that this segments_N was previously</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// properly sync&#39;d:</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; synced.UnionWith(infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#ad8f7fa9954554726d9bc32eac3cda8ac" title="Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files ...">Files</a>(internalDirectory, <span class="keyword">true</span>));</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// IndexWriter synchronizes externally before calling</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// us, which ensures infos will not change; so there&#39;s</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// no need to process segments in reverse order</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordtype">int</span> numSegments = infos.Count;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; var readers = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>[numSegments];</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir = writer.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_writer.html#a3b1c7cb1f5060b72d2cd346870525c3c" title="Returns the Directory used by this index. ">Directory</a>;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">int</span> upto = 0;</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; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numSegments; i++)</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; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">try</span></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; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html" title="Information about a segment such as it&#39;s name, directory, and files related to the segment...">SegmentInfo</a> info = infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(i);</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (info.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a77fa20e4bba0bfcc0212378685c1b353">dir</a> == dir)</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; readers[upto++] = writer.readerPool.GetReadOnlyClone(info, <span class="keyword">true</span>, termInfosIndexDivisor);</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; success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">finally</span></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; <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// Close all readers we had opened:</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">for</span> (upto--; upto &gt;= 0; upto--)</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; readers[upto].Close();</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; <span class="keywordflow">catch</span> (System.Exception)</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// keep going - we want to clean up as much as possible</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</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"> 227</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; this.writer = writer;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (upto &lt; readers.Length)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// This means some segments were in a foreign Directory</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; var newReaders = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>[upto];</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; Array.Copy(readers, 0, newReaders, 0, upto);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; readers = newReaders;</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; </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; Initialize(readers);</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">internal</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="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> directory, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a> infos, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>[] oldReaders, <span class="keywordtype">int</span>[] oldStarts,</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; IEnumerable&lt;KeyValuePair&lt;<span class="keywordtype">string</span>, byte[]&gt;&gt; oldNormsCache, <span class="keywordtype">bool</span> readOnly, <span class="keywordtype">bool</span> doClone, <span class="keywordtype">int</span> termInfosIndexDivisor)</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; this.internalDirectory = directory;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; this.readOnly = readOnly;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; this.segmentInfos = infos;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; this.termInfosIndexDivisor = termInfosIndexDivisor;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">if</span> (!readOnly)</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">// We assume that this segments_N was previously</span></div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// properly sync&#39;d:</span></div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; synced.UnionWith(infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#ad8f7fa9954554726d9bc32eac3cda8ac" title="Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files ...">Files</a>(directory, <span class="keyword">true</span>));</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// we put the old SegmentReaders in a map, that allows us</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// to lookup a reader using its segment name</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; IDictionary&lt;string, int&gt; segmentReaders = <span class="keyword">new</span> HashMap&lt;string, int&gt;();</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; <span class="keywordflow">if</span> (oldReaders != null)</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// create a Map SegmentName-&gt;SegmentReader</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; oldReaders.Length; i++)</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; segmentReaders[oldReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#ad51c621f47065e1fadad6b485b977872" title="Return the name of the segment this reader is reading.">SegmentName</a>] = i;</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"> 268</span>&#160; </div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; var newReaders = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>[infos.Count];</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// remember which readers are shared between the old and the re-opened</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// DirectoryReader - we have to incRef those readers</span></div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; var readerShared = <span class="keyword">new</span> <span class="keywordtype">bool</span>[infos.Count];</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; </div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = infos.Count - 1; i &gt;= 0; i--)</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// find SegmentReader for this segment</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">if</span> (!segmentReaders.ContainsKey(infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(i).<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ad2d92265537056fb32c758ba47f78857">name</a>))</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; <span class="comment">// this is a new segment, no old SegmentReader can be reused</span></div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; newReaders[i] = null;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; {</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// there is an old reader for this segment - we&#39;ll try to reopen it</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; newReaders[i] = oldReaders[segmentReaders[infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(i).<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ad2d92265537056fb32c758ba47f78857">name</a>]];</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">try</span></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; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a> newReader;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (newReaders[i] == null || infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(i).<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a909674a1c5b915a7622e88894703f55a" title="Returns true if this segment is stored as a compound file; else, false. ">GetUseCompoundFile</a>() != newReaders[i].SegmentInfo.GetUseCompoundFile())</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</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">// We should never see a totally new segment during cloning</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; System.Diagnostics.Debug.Assert(!doClone);</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 is a new reader; in case we hit an exception we can close it safely</span></div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; newReader = <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a40267dbe995c00bf0e3eaf66d72a4bba">Get</a>(readOnly, infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(i), termInfosIndexDivisor);</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; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; newReader = newReaders[i].ReopenSegment(infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(i), doClone, readOnly);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (newReader == newReaders[i])</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// this reader will be shared between the old and the new one,</span></div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// so we must incRef it</span></div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; readerShared[i] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; newReader.<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="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">else</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; readerShared[i] = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; newReaders[i] = newReader;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; success = <span class="keyword">true</span>;</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="keywordflow">finally</span></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="keywordflow">if</span> (!success)</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">for</span> (i++; i &lt; infos.Count; i++)</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; <span class="keywordflow">if</span> (newReaders[i] != null)</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; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (!readerShared[i])</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// this is a new subReader that is not used by the old one,</span></div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// we can close it</span></div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; newReaders[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="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="comment">// this subReader is also used by the old reader, so instead</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// closing we must decRef it</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; newReaders[i].DecRef();</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; }</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">catch</span> (System.IO.IOException)</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">// keep going - we want to clean up as much as possible</span></div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</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="l00352"></a><span class="lineno"> 352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// initialize the readers to calculate maxDoc before we try to reuse the old normsCache</span></div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; Initialize(newReaders);</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"> 356</span>&#160; <span class="comment">// try to copy unchanged norms from the old normsCache to the new one</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (oldNormsCache != null)</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">foreach</span>(var entry <span class="keywordflow">in</span> oldNormsCache)</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; String field = entry.Key;</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">if</span> (!HasNorms(field))</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; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; </div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; byte[] oldBytes = entry.Value;</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; var bytes = <span class="keyword">new</span> byte[MaxDoc];</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">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</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="keywordtype">int</span> oldReaderIndex = segmentReaders[subReaders[i].SegmentName];</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">// this SegmentReader was not re-opened, we can copy all of its norms </span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">if</span> (segmentReaders.ContainsKey(subReaders[i].SegmentName) &amp;&amp;</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; (oldReaders[oldReaderIndex] == subReaders[i]</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; || oldReaders[oldReaderIndex].norms[field] == subReaders[i].norms[field]))</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="comment">// we don&#39;t have to synchronize here: either this constructor is called from a SegmentReader,</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// in which case no old norms cache is present, or it is called from MultiReader.reopen(),</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// which is synchronized</span></div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; Array.Copy(oldBytes, oldStarts[oldReaderIndex], bytes, starts[i], starts[i + 1] - 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; <span class="keywordflow">else</span></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; subReaders[i].Norms(field, bytes, starts[i]);</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; }</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; normsCache[field] = bytes; <span class="comment">// update cache</span></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; }</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; </div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</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_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a>[] subReaders)</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; this.subReaders = subReaders;</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</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="l00400"></a><span class="lineno"> 400</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="l00401"></a><span class="lineno"> 401</span>&#160; {</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; starts[i] = maxDoc;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; maxDoc += subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a568e19b9051130238c27ba662e23577e">MaxDoc</a>; <span class="comment">// compute maxDocs</span></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; <span class="keywordflow">if</span> (subReaders[i].HasDeletions)</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; hasDeletions = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; starts[subReaders.Length] = maxDoc;</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; <span class="keywordflow">if</span> (!readOnly)</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; maxIndexVersion = <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a50a48aff89e02201e2ae68cd5cf08d73" title="Current version number from segments file.">ReadCurrentVersion</a>(internalDirectory);</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; </div>
<div class="line"><a name="l00416"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a0476b21df6115fe16e89aa9c5a53fee4"> 416</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> Object Clone()</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; lock (<span class="keyword">this</span>)</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; <span class="keywordflow">try</span></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="keywordflow">return</span> Clone(readOnly); <span class="comment">// Preserve current readOnly</span></div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">catch</span> (Exception ex)</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">throw</span> <span class="keyword">new</span> SystemException(ex.Message, ex); <span class="comment">// TODO: why rethrow this way?</span></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; }</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; </div>
<div class="line"><a name="l00431"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a83c4a00254d16f2772fc5ae702391cce"> 431</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> Clone(<span class="keywordtype">bool</span> openReadOnly)</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; {</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <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> newReader = DoReopen((<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>) segmentInfos.Clone(), <span class="keyword">true</span>, openReadOnly);</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; <span class="keywordflow">if</span> (<span class="keyword">this</span> != newReader)</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; newReader.deletionPolicy = deletionPolicy;</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; newReader.writer = writer;</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// If we&#39;re cloning a non-readOnly reader, move the</span></div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="comment">// writeLock (if there is one) to the new reader:</span></div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">if</span> (!openReadOnly &amp;&amp; writeLock != null)</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; <span class="comment">// In near real-time search, reader is always readonly</span></div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; System.Diagnostics.Debug.Assert(writer == null);</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; newReader.writeLock = writeLock;</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; newReader.hasChanges = hasChanges;</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; newReader.hasDeletions = hasDeletions;</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; writeLock = null;</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; hasChanges = <span class="keyword">false</span>;</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="keywordflow">return</span> newReader;</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; </div>
<div class="line"><a name="l00459"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a61528bdf209d9e3ea048636f999d6c76"> 459</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="l00460"></a><span class="lineno"> 460</span>&#160; {</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="comment">// Preserve current readOnly</span></div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">return</span> DoReopen(readOnly, null);</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; </div>
<div class="line"><a name="l00465"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a5271909816997ce7b7a02931211d8d39"> 465</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(<span class="keywordtype">bool</span> openReadOnly)</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">return</span> DoReopen(openReadOnly, null);</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a6404d9ae63c84a8f755258da7be40ff9"> 470</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(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_commit.html" title="Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader...">IndexCommit</a> commit)</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">return</span> DoReopen(<span class="keyword">true</span>, commit);</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keyword">private</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> DoReopenFromWriter(<span class="keywordtype">bool</span> openReadOnly, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_commit.html" title="Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader...">IndexCommit</a> commit)</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; System.Diagnostics.Debug.Assert(readOnly);</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; <span class="keywordflow">if</span> (!openReadOnly)</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; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.ArgumentException(<span class="stringliteral">&quot;a reader obtained from IndexWriter.getReader() can only be reopened with openReadOnly=true (got false)&quot;</span>);</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;</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (commit != 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; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.ArgumentException(<span class="stringliteral">&quot;a reader obtained from IndexWriter.getReader() cannot currently accept a commit&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"> 489</span>&#160; <span class="comment">// TODO: right now we *always* make a new reader; in</span></div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="comment">// the future we could have write make some effort to</span></div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// detect that no changes have occurred</span></div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">return</span> writer.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_writer.html#a57044cd06b7b2b00bb33a08ad666d4c5" title="Expert: returns a readonly reader, covering all committed as well as un-committed changes to the inde...">GetReader</a>();</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 class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> DoReopen(<span class="keywordtype">bool</span> openReadOnly, IndexCommit commit)</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; EnsureOpen();</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; System.Diagnostics.Debug.Assert(commit == null || openReadOnly);</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="comment">// If we were obtained by writer.getReader(), re-ask the</span></div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// writer to get a new reader.</span></div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (writer != null)</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">return</span> DoReopenFromWriter(openReadOnly, commit);</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; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">return</span> DoReopenNoWriter(openReadOnly, commit);</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; }</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; </div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keyword">private</span> <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> DoReopenNoWriter(<span class="keywordtype">bool</span> openReadOnly, IndexCommit commit)</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; lock (<span class="keyword">this</span>)</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; <span class="keywordflow">if</span> (commit == null)</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; {</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">if</span> (hasChanges)</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// We have changes, which means we are not readOnly:</span></div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; System.Diagnostics.Debug.Assert(readOnly == <span class="keyword">false</span>);</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// and we hold the write lock:</span></div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; System.Diagnostics.Debug.Assert(writeLock != null);</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// so no other writer holds the write lock, which</span></div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// means no changes could have been done to the index:</span></div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; System.Diagnostics.Debug.Assert(IsCurrent());</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">if</span> (openReadOnly)</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; {</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">return</span> Clone(openReadOnly);</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsCurrent())</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; <span class="keywordflow">if</span> (openReadOnly != readOnly)</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="comment">// Just fallback to clone</span></div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> Clone(openReadOnly);</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; }</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; {</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">if</span> (internalDirectory != commit.Directory)</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.IO.IOException(<span class="stringliteral">&quot;the specified commit does not match the specified Directory&quot;</span>);</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">if</span> (segmentInfos != null &amp;&amp; commit.SegmentsFileName.Equals(segmentInfos.GetCurrentSegmentFileName()))</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; {</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">if</span> (readOnly != openReadOnly)</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; <span class="comment">// Just fallback to clone</span></div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">return</span> Clone(openReadOnly);</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">else</span></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">return</span> <span class="keyword">this</span>;</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; }</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;</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a>)<span class="keyword">new</span> AnonymousFindSegmentsFile(internalDirectory, openReadOnly, <span class="keyword">this</span>).Run(commit);</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keyword">class </span>AnonymousFindSegmentsFile : SegmentInfos.FindSegmentsFile</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; readonly DirectoryReader enclosingInstance;</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; readonly <span class="keywordtype">bool</span> openReadOnly;</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; readonly <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir;</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keyword">public</span> AnonymousFindSegmentsFile(<a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> directory, <span class="keywordtype">bool</span> openReadOnly, DirectoryReader dirReader) : base(directory)</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; this.dir = directory;</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; this.openReadOnly = openReadOnly;</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; enclosingInstance = dirReader;</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">object</span> DoBody(<span class="keywordtype">string</span> segmentFileName)</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; {</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; var infos = <span class="keyword">new</span> SegmentInfos();</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; infos.Read(dir, segmentFileName);</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">return</span> enclosingInstance.DoReopen(infos, <span class="keyword">false</span>, openReadOnly);</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; }</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="keyword">private</span> DirectoryReader DoReopen(SegmentInfos infos, <span class="keywordtype">bool</span> doClone, <span class="keywordtype">bool</span> openReadOnly)</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; DirectoryReader reader;</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">if</span> (openReadOnly)</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; reader = <span class="keyword">new</span> ReadOnlyDirectoryReader(internalDirectory, infos, subReaders, starts, normsCache, doClone, termInfosIndexDivisor);</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; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; {</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; reader = <span class="keyword">new</span> DirectoryReader(internalDirectory, infos, subReaders, starts, normsCache, <span class="keyword">false</span>, doClone, termInfosIndexDivisor);</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> reader;</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; }</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;</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</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="l00613"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#aa65b5ce4ffc8916d7af64af729da87f0"> 613</a></span>&#160; {</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; {</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">return</span> segmentInfos.Version;</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; }</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#ac111de924d2529fe5f4abccdf36fed33"> 621</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="l00622"></a><span class="lineno"> 622</span>&#160; {</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a4f90851b3f9e26d7b248fd441f0aa040" 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="l00626"></a><span class="lineno"> 626</span>&#160; }</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
<div class="line"><a name="l00628"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a8bdc1fe07174c33704faf80b63d2983b"> 628</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="l00629"></a><span class="lineno"> 629</span>&#160; {</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a66905d2e783d87c8297d760046813269" title="Return a term frequency vector for the specified document and field. The vector returned contains ter...">GetTermFreqVector</a>(n - starts[i], field);</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; </div>
<div class="line"><a name="l00636"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a6b56ab8fc2d41457a26f350e066159f5"> 636</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="l00637"></a><span class="lineno"> 637</span>&#160; {</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(docNumber); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a66905d2e783d87c8297d760046813269" title="Return a term frequency vector for the specified document and field. The vector returned contains ter...">GetTermFreqVector</a>(docNumber - starts[i], field, mapper);</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; </div>
<div class="line"><a name="l00643"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#ab9e552d40a2f9a02164c3cb0defff261"> 643</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="l00644"></a><span class="lineno"> 644</span>&#160; {</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(docNumber); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a66905d2e783d87c8297d760046813269" title="Return a term frequency vector for the specified document and field. The vector returned contains ter...">GetTermFreqVector</a>(docNumber - starts[i], mapper);</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div>
<div class="line"><a name="l00652"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a770976216f197e424159448d88269720"> 652</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="l00653"></a><span class="lineno"> 653</span>&#160; {</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">return</span> segmentInfos.Count == 1 &amp;&amp; !HasDeletions;</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;</div>
<div class="line"><a name="l00658"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a46302f9e324afb8e5a6c4ebca3703589"> 658</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="l00659"></a><span class="lineno"> 659</span>&#160; {</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="comment">// NOTE: multiple threads may wind up init&#39;ing</span></div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="comment">// numDocs... but that&#39;s harmless</span></div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">if</span> (numDocs == - 1)</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; {</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="comment">// check cache</span></div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordtype">int</span> n = subReaders.Sum(t =&gt; t.NumDocs()); <span class="comment">// cache miss--recompute</span></div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; numDocs = n;</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">return</span> numDocs;</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> MaxDoc</div>
<div class="line"><a name="l00673"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a3a77a4c9ef2cfc9e2515e0ba3e0bd395"> 673</a></span>&#160; {</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; {</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">return</span> maxDoc;</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// inherit javadoc</span></div>
<div class="line"><a name="l00682"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#aaf8ec1fd0bb797ebe8ba354b5c039884"> 682</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="l00683"></a><span class="lineno"> 683</span>&#160; {</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a3f5657ef64a324882322d3073dd69e73" title="Get the Lucene.Net.Documents.Document at the n th position. The FieldSelector may be used to determin...">Document</a>(n - starts[i], fieldSelector); <span class="comment">// dispatch to segment reader</span></div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; </div>
<div class="line"><a name="l00689"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#ad83fadd1a34d5bcd1e024d7aa66d2c26"> 689</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="l00690"></a><span class="lineno"> 690</span>&#160; {</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">return</span> subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a2f913cad242b4acefe2f8665130e2fda" 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="l00694"></a><span class="lineno"> 694</span>&#160; }</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> HasDeletions</div>
<div class="line"><a name="l00697"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#aa45d3065823ff607c17a05c3551e9f23"> 697</a></span>&#160; {</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">return</span> hasDeletions;</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; }</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <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="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; numDocs = - 1; <span class="comment">// invalidate cache</span></div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</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="l00710"></a><span class="lineno"> 710</span>&#160; hasDeletions = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; </div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</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="l00714"></a><span class="lineno"> 714</span>&#160; {</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">foreach</span> (SegmentReader t <span class="keywordflow">in</span> subReaders)</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; t.UndeleteAll();</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; hasDeletions = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; numDocs = - 1; <span class="comment">// invalidate cache</span></div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; }</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; </div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</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="l00723"></a><span class="lineno"> 723</span>&#160; {</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="comment">// find reader for doc n:</span></div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">return</span> ReaderIndex(n, this.starts, this.subReaders.Length);</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; }</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; </div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keyword">internal</span> <span class="keyword">static</span> <span class="keywordtype">int</span> ReaderIndex(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span>[] starts, <span class="keywordtype">int</span> numSubReaders)</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; {</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">// find reader for doc n:</span></div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordtype">int</span> lo = 0; <span class="comment">// search starts array</span></div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordtype">int</span> hi = numSubReaders - 1; <span class="comment">// for first element less</span></div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; </div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">while</span> (hi &gt;= lo)</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; {</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordtype">int</span> mid = <a class="code" href="class_lucene_1_1_net_1_1_support_1_1_number.html" title="A simple class for number conversions. ">Number</a>.<a class="code" href="class_lucene_1_1_net_1_1_support_1_1_number.html#aafe44e2acf7feacad6abd2a425730644" title="Performs an unsigned bitwise right shift with the specified number ">URShift</a>((lo + hi), 1);</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordtype">int</span> midValue = starts[mid];</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span> (n &lt; midValue)</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; hi = mid - 1;</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (n &gt; midValue)</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; lo = mid + 1;</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="comment">// found a match</span></div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">while</span> (mid + 1 &lt; numSubReaders &amp;&amp; starts[mid + 1] == midValue)</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; mid++; <span class="comment">// scan to last match</span></div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; }</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">return</span> mid;</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; }</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; }</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span> hi;</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; </div>
<div class="line"><a name="l00755"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a25bbf565fd931800f05aad30e32cedd9"> 755</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="l00756"></a><span class="lineno"> 756</span>&#160; {</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">return</span> subReaders.Any(t =&gt; t.HasNorms(field));</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; }</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; </div>
<div class="line"><a name="l00761"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#adf57b7f2640b5d32b94118c6ea1ab6a5"> 761</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> byte[] Norms(System.String field)</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; {</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; byte[] bytes = normsCache[field];</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordflow">if</span> (bytes != null)</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> bytes; <span class="comment">// cache hit</span></div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">if</span> (!HasNorms(field))</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; </div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; bytes = <span class="keyword">new</span> byte[MaxDoc];</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</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="l00774"></a><span class="lineno"> 774</span>&#160; subReaders[i].Norms(field, bytes, starts[i]);</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; normsCache[field] = bytes; <span class="comment">// update cache</span></div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">return</span> bytes;</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; }</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; }</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; </div>
<div class="line"><a name="l00780"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#ad5710fa7f259325dff744522dab06ec4"> 780</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="l00781"></a><span class="lineno"> 781</span>&#160; {</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; {</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; byte[] bytes = normsCache[field];</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">if</span> (bytes == null &amp;&amp; !HasNorms(field))</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; {</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; byte val = <a class="code" href="_more_like_this_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f">DefaultSimilarity</a>.EncodeNorm(1.0f);</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = offset; index &lt; result.Length; index++)</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; result.SetValue(val, index);</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; }</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bytes != null)</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; {</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">// cache hit</span></div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; Array.Copy(bytes, 0, result, offset, MaxDoc);</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; }</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; {</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; {</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="comment">// read from segments</span></div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; subReaders[i].Norms(field, result, offset + starts[i]);</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; }</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; }</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; }</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; }</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; </div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <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="l00809"></a><span class="lineno"> 809</span>&#160; {</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; lock (normsCache)</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; normsCache.Remove(field); <span class="comment">// clear cache </span></div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; }</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordtype">int</span> i = ReaderIndex(n); <span class="comment">// find segment num</span></div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; subReaders[i].SetNorm(n - starts[i], field, value_Renamed); <span class="comment">// dispatch</span></div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; </div>
<div class="line"><a name="l00818"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a2cb229934cf29c40635180b2160aad2d"> 818</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="l00819"></a><span class="lineno"> 819</span>&#160; {</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</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="l00822"></a><span class="lineno"> 822</span>&#160; }</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; </div>
<div class="line"><a name="l00824"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a3e23765e8d39a779405aef5023358497"> 824</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="l00825"></a><span class="lineno"> 825</span>&#160; {</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</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="l00828"></a><span class="lineno"> 828</span>&#160; }</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; </div>
<div class="line"><a name="l00830"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#adfba36b31d8ac180ab930cb81571bfad"> 830</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="l00831"></a><span class="lineno"> 831</span>&#160; {</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keywordtype">int</span> total = 0; <span class="comment">// sum freqs in segments</span></div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</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="l00835"></a><span class="lineno"> 835</span>&#160; total += subReaders[i].DocFreq(t);</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">return</span> total;</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; }</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; </div>
<div class="line"><a name="l00839"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a254c2a6697bb4c9fdd12fb35b95186f4"> 839</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="l00840"></a><span class="lineno"> 840</span>&#160; {</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</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="l00843"></a><span class="lineno"> 843</span>&#160; }</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; </div>
<div class="line"><a name="l00845"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#aca0871eedcc3be248ae54751b077d6ec"> 845</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="l00846"></a><span class="lineno"> 846</span>&#160; {</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</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="l00849"></a><span class="lineno"> 849</span>&#160; }</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; </div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> AcquireWriteLock()</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; {</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; </div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="keywordflow">if</span> (readOnly)</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; {</div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="comment">// NOTE: we should not reach this code w/ the core</span></div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="comment">// IndexReader classes; however, an external subclass</span></div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="comment">// of IndexReader could reach this.</span></div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_read_only_segment_reader.html">ReadOnlySegmentReader</a>.NoWrite();</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; }</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; </div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="keywordflow">if</span> (segmentInfos != null)</div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; {</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordflow">if</span> (stale)</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> StaleReaderException(<span class="stringliteral">&quot;IndexReader out of date and no longer valid for delete, undelete, or setNorm operations&quot;</span>);</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; </div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">if</span> (this.writeLock == null)</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; {</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="_compound_file_reader_8cs.html#a1fbfd61efe054805d79812bbe65054a9">Lock</a> writeLock = internalDirectory.MakeLock(<a class="code" href="_syns2_index_8cs.html#a7d90824eac5b2433e714cc9faeb34d1b">IndexWriter</a>.WRITE_LOCK_NAME);</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">if</span> (!writeLock.Obtain(<a class="code" href="_syns2_index_8cs.html#a7d90824eac5b2433e714cc9faeb34d1b">IndexWriter</a>.WRITE_LOCK_TIMEOUT))</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="comment">// obtain write lock</span></div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; {</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="_directory_reader_8cs.html#a681d344289754da86d367afaac7bd3d7">LockObtainFailedException</a>(<span class="stringliteral">&quot;Index locked for write: &quot;</span> + writeLock);</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; }</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; this.writeLock = writeLock;</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; </div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="comment">// we have to check whether index has changed since this reader was opened.</span></div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="comment">// if so, this reader is no longer valid for</span></div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="comment">// deletion</span></div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordflow">if</span> (SegmentInfos.ReadCurrentVersion(internalDirectory) &gt; maxIndexVersion)</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; {</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; stale = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; this.writeLock.Release();</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; this.writeLock = null;</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> StaleReaderException(<span class="stringliteral">&quot;IndexReader out of date and no longer valid for delete, undelete, or setNorm operations&quot;</span>);</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; }</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; }</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; }</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; }</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; </div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> DoCommit(IDictionary&lt;string, string&gt; commitUserData)</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; {</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">if</span> (hasChanges)</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; {</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; segmentInfos.UserData = commitUserData;</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="comment">// Default deleter (for backwards compatibility) is</span></div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="comment">// KeepOnlyLastCommitDeleter:</span></div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; var deleter = <span class="keyword">new</span> IndexFileDeleter(internalDirectory, deletionPolicy ?? <span class="keyword">new</span> KeepOnlyLastCommitDeletionPolicy(), segmentInfos, null, null, synced);</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160;</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; segmentInfos.UpdateGeneration(deleter.LastSegmentInfos);</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="comment">// Checkpoint the state we are about to change, in</span></div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="comment">// case we have to roll back:</span></div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; StartCommit();</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; </div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; {</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">foreach</span> (SegmentReader t <span class="keywordflow">in</span> subReaders)</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; t.Commit();</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="comment">// Sync all files we just wrote</span></div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordflow">foreach</span>(<span class="keywordtype">string</span> fileName <span class="keywordflow">in</span> segmentInfos.Files(internalDirectory, <span class="keyword">false</span>))</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; {</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span>(!synced.Contains(fileName))</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; {</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; System.Diagnostics.Debug.Assert(internalDirectory.FileExists(fileName));</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; internalDirectory.Sync(fileName);</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; synced.Add(fileName);</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; } </div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; }</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; </div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; segmentInfos.Commit(internalDirectory);</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; }</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="keywordflow">finally</span></div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; {</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; </div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; {</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; </div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="comment">// Rollback changes that were made to</span></div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="comment">// SegmentInfos but failed to get [fully]</span></div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="comment">// committed. This way this reader instance</span></div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="comment">// remains consistent (matched to what&#39;s</span></div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="comment">// actually in the index):</span></div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; RollbackCommit();</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; </div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="comment">// Recompute deletable files &amp; remove them (so</span></div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="comment">// partially written .del files, etc, are</span></div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="comment">// removed):</span></div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; deleter.Refresh();</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; }</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; }</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; </div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="comment">// Have the deleter remove any now unreferenced</span></div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="comment">// files due to this commit:</span></div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; deleter.Checkpoint(segmentInfos, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; deleter.Dispose();</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; maxIndexVersion = segmentInfos.Version;</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; </div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">if</span> (writeLock != null)</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; {</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; writeLock.Release(); <span class="comment">// release write lock</span></div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; writeLock = null;</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; }</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; }</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; hasChanges = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; }</div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; </div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> StartCommit()</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; {</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; rollbackHasChanges = hasChanges;</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordflow">foreach</span> (SegmentReader t <span class="keywordflow">in</span> subReaders)</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; {</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; t.StartCommit();</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; }</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> RollbackCommit()</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; {</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; hasChanges = rollbackHasChanges;</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">foreach</span> (SegmentReader t <span class="keywordflow">in</span> subReaders)</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; {</div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; t.RollbackCommit();</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; }</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; }</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> IDictionary&lt;string, string&gt; CommitUserData</div>
<div class="line"><a name="l01000"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a3f58352dfadfbdf5a51341f585b8d718"> 1000</a></span>&#160; {</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; {</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keywordflow">return</span> segmentInfos.UserData;</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; }</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;</div>
<div class="line"><a name="l01008"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a2f938eed2244b84c6385cb0855b9ee57"> 1008</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="l01009"></a><span class="lineno"> 1009</span>&#160; {</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">if</span> (writer == null || writer.IsClosed())</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; {</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="comment">// we loaded SegmentInfos from the directory</span></div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a50a48aff89e02201e2ae68cd5cf08d73" title="Current version number from segments file.">ReadCurrentVersion</a>(internalDirectory) == segmentInfos.Version;</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; }</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; {</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">return</span> writer.NrtIsCurrent(segmentInfosStart);</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; }</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; }</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="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="l01023"></a><span class="lineno"> 1023</span>&#160; {</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; {</div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; System.IO.IOException ioe = null;</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; normsCache = null;</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">foreach</span> (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html" title="NOTE: This API is new and still experimental (subject to change suddenly in the next release)...">SegmentReader</a> t <span class="keywordflow">in</span> subReaders)</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; {</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="comment">// try to close each reader, even if an exception is thrown</span></div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; {</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; t.<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="l01034"></a><span class="lineno"> 1034</span>&#160; }</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordflow">catch</span> (System.IO.IOException e)</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; {</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span> (ioe == null)</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; ioe = e;</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; }</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="comment">// NOTE: only needed in case someone had asked for</span></div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// FieldCache for top-level reader (which is generally</span></div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="comment">// not a good idea):</span></div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; Search.FieldCache_Fields.DEFAULT.Purge(<span class="keyword">this</span>);</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="comment">// throw the first exception</span></div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">if</span> (ioe != null)</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="keywordflow">throw</span> ioe;</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; }</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;</div>
<div class="line"><a name="l01053"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a04f870765fbb41c2961e9ed2aa9bf93a"> 1053</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> ICollection&lt;string&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="l01054"></a><span class="lineno"> 1054</span>&#160; {</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keywordflow">return</span> GetFieldNames(fieldNames, this.subReaders);</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; }</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keyword">internal</span> <span class="keyword">static</span> ICollection&lt;string&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, <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="l01060"></a><span class="lineno"> 1060</span>&#160; {</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="comment">// maintain a unique set of field names</span></div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; ISet&lt;string&gt; fieldSet = Support.Compatibility.SetFactory.CreateHashSet&lt;<span class="keywordtype">string</span>&gt;();</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">foreach</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> reader <span class="keywordflow">in</span> subReaders)</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; {</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; fieldSet.UnionWith(reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a8c4e81993a2de016248031c3766f3ab7" title="Get a list of unique field names that exist in this index and have the specified field option informa...">GetFieldNames</a>(fieldNames));</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; }</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keywordflow">return</span> fieldSet;</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; }</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;</div>
<div class="line"><a name="l01070"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#ae51a6c97a24a5f4b1280d7222afdc5e7"> 1070</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="l01071"></a><span class="lineno"> 1071</span>&#160; {</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">return</span> subReaders;</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; }</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;</div>
<div class="line"><a name="l01076"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#aa59ec06655a94ed489db58f3e6a3633b"> 1076</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> <a class="code" href="namespace_spell_checker_1_1_net_1_1_search_1_1_spell.html#a09ca88ecfd50bf7b75997e3fe8df6698">Directory</a>()</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; {</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="comment">// Don&#39;t ensureOpen here -- in certain cases, when a</span></div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="comment">// cloned/reopened reader needs to commit, it may call</span></div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="comment">// this method on the closed original reader</span></div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">return</span> internalDirectory;</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; }</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> TermInfosIndexDivisor</div>
<div class="line"><a name="l01085"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#afb9aa193c3a9402100e93f8115abff30"> 1085</a></span>&#160; {</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> termInfosIndexDivisor; }</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; }</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</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_commit.html" title="Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader...">IndexCommit</a> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_commit.html" title="Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader...">IndexCommit</a></div>
<div class="line"><a name="l01094"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a49b8a057ce66a36c054d5d7bf0e1158e"> 1094</a></span>&#160; {</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> <span class="keyword">new</span> ReaderCommit(segmentInfos, internalDirectory); }</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; }</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;</div>
<div class="line"><a name="l01100"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_directory_reader.html#a51d5efedaf6a14b8bba3c8d7be10523e"> 1100</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">new</span> ICollection&lt;IndexCommit&gt; ListCommits(<a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir)</div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; {</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; String[] files = dir.ListAll();</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;</div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; ICollection&lt;IndexCommit&gt; commits = <span class="keyword">new</span> List&lt;IndexCommit&gt;();</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; </div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; var latest = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>();</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; latest.Read(dir);</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordtype">long</span> currentGen = latest.Generation;</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; </div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; commits.Add(<span class="keyword">new</span> ReaderCommit(latest, dir));</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; </div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">foreach</span> (<span class="keywordtype">string</span> fileName <span class="keywordflow">in</span> files)</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; {</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="keywordflow">if</span> (fileName.StartsWith(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_file_names.html" title="Useful constants representing filenames and extensions used by lucene">IndexFileNames</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_file_names.html#a7d1621e5bea0a2dcdb35a8ad802d090f" title="Name of the index segment file ">SEGMENTS</a>) &amp;&amp; !fileName.Equals(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_file_names.html" title="Useful constants representing filenames and extensions used by lucene">IndexFileNames</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_file_names.html#ac50f0ab232dedabd1106c7128024abb1" title="Name of the generation reference file name ">SEGMENTS_GEN</a>) &amp;&amp; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a2934f3394331903e2eed4d971df1b9f0" title="Parse the generation off the segments file name and return it. ">GenerationFromSegmentsFileName</a>(fileName) &lt; currentGen)</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; {</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; </div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; var sis = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a>();</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; {</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="comment">// IOException allowed to throw there, in case</span></div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="comment">// segments_N is corrupt</span></div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; sis.Read(dir, fileName);</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; }</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keywordflow">catch</span> (System.IO.FileNotFoundException)</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; {</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="comment">// LUCENE-948: on NFS (and maybe others), if</span></div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="comment">// you have writers switching back and forth</span></div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="comment">// between machines, it&#39;s very likely that the</span></div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="comment">// dir listing will be stale and will claim a</span></div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="comment">// file segments_X exists when in fact it</span></div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="comment">// doesn&#39;t. So, we catch this and handle it</span></div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="comment">// as if the file does not exist</span></div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; sis = null;</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; }</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; </div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keywordflow">if</span> (sis != null)</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; commits.Add(<span class="keyword">new</span> ReaderCommit(sis, dir));</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; }</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; </div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">return</span> commits;</div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; }</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; </div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keyword">private</span> sealed <span class="keyword">class </span>ReaderCommit:<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_commit.html" title="Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader...">IndexCommit</a></div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; {</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keyword">private</span> readonly String segmentsFileName;</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keyword">private</span> readonly ICollection&lt;string&gt; files;</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir;</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keyword">private</span> readonly <span class="keywordtype">long</span> generation;</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keyword">private</span> readonly <span class="keywordtype">long</span> version;</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keyword">private</span> readonly <span class="keywordtype">bool</span> isOptimized;</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keyword">private</span> readonly IDictionary&lt;string, string&gt; userData;</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; </div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keyword">internal</span> ReaderCommit(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html" title="A collection of segmentInfo objects with methods for operating on those segments in relation to the f...">SegmentInfos</a> infos, <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir)</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; {</div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; segmentsFileName = infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a3dd07fad71cbc23fc5f11c937ee3c15b" title="Get the filename of the current segments_N file from a list of files.">GetCurrentSegmentFileName</a>();</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; this.dir = dir;</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; userData = infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#af07da15e9ae8dc41c4514d3d64885afa">UserData</a>;</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; files = infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#ad8f7fa9954554726d9bc32eac3cda8ac" title="Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files ...">Files</a>(dir, <span class="keyword">true</span>);</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; version = infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a13a029f4010dd3994ec059a97446dfcd" title="version number when this SegmentInfos was generated.">Version</a>;</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; generation = infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a1357a4318fda693e22091876ff8a546b">Generation</a>;</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; isOptimized = infos.Count == 1 &amp;&amp; !infos.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_infos.html#a879c913c5764aea25d26ae7d206eedc0">Info</a>(0).<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a2bbfa314232195517980bc4e4f52fc71">HasDeletions</a>();</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; }</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">string</span> ToString()</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; {</div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;DirectoryReader.ReaderCommit(&quot;</span> + segmentsFileName + <span class="stringliteral">&quot;)&quot;</span>;</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; }</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> IsOptimized</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; {</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> isOptimized; }</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; }</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">string</span> SegmentsFileName</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; {</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> segmentsFileName; }</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; }</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;</div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> ICollection&lt;string&gt; FileNames</div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; {</div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> files; }</div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;</div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a></div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; {</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> dir; }</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; }</div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</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="l01190"></a><span class="lineno"> 1190</span>&#160; {</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> version; }</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; }</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">long</span> Generation</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; {</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> generation; }</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; }</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> IsDeleted</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; {</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; }</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;</div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> IDictionary&lt;string, string&gt; UserData</div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; {</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> userData; }</div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; }</div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;</div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Delete()</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; {</div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.NotSupportedException(<span class="stringliteral">&quot;This IndexCommit does not support deletions&quot;</span>);</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; }</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; }</div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; </div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keyword">internal</span> <span class="keyword">class </span><a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990">MultiTermEnum</a>:<a class="code" href="_field_cache_impl_8cs.html#a9ad914d1fb876bdbb16a70f17895b145">TermEnum</a></div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; {</div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keyword">internal</span> <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> topReader; <span class="comment">// used for matching TermEnum to TermDocs</span></div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keyword">private</span> readonly SegmentMergeQueue queue;</div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; </div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keyword">private</span> <a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a> term;</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> docFreq;</div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keyword">internal</span> SegmentMergeInfo[] matchingSegments; <span class="comment">// null terminated array of matching segments</span></div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; </div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keyword">public</span> <a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990">MultiTermEnum</a>(<a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> topReader, <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a>[] readers, <span class="keywordtype">int</span>[] starts, <a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a> t)</div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; {</div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; this.topReader = topReader;</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; queue = <span class="keyword">new</span> SegmentMergeQueue(readers.Length);</div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; matchingSegments = <span class="keyword">new</span> SegmentMergeInfo[readers.Length + 1];</div>
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; readers.Length; i++)</div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; {</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> reader = readers[i];</div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;</div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <a class="code" href="_field_cache_impl_8cs.html#a9ad914d1fb876bdbb16a70f17895b145">TermEnum</a> termEnum = t != null ? reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a9881fb10c3dbc407157b0c7e9cca7d11" title="Returns an enumeration of all the terms in the index. The enumeration is ordered by Term...">Terms</a>(t) : reader.Terms();</div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; var smi = <span class="keyword">new</span> SegmentMergeInfo(starts[i], termEnum, reader) {ord = i};</div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <span class="keywordflow">if</span> (t == null?smi.Next():termEnum.Term != null)</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; queue.Add(smi);</div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="comment">// initialize queue</span></div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; smi.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_enum.html#a6374bb0681656d6131c2a66b4a21f197" title="Closes the enumeration to further activity, freeing resources. ">Dispose</a>();</div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; }</div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; </div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keywordflow">if</span> (t != null &amp;&amp; queue.Size() &gt; 0)</div>
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; {</div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; Next();</div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; }</div>
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; }</div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; </div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> Next()</div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; {</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">foreach</span> (SegmentMergeInfo smi <span class="keywordflow">in</span> matchingSegments)</div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; {</div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keywordflow">if</span> (smi == null)</div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">if</span> (smi.Next())</div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; queue.Add(smi);</div>
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; smi.Dispose(); <span class="comment">// done with segment</span></div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; </div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordtype">int</span> numMatchingSegments = 0;</div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; matchingSegments[0] = null;</div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; </div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; SegmentMergeInfo top = queue.Top();</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; </div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span> (top == null)</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; {</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; term = null;</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; }</div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; </div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; term = top.term;</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; docFreq = 0;</div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; </div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">while</span> (top != null &amp;&amp; term.CompareTo(top.term) == 0)</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; {</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; matchingSegments[numMatchingSegments++] = top;</div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; queue.Pop();</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; docFreq += top.termEnum.DocFreq(); <span class="comment">// increment freq</span></div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; top = queue.Top();</div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; }</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; </div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; matchingSegments[numMatchingSegments] = null;</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; }</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a> <a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a></div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; {</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> term; }</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; }</div>
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> DocFreq()</div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; {</div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">return</span> docFreq;</div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; }</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; </div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</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="l01298"></a><span class="lineno"> 1298</span>&#160; {</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="keywordflow">if</span> (disposing)</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; {</div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; queue.Dispose();</div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; }</div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; }</div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; }</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; </div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="keyword">internal</span> <span class="keyword">class </span><a class="code" href="_multi_reader_8cs.html#a1d9007c47f37b7be513110f307c0d100">MultiTermDocs</a> : <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a></div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; {</div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keyword">internal</span> <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> topReader; <span class="comment">// used for matching TermEnum to TermDocs</span></div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a>[] readers;</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keywordtype">int</span>[] starts;</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a> term;</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; </div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keywordtype">int</span> base_Renamed = 0;</div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keywordtype">int</span> pointer = 0;</div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; </div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>[] readerTermDocs;</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a> current; <span class="comment">// == readerTermDocs[pointer]</span></div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; </div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <span class="keyword">private</span> <a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990">MultiTermEnum</a> tenum; <span class="comment">// the term enum used for seeking... can be null</span></div>
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">int</span> matchingSegmentPos; <span class="comment">// position into the matching segments from tenum</span></div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keyword">internal</span> SegmentMergeInfo smi; <span class="comment">// current segment mere info... can be null</span></div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; </div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="keyword">public</span> <a class="code" href="_multi_reader_8cs.html#a1d9007c47f37b7be513110f307c0d100">MultiTermDocs</a>(<a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> topReader, <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a>[] r, <span class="keywordtype">int</span>[] s)</div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; {</div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; this.topReader = topReader;</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; readers = r;</div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; starts = s;</div>
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; </div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; readerTermDocs = <span class="keyword">new</span> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>[r.Length];</div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; }</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> Doc</div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; {</div>
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> base_Renamed + current.Doc; }</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; }</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;</div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> Freq</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; {</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> current.Freq; }</div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; }</div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> Seek(<a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a> term)</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; {</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; this.term = term;</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; this.base_Renamed = 0;</div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; this.pointer = 0;</div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; this.current = null;</div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; this.tenum = null;</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; this.smi = null;</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; this.matchingSegmentPos = 0;</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; }</div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; </div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> Seek(<a class="code" href="_field_cache_impl_8cs.html#a9ad914d1fb876bdbb16a70f17895b145">TermEnum</a> termEnum)</div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; {</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; Seek(termEnum.Term);</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; var multiTermEnum = termEnum as <a class="code" href="_multi_reader_8cs.html#abc1d0e9022f46611323d8f7c897bc990">MultiTermEnum</a>;</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordflow">if</span> (multiTermEnum != null)</div>
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; {</div>
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; tenum = multiTermEnum;</div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="keywordflow">if</span> (topReader != tenum.topReader)</div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; tenum = null;</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; }</div>
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; </div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> Next()</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; {</div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">for</span> (; ; )</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; {</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="keywordflow">if</span> (current != null &amp;&amp; current.Next())</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; {</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; }</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pointer &lt; readers.Length)</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; {</div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="keywordflow">if</span> (tenum != null)</div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; {</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; smi = tenum.matchingSegments[matchingSegmentPos++];</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="keywordflow">if</span> (smi == null)</div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; {</div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; pointer = readers.Length;</div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; }</div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; pointer = smi.ord;</div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; }</div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; base_Renamed = starts[pointer];</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; current = <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>(pointer++);</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; }</div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; {</div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; }</div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; }</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; }</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; </div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> Read(<span class="keywordtype">int</span>[] docs, <span class="keywordtype">int</span>[] freqs)</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; {</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; {</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="keywordflow">while</span> (current == null)</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; {</div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="keywordflow">if</span> (pointer &lt; readers.Length)</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; {</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; <span class="comment">// try next segment</span></div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="keywordflow">if</span> (tenum != null)</div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; {</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; smi = tenum.matchingSegments[matchingSegmentPos++];</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="keywordflow">if</span> (smi == null)</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; {</div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; pointer = readers.Length;</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; }</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; pointer = smi.ord;</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; }</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; base_Renamed = starts[pointer];</div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; current = <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>(pointer++);</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; }</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; {</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; }</div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; }</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keywordtype">int</span> end = current.Read(docs, freqs);</div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keywordflow">if</span> (end == 0)</div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; {</div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <span class="comment">// none left in segment</span></div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; current = null;</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; }</div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; {</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="comment">// got some</span></div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <span class="keywordtype">int</span> b = base_Renamed; <span class="comment">// adjust doc numbers</span></div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; end; i++)</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; docs[i] += b;</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; <span class="keywordflow">return</span> end;</div>
<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; }</div>
<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; }</div>
<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; }</div>
<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; </div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="comment">/* A Possible future optimization could skip entire segments */</span></div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> SkipTo(<span class="keywordtype">int</span> target)</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; {</div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="keywordflow">for</span> (; ; )</div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; {</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordflow">if</span> (current != null &amp;&amp; current.SkipTo(target - base_Renamed))</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; {</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; }</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pointer &lt; readers.Length)</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; {</div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; <span class="keywordflow">if</span> (tenum != null)</div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; {</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; SegmentMergeInfo smi = tenum.matchingSegments[matchingSegmentPos++];</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keywordflow">if</span> (smi == null)</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; {</div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; pointer = readers.Length;</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; }</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; pointer = smi.ord;</div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; }</div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; base_Renamed = starts[pointer];</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; current = <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>(pointer++);</div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; }</div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; }</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; }</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; </div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <span class="keyword">private</span> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>(<span class="keywordtype">int</span> i)</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; {</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a> result = readerTermDocs[i] ?? (readerTermDocs[i] = <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>(readers[i]));</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <span class="keywordflow">if</span> (smi != null)</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; {</div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; System.Diagnostics.Debug.Assert((smi.ord == i));</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; System.Diagnostics.Debug.Assert((smi.termEnum.Term.Equals(term)));</div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; result.Seek(smi.termEnum);</div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; }</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; {</div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; result.Seek(term);</div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; }</div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; }</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; </div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">virtual</span> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>(<a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> reader)</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; {</div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="keywordflow">return</span> term == null ? reader.TermDocs(null):reader.TermDocs();</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; }</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; </div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> Close()</div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; {</div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; Dispose();</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; }</div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;</div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> Dispose()</div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; {</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; Dispose(<span class="keyword">true</span>);</div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; }</div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;</div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="keyword">protected</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; {</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordflow">if</span> (disposing)</div>
<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; {</div>
<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <span class="keywordflow">foreach</span> (<a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a> t <span class="keywordflow">in</span> readerTermDocs)</div>
<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; {</div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="keywordflow">if</span> (t != null)</div>
<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; t.Close();</div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; }</div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; }</div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; }</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; }</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; </div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="keyword">internal</span> <span class="keyword">class </span><a class="code" href="_multi_reader_8cs.html#a3e6849e6ee630366bc621f2e37b89c13">MultiTermPositions</a>:<a class="code" href="_multi_reader_8cs.html#a1d9007c47f37b7be513110f307c0d100">MultiTermDocs</a>, <a class="code" href="core_2_analysis_2_token_8cs.html#a17a77b770c87cb0e7153982c4171bfcc">TermPositions</a></div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; {</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="keyword">public</span> <a class="code" href="_multi_reader_8cs.html#a3e6849e6ee630366bc621f2e37b89c13">MultiTermPositions</a>(<a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> topReader, <a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a>[] r, <span class="keywordtype">int</span>[] s):base(topReader, r, s)</div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; {</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; }</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; </div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a> <a class="code" href="_field_cache_impl_8cs.html#a058de2d1c801e53325f35357f213391f">TermDocs</a>(<a class="code" href="_more_like_this_8cs.html#a2a6914ea10bbe06764856e29e5674e66">IndexReader</a> reader)</div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; {</div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; <span class="keywordflow">return</span> reader.TermPositions();</div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; }</div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; </div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> NextPosition()</div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; {</div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <span class="keywordflow">return</span> ((<a class="code" href="core_2_analysis_2_token_8cs.html#a17a77b770c87cb0e7153982c4171bfcc">TermPositions</a>) current).NextPosition();</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; }</div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> PayloadLength</div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; {</div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> ((<a class="code" href="core_2_analysis_2_token_8cs.html#a17a77b770c87cb0e7153982c4171bfcc">TermPositions</a>) current).PayloadLength; }</div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; }</div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> byte[] GetPayload(byte[] data, <span class="keywordtype">int</span> offset)</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; {</div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keywordflow">return</span> ((<a class="code" href="core_2_analysis_2_token_8cs.html#a17a77b770c87cb0e7153982c4171bfcc">TermPositions</a>) current).GetPayload(data, offset);</div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; }</div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; </div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; </div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="comment">// TODO: Remove warning after API has been finalized</span></div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;</div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> IsPayloadAvailable</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; {</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> ((<a class="code" href="core_2_analysis_2_token_8cs.html#a17a77b770c87cb0e7153982c4171bfcc">TermPositions</a>) current).IsPayloadAvailable; }</div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; }</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; }</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; }</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</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:44 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>