blob: 52ed1891fa48c720252ca1f65ce30b5cd931e0ac [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/SegmentReader.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">SegmentReader.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_segment_reader_8cs.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* </span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one or more</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * this work for additional information regarding copyright ownership.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * (the &quot;License&quot;); you may not use this file except in compliance with</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the License. You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * limitations under the License.</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using</span> System;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using</span> System.Linq;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> Lucene.Net.Support;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">using</span> Lucene.Net.Util;</div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="code" href="_segment_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="_segment_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="_segment_reader_8cs.html#a4770f48c7bfb99d5245f65069d5ff4e0"> 24</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_compound_file_reader_8cs.html#a4770f48c7bfb99d5245f65069d5ff4e0">BufferedIndexInput</a> = Lucene.Net.Store.BufferedIndexInput;</div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="code" href="_segment_reader_8cs.html#ac7fdd4fc5daf7ce3e6be563664f8bf64"> 25</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="l00026"></a><span class="lineno"><a class="code" href="_segment_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee"> 26</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_byte_slice_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee">IndexInput</a> = Lucene.Net.Store.IndexInput;</div>
<div class="line"><a name="l00027"></a><span class="lineno"><a class="code" href="_segment_reader_8cs.html#ade6c9dd9318ff9ca227f26d89b0ad2e5"> 27</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_byte_slice_reader_8cs.html#ade6c9dd9318ff9ca227f26d89b0ad2e5">IndexOutput</a> = Lucene.Net.Store.IndexOutput;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="_segment_reader_8cs.html#a3dd76cb0375a575afa01f10d189b6768"> 28</a></span>&#160;<span class="keyword">using</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html" title="Optimized implementation of a vector of bits. This is more-or-less like java.util.BitSet, but also includes the following: a count() method, which efficiently computes the number of one bits; optimized read from and write to disk; inlinable get() method; store and load, as bit set or d-gaps, depending on sparseness; ">BitVector</a> = Lucene.Net.Util.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html#a0ebf42699795da69472b255e21b9e9fb" title="Constructs a vector capable of holding n bits. ">BitVector</a>;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="code" href="_segment_reader_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f"> 29</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="l00030"></a><span class="lineno"> 30</span>&#160;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span>Lucene.Net.Index</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html"> 39</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_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_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="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a37016c0499ce96d6dd88768252a2b99e"> 41</a></span>&#160; <span class="keyword">public</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>()</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; InitBlock();</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> InitBlock()</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; fieldsReaderLocal = <span class="keyword">new</span> FieldsReaderLocal(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keywordtype">bool</span> readOnly;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">private</span> SegmentInfo si;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> readBufferSize;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_closeable_thread_local.html" title="Java&#39;s builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dere...">CloseableThreadLocal&lt;FieldsReader&gt;</a> fieldsReaderLocal;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_closeable_thread_local.html" title="Java&#39;s builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dere...">CloseableThreadLocal&lt;TermVectorsReader&gt;</a> termVectorsLocal = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_closeable_thread_local.html" title="Java&#39;s builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dere...">CloseableThreadLocal&lt;TermVectorsReader&gt;</a>();</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html" title="Optimized implementation of a vector of bits. This is more-or-less like java.util.BitSet, but also includes the following: a count() method, which efficiently computes the number of one bits; optimized read from and write to disk; inlinable get() method; store and load, as bit set or d-gaps, depending on sparseness; ">BitVector</a> deletedDocs = null;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">internal</span> Ref deletedDocsRef = null;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> deletedDocsDirty = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> normsDirty = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> pendingDeleteCount;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> rollbackHasChanges = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> rollbackDeletedDocsDirty = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> rollbackNormsDirty = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">private</span> SegmentInfo rollbackSegmentInfo;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> rollbackPendingDeleteCount;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// optionally used for the .nrm file shared by multiple norms</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">private</span> <a class="code" href="_byte_slice_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee">IndexInput</a> singleNormStream;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">private</span> Ref singleNormRef;</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="keyword">internal</span> CoreReaders core;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// Holds core readers that are shared (unchanged) when</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// SegmentReader is cloned or reopened</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_core_readers.html"> 77</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> sealed <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_core_readers.html">CoreReaders</a></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; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// Counts how many other reader share the core objects</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// (freqStream, proxStream, tis, etc.) of this reader;</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// when coreRef drops to 0, these core objects may be</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// closed. A given insance of SegmentReader may be</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// closed, even those it shares core objects with other</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// SegmentReaders:</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">private</span> readonly <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a> ref_Renamed = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a>();</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">internal</span> System.String segment;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_infos.html" title="Access to the Fieldable Info file that describes document fields and whether or not they are indexed...">FieldInfos</a> fieldInfos;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">internal</span> <a class="code" href="_byte_slice_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee">IndexInput</a> freqStream;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">internal</span> <a class="code" href="_byte_slice_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee">IndexInput</a> proxStream;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_infos_reader.html" title="This stores a monotonically increasing set of &lt;Term, TermInfo&gt; pairs in a Directory. Pairs are accessed either by Term or by ordinal position the set. ">TermInfosReader</a> tisNoIndex;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">internal</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">internal</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> cfsDir;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">int</span> readBufferSize;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">int</span> termsIndexDivisor;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">internal</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> origInstance;</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">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_infos_reader.html" title="This stores a monotonically increasing set of &lt;Term, TermInfo&gt; pairs in a Directory. Pairs are accessed either by Term or by ordinal position the set. ">TermInfosReader</a> tis;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_fields_reader.html" title="Class responsible for access to stored document fields. It uses &lt;segment&gt;.fdt and &lt;segment&gt;...">FieldsReader</a> fieldsReaderOrig;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> termVectorsReaderOrig;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_compound_file_reader.html" title="Class for accessing a compound stream. This class implements a directory, but is limited to only read...">CompoundFileReader</a> cfsReader;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_compound_file_reader.html" title="Class for accessing a compound stream. This class implements a directory, but is limited to only read...">CompoundFileReader</a> storeCFSReader;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_core_readers.html">CoreReaders</a>(<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> origInstance, <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir, <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> si, <span class="keywordtype">int</span> readBufferSize, <span class="keywordtype">int</span> termsIndexDivisor)</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; segment = si.<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="l00110"></a><span class="lineno"> 110</span>&#160; this.readBufferSize = readBufferSize;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; this.dir = dir;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</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="keywordflow">try</span></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; <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir0 = dir;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (si.<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>())</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; cfsReader = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_compound_file_reader.html" title="Class for accessing a compound stream. This class implements a directory, but is limited to only read...">CompoundFileReader</a>(dir, segment + <span class="stringliteral">&quot;.&quot;</span> + <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#ac62101de40ede88b69a11da26567d5a5" title="Extension of compound file ">COMPOUND_FILE_EXTENSION</a>, readBufferSize);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; dir0 = cfsReader;</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; cfsDir = dir0;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; fieldInfos = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_infos.html" title="Access to the Fieldable Info file that describes document fields and whether or not they are indexed...">FieldInfos</a>(cfsDir, segment + <span class="stringliteral">&quot;.&quot;</span> + <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#a7209042e5d196fb3750b1b7b6abb8072" title="Extension of field infos ">FIELD_INFOS_EXTENSION</a>);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; this.termsIndexDivisor = termsIndexDivisor;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; var reader = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_infos_reader.html" title="This stores a monotonically increasing set of &lt;Term, TermInfo&gt; pairs in a Directory. Pairs are accessed either by Term or by ordinal position the set. ">TermInfosReader</a>(cfsDir, segment, fieldInfos, readBufferSize, termsIndexDivisor);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (termsIndexDivisor == - 1)</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; tisNoIndex = reader;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">else</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; tis = reader;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; tisNoIndex = null;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// make sure that all index files have been read or are kept open</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">// so that if an index update removes them we&#39;ll still have them</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; freqStream = cfsDir.OpenInput(segment + <span class="stringliteral">&quot;.&quot;</span> + <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#a5cb10e87323bb23993a44f9a1849e9ec" title="Extension of freq postings file ">FREQ_EXTENSION</a>, readBufferSize);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; proxStream = fieldInfos.HasProx() ? cfsDir.OpenInput(segment + <span class="stringliteral">&quot;.&quot;</span> + <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#a2f431e091d6ffb9704e098a2ff483cbb" title="Extension of prox postings file ">PROX_EXTENSION</a>, readBufferSize) : null;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">finally</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (!success)</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; DecRef();</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// Must assign this at the end -- if we hit an</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// exception above core, we don&#39;t want to attempt to</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// purge the FieldCache (will hit NPE because core is</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// not assigned yet).</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; this.origInstance = origInstance;</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; </div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> GetTermVectorsReaderOrig()</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; lock (<span class="keyword">this</span>)</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; <span class="keywordflow">return</span> termVectorsReaderOrig;</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; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_fields_reader.html" title="Class responsible for access to stored document fields. It uses &lt;segment&gt;.fdt and &lt;segment&gt;...">FieldsReader</a> GetFieldsReaderOrig()</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> fieldsReaderOrig;</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; }</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">void</span> IncRef()</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; ref_Renamed.IncRef();</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">internal</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> GetCFSReader()</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> cfsReader;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_infos_reader.html" title="This stores a monotonically increasing set of &lt;Term, TermInfo&gt; pairs in a Directory. Pairs are accessed either by Term or by ordinal position the set. ">TermInfosReader</a> GetTermsReader()</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; lock (<span class="keyword">this</span>)</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="keywordflow">if</span> (tis != null)</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> tis;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> tisNoIndex;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">bool</span> TermsIndexIsLoaded()</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span> tis != null;</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; }</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; <span class="comment">// NOTE: only called from IndexWriter when a near</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="comment">// real-time reader is opened, or applyDeletes is run,</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="comment">// sharing a segment that&#39;s still being merged. This</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// method is not fully thread safe, and relies on the</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// synchronization in IndexWriter</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">void</span> LoadTermsIndex(<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> si, <span class="keywordtype">int</span> termsIndexDivisor)</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; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (tis == null)</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; <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir0;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (si.<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>())</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// In some cases, we were originally opened when CFS</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// was not used, but then we are asked to open the</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// terms reader with index, the segment has switched</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// to CFS</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (cfsReader == null)</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; cfsReader = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_compound_file_reader.html" title="Class for accessing a compound stream. This class implements a directory, but is limited to only read...">CompoundFileReader</a>(dir, segment + <span class="stringliteral">&quot;.&quot;</span> + <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#ac62101de40ede88b69a11da26567d5a5" title="Extension of compound file ">COMPOUND_FILE_EXTENSION</a>, readBufferSize);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; dir0 = cfsReader;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; dir0 = dir;</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; </div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; tis = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_infos_reader.html" title="This stores a monotonically increasing set of &lt;Term, TermInfo&gt; pairs in a Directory. Pairs are accessed either by Term or by ordinal position the set. ">TermInfosReader</a>(dir0, segment, fieldInfos, readBufferSize, termsIndexDivisor);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</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="keyword">internal</span> <span class="keywordtype">void</span> DecRef()</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; lock (<span class="keyword">this</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="keywordflow">if</span> (ref_Renamed.DecRef() == 0)</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; </div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// close everything, nothing is shared anymore with other readers</span></div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (tis != 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; tis.Dispose();</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// null so if an app hangs on to us we still free most ram</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; tis = null;</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (tisNoIndex != null)</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; tisNoIndex.Dispose();</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; </div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span> (freqStream != null)</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; freqStream.Close();</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (proxStream != null)</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; proxStream.Close();</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (termVectorsReaderOrig != null)</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; termVectorsReaderOrig.Dispose();</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span> (fieldsReaderOrig != null)</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; fieldsReaderOrig.Dispose();</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (cfsReader != null)</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; cfsReader.Close();</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; </div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span> (storeCFSReader != null)</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; storeCFSReader.Close();</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// Force FieldCache to evict our entries at this point</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (origInstance != null)</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; Lucene.Net.Search.FieldCache_Fields.DEFAULT.Purge(origInstance);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">void</span> OpenDocStores(<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> si)</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; lock (<span class="keyword">this</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; </div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; System.Diagnostics.Debug.Assert(si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ad2d92265537056fb32c758ba47f78857">name</a>.Equals(segment));</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; <span class="keywordflow">if</span> (fieldsReaderOrig == null)</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; <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> storeDir;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a50157e62f9ca5280b77493b8f81a3301">DocStoreOffset</a> != - 1)</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a737d39994e6bb04c86078e9de976953c">DocStoreIsCompoundFile</a>)</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; System.Diagnostics.Debug.Assert(storeCFSReader == null);</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; storeCFSReader = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_compound_file_reader.html" title="Class for accessing a compound stream. This class implements a directory, but is limited to only read...">CompoundFileReader</a>(dir, si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ab715a0bf3cec14068901e22576a571b5">DocStoreSegment</a> + <span class="stringliteral">&quot;.&quot;</span> + <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#af76f35e48d15181e4e4b019c804c539e" title="Extension of compound file for doc store files">COMPOUND_FILE_STORE_EXTENSION</a>, readBufferSize);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; storeDir = storeCFSReader;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; System.Diagnostics.Debug.Assert(storeDir != null);</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">else</span></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; storeDir = dir;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; System.Diagnostics.Debug.Assert(storeDir != null);</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (si.<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>())</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">// In some cases, we were originally opened when CFS</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// was not used, but then we are asked to open doc</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="comment">// stores after the segment has switched to CFS</span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">if</span> (cfsReader == null)</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; cfsReader = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_compound_file_reader.html" title="Class for accessing a compound stream. This class implements a directory, but is limited to only read...">CompoundFileReader</a>(dir, segment + <span class="stringliteral">&quot;.&quot;</span> + <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#ac62101de40ede88b69a11da26567d5a5" title="Extension of compound file ">COMPOUND_FILE_EXTENSION</a>, readBufferSize);</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; storeDir = cfsReader;</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; System.Diagnostics.Debug.Assert(storeDir != null);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">else</span></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; storeDir = dir;</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; System.Diagnostics.Debug.Assert(storeDir != null);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">string</span> storesSegment = si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a50157e62f9ca5280b77493b8f81a3301">DocStoreOffset</a> != - 1 ? si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ab715a0bf3cec14068901e22576a571b5">DocStoreSegment</a> : segment;</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; fieldsReaderOrig = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_fields_reader.html" title="Class responsible for access to stored document fields. It uses &lt;segment&gt;.fdt and &lt;segment&gt;...">FieldsReader</a>(storeDir, storesSegment, fieldInfos, readBufferSize, si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a50157e62f9ca5280b77493b8f81a3301">DocStoreOffset</a>, si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ab29756c79d65d6c453ea88b6da148d0f">docCount</a>);</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; </div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// Verify two sources of &quot;maxDoc&quot; agree:</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">if</span> (si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a50157e62f9ca5280b77493b8f81a3301">DocStoreOffset</a> == - 1 &amp;&amp; fieldsReaderOrig.Size() != si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ab29756c79d65d6c453ea88b6da148d0f">docCount</a>)</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; <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="_index_searcher_8cs.html#abf029fdf5416b36731b7e3e3643f6eb0">CorruptIndexException</a>(<span class="stringliteral">&quot;doc counts differ for segment &quot;</span> + segment + <span class="stringliteral">&quot;: fieldsReader shows &quot;</span> + fieldsReaderOrig.Size() + <span class="stringliteral">&quot; but segmentInfo shows &quot;</span> + si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ab29756c79d65d6c453ea88b6da148d0f">docCount</a>);</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</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">if</span> (fieldInfos.HasVectors())</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// open term vector files only as needed</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; termVectorsReaderOrig = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a>(storeDir, storesSegment, fieldInfos, readBufferSize, si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a50157e62f9ca5280b77493b8f81a3301">DocStoreOffset</a>, si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ab29756c79d65d6c453ea88b6da148d0f">docCount</a>);</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; }</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; }</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="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_infos.html" title="Access to the Fieldable Info file that describes document fields and whether or not they are indexed...">FieldInfos</a> fieldInfos_ForNUnit</div>
<div class="line"><a name="l00374"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_core_readers.html#ad143c2c9381233b7b78ed022785ad613"> 374</a></span>&#160; {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> fieldInfos; }</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; </div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">private</span> <span class="keyword">class </span>FieldsReaderLocal : <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_closeable_thread_local.html" title="Java&#39;s builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dere...">CloseableThreadLocal</a>&lt;FieldsReader&gt;</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">public</span> FieldsReaderLocal(<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> enclosingInstance)</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; {</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; InitBlock(enclosingInstance);</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> InitBlock(SegmentReader enclosingInstance)</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; this.enclosingInstance = enclosingInstance;</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; <span class="keyword">private</span> SegmentReader enclosingInstance;</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">public</span> SegmentReader Enclosing_Instance</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; <span class="keyword">get</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> enclosingInstance;</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">public</span> <span class="comment">/*protected internal*/</span> <span class="keyword">override</span> FieldsReader InitialValue()</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; {</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> (FieldsReader) Enclosing_Instance.core.GetFieldsReaderOrig().Clone();</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; </div>
<div class="line"><a name="l00405"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html"> 405</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a></div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> refCount = 1;</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; </div>
<div class="line"><a name="l00409"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html#a11a3ffe76f9138d846f2f8ccf1cd7f82"> 409</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> System.String ToString()</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; {</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;refcount: &quot;</span> + refCount;</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; </div>
<div class="line"><a name="l00414"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html#aa7c8f4991f92467143c5ce977ecab342"> 414</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> RefCount()</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"> 416</span>&#160; lock (<span class="keyword">this</span>)</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; <span class="keywordflow">return</span> refCount;</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; </div>
<div class="line"><a name="l00422"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html#a29c9e338a8121096eeb3e8396bd63d2e"> 422</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> IncRef()</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; lock (<span class="keyword">this</span>)</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; System.Diagnostics.Debug.Assert(refCount &gt; 0);</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; refCount++;</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> refCount;</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"> 431</span>&#160; </div>
<div class="line"><a name="l00432"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html#a29b028cff8fdf1c8de8412f8a7ddff5e"> 432</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">int</span> DecRef()</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; {</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; System.Diagnostics.Debug.Assert(refCount &gt; 0);</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; refCount--;</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> refCount;</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; </div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; </div>
<div class="line"><a name="l00451"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html"> 451</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> sealed <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html" title="Byte[] referencing is used because a new norm object needs to be created for each clone...">Norm</a> : System.ICloneable</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> InitBlock(<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> enclosingInstance)</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; this.enclosingInstance = enclosingInstance;</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; <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> enclosingInstance;</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keyword">public</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> Enclosing_Instance</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_segment_reader_1_1_norm.html#a9fde14b033bddd5f2d29323aefd53103"> 459</a></span>&#160; {</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">return</span> enclosingInstance;</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"> 465</span>&#160; }</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">internal</span> <span class="comment">/*private*/</span> <span class="keywordtype">int</span> refCount = 1;</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; </div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// If this instance is a clone, the originalNorm</span></div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="comment">// references the Norm that has a real open IndexInput:</span></div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html" title="Byte[] referencing is used because a new norm object needs to be created for each clone...">Norm</a> origNorm;</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="keyword">private</span> <a class="code" href="_byte_slice_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee">IndexInput</a> in_Renamed;</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keyword">private</span> readonly <span class="keywordtype">long</span> normSeek;</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="comment">// null until bytes is set</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a> bytesRef;</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keyword">internal</span> <span class="comment">/*private*/</span> byte[] bytes;</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keyword">internal</span> <span class="comment">/*private*/</span> <span class="keywordtype">bool</span> dirty;</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keyword">internal</span> <span class="comment">/*private*/</span> <span class="keywordtype">int</span> number;</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keyword">internal</span> <span class="comment">/*private*/</span> <span class="keywordtype">bool</span> rollbackDirty;</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; </div>
<div class="line"><a name="l00482"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#aa6510e8a6c00d05f59bf1174d0b3b798"> 482</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html" title="Byte[] referencing is used because a new norm object needs to be created for each clone...">Norm</a>(<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> enclosingInstance, <a class="code" href="_byte_slice_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee">IndexInput</a> in_Renamed, <span class="keywordtype">int</span> number, <span class="keywordtype">long</span> normSeek)</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; InitBlock(enclosingInstance);</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; this.in_Renamed = in_Renamed;</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; this.number = number;</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; this.normSeek = normSeek;</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; </div>
<div class="line"><a name="l00490"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a3bdf4a791379f35e49fb877499e22323"> 490</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> IncRef()</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; lock (<span class="keyword">this</span>)</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; System.Diagnostics.Debug.Assert(refCount &gt; 0 &amp;&amp;(origNorm == null || origNorm.refCount &gt; 0));</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; refCount++;</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; }</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; <span class="keyword">private</span> <span class="keywordtype">void</span> CloseInput()</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="keywordflow">if</span> (in_Renamed != null)</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (in_Renamed != Enclosing_Instance.singleNormStream)</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="comment">// It&#39;s private to us -- just close it</span></div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; in_Renamed.Dispose();</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// We are sharing this with others -- decRef and</span></div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">// maybe close the shared norm stream</span></div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">if</span> (Enclosing_Instance.singleNormRef.DecRef() == 0)</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; Enclosing_Instance.singleNormStream.Dispose();</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; Enclosing_Instance.singleNormStream = null;</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; </div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; in_Renamed = null;</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; }</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; </div>
<div class="line"><a name="l00523"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a48c11d94451c507746540b20aa17e2b5"> 523</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> DecRef()</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; {</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; System.Diagnostics.Debug.Assert(refCount &gt; 0 &amp;&amp;(origNorm == null || origNorm.refCount &gt; 0));</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> (--refCount == 0)</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">if</span> (origNorm != null)</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; origNorm.DecRef();</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; origNorm = null;</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">else</span></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; CloseInput();</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; </div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">if</span> (bytes != null)</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; {</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; System.Diagnostics.Debug.Assert(bytesRef != null);</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; bytesRef.DecRef();</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; bytes = null;</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; bytesRef = null;</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">else</span></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; System.Diagnostics.Debug.Assert(bytesRef == null);</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; }</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">// Load bytes but do not cache them if they were not</span></div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// already cached</span></div>
<div class="line"><a name="l00558"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a40d5fc681fb165d496d77fde8455ded5"> 558</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> Bytes(byte[] bytesOut, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> len)</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; lock (<span class="keyword">this</span>)</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; System.Diagnostics.Debug.Assert(refCount &gt; 0 &amp;&amp;(origNorm == null || origNorm.refCount &gt; 0));</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">if</span> (bytes != null)</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// Already cached -- copy from cache:</span></div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; System.Diagnostics.Debug.Assert(len &lt;= Enclosing_Instance.MaxDoc);</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; Array.Copy(bytes, 0, bytesOut, offset, len);</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">else</span></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; <span class="comment">// Not cached</span></div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">if</span> (origNorm != null)</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="comment">// Ask origNorm to load</span></div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; origNorm.Bytes(bytesOut, offset, len);</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// We are orig -- read ourselves from disk:</span></div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; lock (in_Renamed)</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; {</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; in_Renamed.Seek(normSeek);</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; in_Renamed.ReadBytes(bytesOut, offset, len, <span class="keyword">false</span>);</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; }</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; }</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; </div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">// Load &amp; cache full bytes array. Returns bytes.</span></div>
<div class="line"><a name="l00591"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a585c46d764b2c93a274e794514f8c153"> 591</a></span>&#160; <span class="keyword">public</span> byte[] Bytes()</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; lock (<span class="keyword">this</span>)</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; System.Diagnostics.Debug.Assert(refCount &gt; 0 &amp;&amp;(origNorm == null || origNorm.refCount &gt; 0));</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">if</span> (bytes == null)</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; {</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">// value not yet read</span></div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; System.Diagnostics.Debug.Assert(bytesRef == null);</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">if</span> (origNorm != null)</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="comment">// Ask origNorm to load so that for a series of</span></div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="comment">// reopened readers we share a single read-only</span></div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// byte[]</span></div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; bytes = origNorm.Bytes();</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; bytesRef = origNorm.bytesRef;</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; bytesRef.IncRef();</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; </div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// Once we&#39;ve loaded the bytes we no longer need</span></div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// origNorm:</span></div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; origNorm.DecRef();</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; origNorm = null;</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">else</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; <span class="comment">// We are the origNorm, so load the bytes for real</span></div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// ourself:</span></div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordtype">int</span> count = Enclosing_Instance.MaxDoc;</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; bytes = <span class="keyword">new</span> byte[count];</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">// Since we are orig, in must not be null</span></div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; System.Diagnostics.Debug.Assert(in_Renamed != null);</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// Read from disk.</span></div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; lock (in_Renamed)</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; in_Renamed.Seek(normSeek);</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; in_Renamed.ReadBytes(bytes, 0, count, <span class="keyword">false</span>);</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; </div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; bytesRef = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a>();</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; CloseInput();</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"> 636</span>&#160; <span class="keywordflow">return</span> bytes;</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="comment">// Only for testing</span></div>
<div class="line"><a name="l00641"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a2ad5b035780d439f31c7402d0feaf243"> 641</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a> BytesRef()</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">return</span> bytesRef;</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; </div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="comment">// Called if we intend to change a norm value. We make a</span></div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="comment">// private copy of bytes if it&#39;s shared with others:</span></div>
<div class="line"><a name="l00648"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a9a48125a9df3781f0fce678903923c10"> 648</a></span>&#160; <span class="keyword">public</span> byte[] CopyOnWrite()</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; System.Diagnostics.Debug.Assert(refCount &gt; 0 &amp;&amp;(origNorm == null || origNorm.refCount &gt; 0));</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; Bytes();</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; System.Diagnostics.Debug.Assert(bytes != null);</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; System.Diagnostics.Debug.Assert(bytesRef != null);</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (bytesRef.RefCount() &gt; 1)</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"> 658</span>&#160; <span class="comment">// I cannot be the origNorm for another norm</span></div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="comment">// instance if I&#39;m being changed. Ie, only the</span></div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="comment">// &quot;head Norm&quot; can be changed:</span></div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; System.Diagnostics.Debug.Assert(refCount == 1);</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a> oldRef = bytesRef;</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; bytes = Enclosing_Instance.CloneNormBytes(bytes);</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; bytesRef = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html">Ref</a>();</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; oldRef.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html#a29b028cff8fdf1c8de8412f8a7ddff5e">DecRef</a>();</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; dirty = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">return</span> bytes;</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</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="comment">// Returns a copy of this Norm instance that shares</span></div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="comment">// IndexInput &amp; bytes with the original one</span></div>
<div class="line"><a name="l00674"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a44ad13ab73b8348367710be396f4ab71"> 674</a></span>&#160; <span class="keyword">public</span> System.Object Clone()</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; lock (<span class="keyword">this</span>) <span class="comment">//LUCENENET-375</span></div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; System.Diagnostics.Debug.Assert(refCount &gt; 0 &amp;&amp; (origNorm == null || origNorm.refCount &gt; 0));</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html" title="Byte[] referencing is used because a new norm object needs to be created for each clone...">Norm</a> clone;</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; clone = (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html" title="Byte[] referencing is used because a new norm object needs to be created for each clone...">Norm</a>)base.MemberwiseClone();</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">catch</span> (System.Exception cnse)</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// Cannot happen</span></div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.SystemException(<span class="stringliteral">&quot;unexpected CloneNotSupportedException&quot;</span>, cnse);</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; clone.refCount = 1;</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (bytes != null)</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; System.Diagnostics.Debug.Assert(bytesRef != null);</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; System.Diagnostics.Debug.Assert(origNorm == null);</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// Clone holds a reference to my bytes:</span></div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; clone.bytesRef.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_ref.html#a29c9e338a8121096eeb3e8396bd63d2e">IncRef</a>();</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="keywordflow">else</span></div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; {</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; System.Diagnostics.Debug.Assert(bytesRef == null);</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span> (origNorm == null)</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="comment">// I become the origNorm for the clone:</span></div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; clone.origNorm = <span class="keyword">this</span>;</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; clone.origNorm.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a3bdf4a791379f35e49fb877499e22323">IncRef</a>();</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="comment">// Only the origNorm will actually readBytes from in:</span></div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; clone.in_Renamed = null;</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">return</span> clone;</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</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; <span class="comment">// Flush all pending changes to the next generation</span></div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="comment">// separate norms file.</span></div>
<div class="line"><a name="l00720"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#adea3e4b53ab43964ce5575f93a15aa46"> 720</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> ReWrite(<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> si)</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; System.Diagnostics.Debug.Assert(refCount &gt; 0 &amp;&amp; (origNorm == null || origNorm.refCount &gt; 0), <span class="stringliteral">&quot;refCount=&quot;</span> + refCount + <span class="stringliteral">&quot; origNorm=&quot;</span> + origNorm);</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">// NOTE: norms are re-written in regular directory, not cfs</span></div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; si.AdvanceNormGen(this.number);</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordtype">string</span> normFileName = si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a634b0dcc0e3f108f0830f861303cca8a" title="Get the file name for the norms file for this field.">GetNormFileName</a>(this.number);</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="_byte_slice_reader_8cs.html#ade6c9dd9318ff9ca227f26d89b0ad2e5">IndexOutput</a> @out = enclosingInstance.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aa43d2c6fe7730b436470d5b6cf7fb0e6" title="Returns the directory this index resides in. ">Directory</a>().CreateOutput(normFileName);</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; @out.WriteBytes(bytes, enclosingInstance.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a568e19b9051130238c27ba662e23577e">MaxDoc</a>);</div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; } <span class="keywordflow">finally</span> {</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; @out.Close();</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; success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">finally</span></div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; {</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; {</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">try</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; enclosingInstance.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aa43d2c6fe7730b436470d5b6cf7fb0e6" title="Returns the directory this index resides in. ">Directory</a>().DeleteFile(normFileName);</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">catch</span> (Exception)</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; {</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="comment">// suppress this so we keep throwing the</span></div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="comment">// original exception</span></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; }</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; this.dirty = <span class="keyword">false</span>;</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"> 755</span>&#160; }</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; </div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keyword">internal</span> System.Collections.Generic.IDictionary&lt;string, Norm&gt; norms = <span class="keyword">new</span> HashMap&lt;string, Norm&gt;();</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</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_segment_reader.html#a40267dbe995c00bf0e3eaf66d72a4bba"> 761</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</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> Get(<span class="keywordtype">bool</span> readOnly, <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> si, <span class="keywordtype">int</span> termInfosIndexDivisor)</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">return</span> Get(readOnly, si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a77fa20e4bba0bfcc0212378685c1b353">dir</a>, si, <a class="code" href="_compound_file_reader_8cs.html#a4770f48c7bfb99d5245f65069d5ff4e0">BufferedIndexInput</a>.BUFFER_SIZE, <span class="keyword">true</span>, termInfosIndexDivisor);</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; </div>
<div class="line"><a name="l00768"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#ab63c3946aa4ca2399c9383f73444c873"> 768</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</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> Get(<span class="keywordtype">bool</span> readOnly, <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir, <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> si, <span class="keywordtype">int</span> readBufferSize, <span class="keywordtype">bool</span> doOpenStores, <span class="keywordtype">int</span> termInfosIndexDivisor)</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; {</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</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> instance = readOnly ? <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_read_only_segment_reader.html">ReadOnlySegmentReader</a>() : <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>();</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; instance.readOnly = readOnly;</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; instance.si = si;</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; instance.readBufferSize = readBufferSize;</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; </div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; </div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">try</span></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; instance.core = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_core_readers.html">CoreReaders</a>(instance, dir, si, readBufferSize, termInfosIndexDivisor);</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keywordflow">if</span> (doOpenStores)</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; instance.core.OpenDocStores(si);</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; instance.LoadDeletedDocs();</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; instance.OpenNorms(instance.core.cfsDir, readBufferSize);</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; success = <span class="keyword">true</span>;</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; <span class="keywordflow">finally</span></div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; </div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="comment">// With lock-less commits, it&#39;s entirely possible (and</span></div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">// fine) to hit a FileNotFound exception above. In</span></div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="comment">// this case, we want to explicitly close any subset</span></div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">// of things that were opened so that we don&#39;t have to</span></div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="comment">// wait for a GC to do so.</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; {</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; instance.DoClose();</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; }</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="keywordflow">return</span> instance;</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; }</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; <span class="keyword">internal</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> OpenDocStores()</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; core.OpenDocStores(si);</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;</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> CheckDeletedCounts()</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; {</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordtype">int</span> recomputedCount = deletedDocs.GetRecomputedCount();</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; System.Diagnostics.Debug.Assert(deletedDocs.Count() == recomputedCount, <span class="stringliteral">&quot;deleted count=&quot;</span> + deletedDocs.Count() + <span class="stringliteral">&quot; vs recomputed count=&quot;</span> + recomputedCount);</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; System.Diagnostics.Debug.Assert(si.GetDelCount() == recomputedCount, <span class="stringliteral">&quot;delete count mismatch: info=&quot;</span> + si.GetDelCount() + <span class="stringliteral">&quot; vs BitVector=&quot;</span> + recomputedCount);</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; <span class="comment">// Verify # deletes does not exceed maxDoc for this</span></div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="comment">// segment:</span></div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; System.Diagnostics.Debug.Assert(si.GetDelCount() &lt;= MaxDoc, <span class="stringliteral">&quot;delete count mismatch: &quot;</span> + recomputedCount + <span class="stringliteral">&quot;) exceeds max doc (&quot;</span> + MaxDoc + <span class="stringliteral">&quot;) for segment &quot;</span> + si.name);</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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"> 824</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> LoadDeletedDocs()</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; <span class="comment">// NOTE: the bitvector is stored using the regular directory, not cfs</span></div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="comment">//if(HasDeletions(si))</span></div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">if</span> (si.HasDeletions())</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; {</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; deletedDocs = <span class="keyword">new</span> <a class="code" href="_all_term_docs_8cs.html#a3dd76cb0375a575afa01f10d189b6768">BitVector</a>(<a class="code" href="namespace_spell_checker_1_1_net_1_1_search_1_1_spell.html#a09ca88ecfd50bf7b75997e3fe8df6698">Directory</a>(), si.GetDelFileName());</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; deletedDocsRef = <span class="keyword">new</span> Ref();</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; System.Diagnostics.Debug.Assert(CheckDeletedCounts());</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">else</span> </div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; System.Diagnostics.Debug.Assert(si.GetDelCount() == 0);</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="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">virtual</span> byte[] CloneNormBytes(byte[] bytes)</div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; {</div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; var cloneBytes = <span class="keyword">new</span> byte[bytes.Length];</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; Array.Copy(bytes, 0, cloneBytes, 0, bytes.Length);</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">return</span> cloneBytes;</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="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">virtual</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html" title="Optimized implementation of a vector of bits. This is more-or-less like java.util.BitSet, but also includes the following: a count() method, which efficiently computes the number of one bits; optimized read from and write to disk; inlinable get() method; store and load, as bit set or d-gaps, depending on sparseness; ">BitVector</a> CloneDeletedDocs(<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html" title="Optimized implementation of a vector of bits. This is more-or-less like java.util.BitSet, but also includes the following: a count() method, which efficiently computes the number of one bits; optimized read from and write to disk; inlinable get() method; store and load, as bit set or d-gaps, depending on sparseness; ">BitVector</a> bv)</div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; {</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html" title="Optimized implementation of a vector of bits. This is more-or-less like java.util.BitSet, but also includes the following: a count() method, which efficiently computes the number of one bits; optimized read from and write to disk; inlinable get() method; store and load, as bit set or d-gaps, depending on sparseness; ">BitVector</a>) bv.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html#abd024c86a9b82d44874c550ed0424e77">Clone</a>();</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; </div>
<div class="line"><a name="l00861"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a3c19d57988a3adcb3faabac2371776c5"> 861</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> System.Object Clone()</div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; {</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; lock (<span class="keyword">this</span>)</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">try</span></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="keywordflow">return</span> Clone(readOnly); <span class="comment">// Preserve current readOnly</span></div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; }</div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">catch</span> (System.Exception ex)</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; {</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.SystemException(ex.Message, ex);</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; }</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; </div>
<div class="line"><a name="l00876"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a7c287b754de1fe19063138b82a204a33"> 876</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="l00877"></a><span class="lineno"> 877</span>&#160; {</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; {</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">return</span> ReopenSegment(si, <span class="keyword">true</span>, openReadOnly);</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; }</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; }</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; </div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</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> ReopenSegment(<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> si, <span class="keywordtype">bool</span> doClone, <span class="keywordtype">bool</span> openReadOnly)</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; {</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keywordtype">bool</span> deletionsUpToDate = (this.si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a2bbfa314232195517980bc4e4f52fc71">HasDeletions</a>() == si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a2bbfa314232195517980bc4e4f52fc71">HasDeletions</a>()) &amp;&amp; (!si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a2bbfa314232195517980bc4e4f52fc71">HasDeletions</a>() || this.si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a91e0f63a9d26e860fe594b34dadc2f69">GetDelFileName</a>().Equals(si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a91e0f63a9d26e860fe594b34dadc2f69">GetDelFileName</a>()));</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keywordtype">bool</span> normsUpToDate = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; </div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keywordtype">bool</span>[] fieldNormsChanged = <span class="keyword">new</span> <span class="keywordtype">bool</span>[core.fieldInfos.Size()];</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordtype">int</span> fieldCount = core.fieldInfos.Size();</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; fieldCount; i++)</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; {</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">if</span> (!this.si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a634b0dcc0e3f108f0830f861303cca8a" title="Get the file name for the norms file for this field.">GetNormFileName</a>(i).Equals(si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a634b0dcc0e3f108f0830f861303cca8a" title="Get the file name for the norms file for this field.">GetNormFileName</a>(i)))</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; {</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; normsUpToDate = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; fieldNormsChanged[i] = <span class="keyword">true</span>;</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; <span class="comment">// if we&#39;re cloning we need to run through the reopenSegment logic</span></div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="comment">// also if both old and new readers aren&#39;t readonly, we clone to avoid sharing modifications</span></div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">if</span> (normsUpToDate &amp;&amp; deletionsUpToDate &amp;&amp; !doClone &amp;&amp; openReadOnly &amp;&amp; readOnly)</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; {</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; }</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; </div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="comment">// When cloning, the incoming SegmentInfos should not</span></div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="comment">// have any changes in it:</span></div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; System.Diagnostics.Debug.Assert(!doClone ||(normsUpToDate &amp;&amp; deletionsUpToDate));</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; </div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="comment">// clone reader</span></div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; SegmentReader clone = openReadOnly ? <span class="keyword">new</span> ReadOnlySegmentReader() : new SegmentReader();</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; </div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="keywordflow">try</span></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; core.IncRef();</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; clone.core = core;</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; clone.readOnly = openReadOnly;</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; clone.si = si;</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; clone.readBufferSize = readBufferSize;</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="keywordflow">if</span> (!openReadOnly &amp;&amp; hasChanges)</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; {</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="comment">// My pending changes transfer to the new reader</span></div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; clone.pendingDeleteCount = pendingDeleteCount;</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; clone.deletedDocsDirty = deletedDocsDirty;</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; clone.normsDirty = normsDirty;</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; clone.hasChanges = hasChanges;</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; hasChanges = <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; </div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">if</span> (doClone)</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; {</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">if</span> (deletedDocs != null)</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; {</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; deletedDocsRef.IncRef();</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; clone.deletedDocs = deletedDocs;</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; clone.deletedDocsRef = deletedDocsRef;</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; }</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; {</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="keywordflow">if</span> (!deletionsUpToDate)</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="comment">// load deleted docs</span></div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; System.Diagnostics.Debug.Assert(clone.deletedDocs == null);</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; clone.LoadDeletedDocs();</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; }</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (deletedDocs != null)</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; {</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; deletedDocsRef.IncRef();</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; clone.deletedDocs = deletedDocs;</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; clone.deletedDocsRef = deletedDocsRef;</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; }</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; </div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; clone.norms = <span class="keyword">new</span> HashMap&lt;string, Norm&gt;();</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; </div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="comment">// Clone norms</span></div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; fieldNormsChanged.Length; i++)</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; </div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="comment">// Clone unchanged norms to the cloned reader</span></div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (doClone || !fieldNormsChanged[i])</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; {</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; System.String curField = core.fieldInfos.FieldInfo(i).name;</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; Norm norm = this.norms[curField];</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">if</span> (norm != null)</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; clone.norms[curField] = (Norm)norm.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html#abd024c86a9b82d44874c550ed0424e77">Clone</a>();</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; }</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; </div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="comment">// If we are not cloning, then this will open anew</span></div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="comment">// any norms that have changed:</span></div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; clone.OpenNorms(si.<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>()?core.GetCFSReader():<a class="code" href="namespace_spell_checker_1_1_net_1_1_search_1_1_spell.html#a09ca88ecfd50bf7b75997e3fe8df6698">Directory</a>(), readBufferSize);</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; success = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordflow">finally</span></div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; {</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordflow">if</span> (!success)</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; <span class="comment">// An exception occured during reopen, we have to decRef the norms</span></div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="comment">// that we incRef&#39;ed already and close singleNormsStream and FieldsReader</span></div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; clone.DecRef();</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; }</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; <span class="keywordflow">return</span> clone;</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; }</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;</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">override</span> <span class="keywordtype">void</span> DoCommit(System.Collections.Generic.IDictionary&lt;<span class="keywordtype">string</span>, <span class="keywordtype">string</span>&gt; commitUserData)</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; {</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <span class="keywordflow">if</span> (hasChanges)</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; {</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; StartCommit();</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; {</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; CommitChanges(commitUserData);</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; success = <span class="keyword">true</span>;</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; <span class="keywordflow">finally</span></div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; {</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keywordflow">if</span> (!success)</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; {</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; RollbackCommit();</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; }</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</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;</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> CommitChanges(System.Collections.Generic.IDictionary&lt;<span class="keywordtype">string</span>, <span class="keywordtype">string</span>&gt; commitUserData)</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; {</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordflow">if</span> (deletedDocsDirty)</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; { <span class="comment">// re-write deleted</span></div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; si.AdvanceDelGen();</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="comment">// We can write directly to the actual name (vs to a</span></div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="comment">// .tmp &amp; renaming it) because the file is not live</span></div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="comment">// until segments file is written:</span></div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordtype">string</span> delFileName = si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a91e0f63a9d26e860fe594b34dadc2f69">GetDelFileName</a>();</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">try</span></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; deletedDocs.Write(<a class="code" href="namespace_spell_checker_1_1_net_1_1_search_1_1_spell.html#a09ca88ecfd50bf7b75997e3fe8df6698">Directory</a>(), delFileName);</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; success = <span class="keyword">true</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; <span class="keywordflow">finally</span></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">if</span> (!success)</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">try</span></div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; {</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <a class="code" href="namespace_spell_checker_1_1_net_1_1_search_1_1_spell.html#a09ca88ecfd50bf7b75997e3fe8df6698">Directory</a>().<a class="code" href="class_lucene_1_1_net_1_1_store_1_1_directory.html#ad3722fbcf237e9b2297d7834b6f09192" title="Removes an existing file in the directory. ">DeleteFile</a>(delFileName);</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; <span class="keywordflow">catch</span> (Exception)</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; {</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">// suppress this so we keep throwing the</span></div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="comment">// original exception</span></div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; }</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; }</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; }</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; si.SetDelCount(si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ac6cdfd5061c63d1a412453150fa7f599">GetDelCount</a>() + pendingDeleteCount);</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; pendingDeleteCount = 0;</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; System.Diagnostics.Debug.Assert(deletedDocs.Count() == si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ac6cdfd5061c63d1a412453150fa7f599">GetDelCount</a>(), <span class="stringliteral">&quot;delete count mismatch during commit: info=&quot;</span> + si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#ac6cdfd5061c63d1a412453150fa7f599">GetDelCount</a>() + <span class="stringliteral">&quot; vs BitVector=&quot;</span> + deletedDocs.Count());</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; }</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keywordflow">else</span></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; System.Diagnostics.Debug.Assert(pendingDeleteCount == 0);</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; }</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; <span class="keywordflow">if</span> (normsDirty)</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; { <span class="comment">// re-write norms</span></div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; si.SetNumFields(core.fieldInfos.Size());</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">foreach</span> (Norm norm <span class="keywordflow">in</span> norms.Values)</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; {</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">if</span> (norm.dirty)</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; norm.ReWrite(si);</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; }</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; deletedDocsDirty = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; normsDirty = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; hasChanges = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; }</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; <span class="keyword">internal</span> <span class="keyword">virtual</span> FieldsReader GetFieldsReader()</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; {</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">return</span> fieldsReaderLocal.Get();</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; </div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</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="l01080"></a><span class="lineno"> 1080</span>&#160; {</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; termVectorsLocal.Close();</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; fieldsReaderLocal.Close();</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="keywordflow">if</span> (deletedDocs != null)</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; {</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; deletedDocsRef.DecRef();</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">// null so if an app hangs on to us we still free most ram</span></div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; deletedDocs = null;</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; }</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; </div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">foreach</span>(Norm norm <span class="keywordflow">in</span> norms.Values)</div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; {</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; norm.DecRef();</div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; }</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keywordflow">if</span> (core != null)</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; core.DecRef();</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; }</div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; }</div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; </div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="comment">//internal static bool HasDeletions(SegmentInfo si)</span></div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="comment">//{</span></div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="comment">// // Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="comment">// return si.HasDeletions();</span></div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="comment">//}</span></div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> HasDeletions</div>
<div class="line"><a name="l01108"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a12bf3b313403b46f8d9824823e319b96"> 1108</a></span>&#160; {</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; {</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">return</span> deletedDocs != null;</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; }</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; <span class="keyword">internal</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> UsesCompoundFile(<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> si)</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; {</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">return</span> si.<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>();</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; </div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="keyword">internal</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> HasSeparateNorms(SegmentInfo si)</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; {</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">return</span> si.HasSeparateNorms();</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; }</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; </div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</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> docNum)</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; {</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="keywordflow">if</span> (deletedDocs == null)</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; {</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; deletedDocs = <span class="keyword">new</span> <a class="code" href="_all_term_docs_8cs.html#a3dd76cb0375a575afa01f10d189b6768">BitVector</a>(MaxDoc);</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; deletedDocsRef = <span class="keyword">new</span> Ref();</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; }</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="comment">// there is more than 1 SegmentReader with a reference to this</span></div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="comment">// deletedDocs BitVector so decRef the current deletedDocsRef,</span></div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="comment">// clone the BitVector, create a new deletedDocsRef</span></div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keywordflow">if</span> (deletedDocsRef.RefCount() &gt; 1)</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; {</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; Ref oldRef = deletedDocsRef;</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; deletedDocs = CloneDeletedDocs(deletedDocs);</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; deletedDocsRef = <span class="keyword">new</span> Ref();</div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; oldRef.DecRef();</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; deletedDocsDirty = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">if</span> (!deletedDocs.GetAndSet(docNum))</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; pendingDeleteCount++;</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; }</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; </div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</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="l01149"></a><span class="lineno"> 1149</span>&#160; {</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; deletedDocsDirty = <span class="keyword">false</span>;</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keywordflow">if</span> (deletedDocs != null)</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; {</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; System.Diagnostics.Debug.Assert(deletedDocsRef != null);</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; deletedDocsRef.DecRef();</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; deletedDocs = null;</div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; deletedDocsRef = null;</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; pendingDeleteCount = 0;</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; si.ClearDelGen();</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; si.SetDelCount(0);</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; }</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; {</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; System.Diagnostics.Debug.Assert(deletedDocsRef == null);</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; System.Diagnostics.Debug.Assert(pendingDeleteCount == 0);</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; }</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; </div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> System.Collections.Generic.IList&lt;<span class="keywordtype">string</span>&gt; Files()</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; {</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">return</span> si.Files();</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; }</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; </div>
<div class="line"><a name="l01173"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a6479d6ac21b8553f970377cb7945ce15"> 1173</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="l01174"></a><span class="lineno"> 1174</span>&#160; {</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keywordflow">return</span> core.GetTermsReader().Terms();</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aa6d05c9be2f67b2e304e241190b87428"> 1179</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> t)</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; EnsureOpen();</div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keywordflow">return</span> core.GetTermsReader().Terms(t);</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; </div>
<div class="line"><a name="l01185"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a991033b186935004cf0d1bdece66cd9b"> 1185</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">virtual</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_infos.html" title="Access to the Fieldable Info file that describes document fields and whether or not they are indexed...">FieldInfos</a> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_infos.html" title="Access to the Fieldable Info file that describes document fields and whether or not they are indexed...">FieldInfos</a>()</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; {</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">return</span> core.fieldInfos;</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; </div>
<div class="line"><a name="l01190"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a3f5657ef64a324882322d3073dd69e73"> 1190</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="l01191"></a><span class="lineno"> 1191</span>&#160; {</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <span class="keywordflow">return</span> GetFieldsReader().Doc(n, fieldSelector);</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; }</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; </div>
<div class="line"><a name="l01196"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a2f913cad242b4acefe2f8665130e2fda"> 1196</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="l01197"></a><span class="lineno"> 1197</span>&#160; {</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; lock (<span class="keyword">this</span>)</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; {</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">return</span> (deletedDocs != null &amp;&amp; deletedDocs.Get(n));</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; }</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; }</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; </div>
<div class="line"><a name="l01204"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aa39cb0552166e0c83509d6c2f94f9ba5"> 1204</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>(<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="l01205"></a><span class="lineno"> 1205</span>&#160; {</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">if</span> (term == null)</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; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_all_term_docs.html">AllTermDocs</a>(<span class="keyword">this</span>);</div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; }</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; {</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">return</span> base.TermDocs(term);</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; </div>
<div class="line"><a name="l01216"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#ab8d1ef7ecc9b0742a7a455cd1087aee9"> 1216</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="l01217"></a><span class="lineno"> 1217</span>&#160; {</div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> SegmentTermDocs(<span class="keyword">this</span>);</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; }</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; </div>
<div class="line"><a name="l01222"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a3adba0756f0da4112b19510066c5215f"> 1222</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="l01223"></a><span class="lineno"> 1223</span>&#160; {</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> SegmentTermPositions(<span class="keyword">this</span>);</div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; }</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; </div>
<div class="line"><a name="l01228"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aad1517ea70be834bf6f8773e4b0db1e9"> 1228</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="l01229"></a><span class="lineno"> 1229</span>&#160; {</div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_info.html" title="A TermInfo is the record of information stored for a term.">TermInfo</a> ti = core.GetTermsReader().Get(t);</div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keywordflow">if</span> (ti != null)</div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keywordflow">return</span> ti.docFreq;</div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; }</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div>
<div class="line"><a name="l01238"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#ad916960cad78563a499cc92d183f4206"> 1238</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="l01239"></a><span class="lineno"> 1239</span>&#160; {</div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordtype">int</span> n = MaxDoc;</div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">if</span> (deletedDocs != null)</div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; n -= deletedDocs.Count();</div>
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">return</span> n;</div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; }</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; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> MaxDoc</div>
<div class="line"><a name="l01248"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a568e19b9051130238c27ba662e23577e"> 1248</a></span>&#160; {</div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keyword">get</span></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="comment">// Don&#39;t call ensureOpen() here (it could affect performance)</span></div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">return</span> si.docCount;</div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; }</div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; }</div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;</div>
<div class="line"><a name="l01258"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a471731dd594fb3ab411940ed69a3510b"> 1258</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> System.Collections.Generic.ICollection&lt;<span class="keywordtype">string</span>&gt; GetFieldNames(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>.FieldOption fieldOption)</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; EnsureOpen();</div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;</div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; System.Collections.Generic.ISet&lt;<span class="keywordtype">string</span>&gt; fieldSet = Lucene.Net.Support.Compatibility.SetFactory.CreateHashSet&lt;<span class="keywordtype">string</span>&gt;();</div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; core.fieldInfos.Size(); i++)</div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; {</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_info.html">FieldInfo</a> fi = core.fieldInfos.FieldInfo(i);</div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span> (fieldOption == <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.ALL)</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; fieldSet.Add(fi.name);</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; }</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!fi.isIndexed &amp;&amp; fieldOption == <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.UNINDEXED)</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; fieldSet.Add(fi.name);</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; }</div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fi.omitTermFreqAndPositions &amp;&amp; fieldOption == <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.OMIT_TERM_FREQ_AND_POSITIONS)</div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; {</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; fieldSet.Add(fi.name);</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; }</div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fi.storePayloads &amp;&amp; fieldOption == <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.STORES_PAYLOADS)</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; {</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; fieldSet.Add(fi.name);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fi.isIndexed &amp;&amp; fieldOption == <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.INDEXED)</div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; {</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; fieldSet.Add(fi.name);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fi.isIndexed &amp;&amp; fi.storeTermVector == <span class="keyword">false</span> &amp;&amp; fieldOption == <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.INDEXED_NO_TERMVECTOR)</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; {</div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; fieldSet.Add(fi.name);</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; }</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fi.storeTermVector == <span class="keyword">true</span> &amp;&amp; fi.storePositionWithTermVector == <span class="keyword">false</span> &amp;&amp; fi.storeOffsetWithTermVector == <span class="keyword">false</span> &amp;&amp; fieldOption == <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.TERMVECTOR)</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; fieldSet.Add(fi.name);</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">else</span> <span class="keywordflow">if</span> (fi.isIndexed &amp;&amp; fi.storeTermVector &amp;&amp; fieldOption == <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.INDEXED_WITH_TERMVECTOR)</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; fieldSet.Add(fi.name);</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fi.storePositionWithTermVector &amp;&amp; fi.storeOffsetWithTermVector == <span class="keyword">false</span> &amp;&amp; fieldOption == <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.TERMVECTOR_WITH_POSITION)</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; {</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; fieldSet.Add(fi.name);</div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; }</div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fi.storeOffsetWithTermVector &amp;&amp; fi.storePositionWithTermVector == <span class="keyword">false</span> &amp;&amp; fieldOption == <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.TERMVECTOR_WITH_OFFSET)</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; fieldSet.Add(fi.name);</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="keywordflow">else</span> <span class="keywordflow">if</span> ((fi.storeOffsetWithTermVector &amp;&amp; fi.storePositionWithTermVector) &amp;&amp; fieldOption == <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.TERMVECTOR_WITH_POSITION_OFFSET)</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; fieldSet.Add(fi.name);</div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; }</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; }</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keywordflow">return</span> fieldSet;</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; </div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; </div>
<div class="line"><a name="l01315"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aa271e81b671ae86bc9172f2432f3037b"> 1315</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="l01316"></a><span class="lineno"> 1316</span>&#160; {</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; lock (<span class="keyword">this</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; EnsureOpen();</div>
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keywordflow">return</span> norms.ContainsKey(field);</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; }</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; </div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="comment">// can return null if norms aren&#39;t stored</span></div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">virtual</span> byte[] GetNorms(System.String field)</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; {</div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; lock (<span class="keyword">this</span>)</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; Norm norm = norms[field];</div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <span class="keywordflow">if</span> (norm == null)</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="keywordflow">return</span> null; <span class="comment">// not indexed, or norms not stored</span></div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keywordflow">return</span> norm.Bytes();</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; }</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; <span class="comment">// returns fake norms if norms aren&#39;t available</span></div>
<div class="line"><a name="l01337"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a48c0fc1de6e811bdac4914ad7f8b58c2"> 1337</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> byte[] Norms(System.String field)</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; lock (<span class="keyword">this</span>)</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; EnsureOpen();</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; byte[] bytes = GetNorms(field);</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; <span class="keywordflow">return</span> bytes;</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; }</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; }</div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; </div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</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> doc, System.String field, byte value_Renamed)</div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; {</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; Norm norm = norms[field];</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <span class="keywordflow">if</span> (norm == null)</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="comment">// not an indexed field</span></div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; return ;</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; </div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; normsDirty = <span class="keyword">true</span>;</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; norm.CopyOnWrite()[doc] = value_Renamed; <span class="comment">// set the value</span></div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; }</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; </div>
<div class="line"><a name="l01359"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a89f7b372dadf756b379d07f3bac4ec43"> 1359</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Norms(System.String field, byte[] bytes, <span class="keywordtype">int</span> offset)</div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; {</div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; lock (<span class="keyword">this</span>)</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; EnsureOpen();</div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html" title="Byte[] referencing is used because a new norm object needs to be created for each clone...">Norm</a> norm = norms[field];</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="keywordflow">if</span> (norm == null)</div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; {</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset; i &lt; bytes.Length; i++)</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; {</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; bytes[i] = (byte) <a class="code" href="_more_like_this_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f">DefaultSimilarity</a>.EncodeNorm(1.0f);</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; }</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; return ;</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; }</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; norm.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader_1_1_norm.html#a40d5fc681fb165d496d77fde8455ded5">Bytes</a>(bytes, offset, MaxDoc);</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; }</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; </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; <span class="keyword">private</span> <span class="keywordtype">void</span> OpenNorms(<a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> cfsDir, <span class="keywordtype">int</span> readBufferSize)</div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; {</div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="keywordtype">long</span> nextNormSeek = <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_merger.html" title="The SegmentMerger class combines two or more Segments, represented by an IndexReader (Add...">SegmentMerger</a>.NORMS_HEADER.Length; <span class="comment">//skip header (header unused for now)</span></div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keywordtype">int</span> maxDoc = MaxDoc;</div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; core.fieldInfos.Size(); i++)</div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; {</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_info.html">FieldInfo</a> fi = core.fieldInfos.FieldInfo(i);</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="keywordflow">if</span> (norms.ContainsKey(fi.name))</div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; {</div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <span class="comment">// in case this SegmentReader is being re-opened, we might be able to</span></div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="comment">// reuse some norm instances and skip loading them here</span></div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="keywordflow">continue</span>;</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; <span class="keywordflow">if</span> (fi.isIndexed &amp;&amp; !fi.omitNorms)</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; {</div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> d = <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="l01396"></a><span class="lineno"> 1396</span>&#160; System.String fileName = si.GetNormFileName(fi.number);</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keywordflow">if</span> (!si.HasSeparateNorms(fi.number))</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; {</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; d = cfsDir;</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; }</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="comment">// singleNormFile means multiple norms share this file</span></div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="keywordtype">bool</span> singleNormFile = fileName.EndsWith(<span class="stringliteral">&quot;.&quot;</span> + IndexFileNames.NORMS_EXTENSION);</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; <a class="code" href="_byte_slice_reader_8cs.html#a12195e9150e4d7af469b90ac95cc47ee">IndexInput</a> normInput = null;</div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="keywordtype">long</span> normSeek;</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; <span class="keywordflow">if</span> (singleNormFile)</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; {</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; normSeek = nextNormSeek;</div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">if</span> (singleNormStream == null)</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; {</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; singleNormStream = d.OpenInput(fileName, readBufferSize);</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; singleNormRef = <span class="keyword">new</span> Ref();</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; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; {</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; singleNormRef.IncRef();</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; }</div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="comment">// All norms in the .nrm file can share a single IndexInput since</span></div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="comment">// they are only used in a synchronized context.</span></div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="comment">// If this were to change in the future, a clone could be done here.</span></div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; normInput = singleNormStream;</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; }</div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keywordflow">else</span></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; normSeek = 0;</div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; normInput = d.OpenInput(fileName);</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; </div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; norms[fi.name] = <span class="keyword">new</span> Norm(<span class="keyword">this</span>, normInput, fi.number, normSeek);</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; nextNormSeek += maxDoc; <span class="comment">// increment also if some norms are separate</span></div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; }</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; }</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; }</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; </div>
<div class="line"><a name="l01436"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a53476689bc54e837edde640f9ce8a278"> 1436</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> TermsIndexLoaded()</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; <span class="keywordflow">return</span> core.TermsIndexIsLoaded();</div>
<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; }</div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; </div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <span class="comment">// NOTE: only called from IndexWriter when a near</span></div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <span class="comment">// real-time reader is opened, or applyDeletes is run,</span></div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="comment">// sharing a segment that&#39;s still being merged. This</span></div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="comment">// method is not thread safe, and relies on the</span></div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="comment">// synchronization in IndexWriter</span></div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> LoadTermsIndex(<span class="keywordtype">int</span> termsIndexDivisor)</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; {</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; core.LoadTermsIndex(si, termsIndexDivisor);</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; }</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="comment">// for testing only</span></div>
<div class="line"><a name="l01452"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a85b26b15f3d12aa9c2bbb8a4077f3536"> 1452</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> NormsClosed()</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; {</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keywordflow">if</span> (singleNormStream != 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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; }</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">return</span> norms.Values.All(norm =&gt; norm.refCount &lt;= 0);</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; }</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; <span class="comment">// for testing only</span></div>
<div class="line"><a name="l01462"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a64e808cab73ae1df1e40638cf4ea3d40"> 1462</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> NormsClosed(System.String field)</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">return</span> norms[field].refCount == 0;</div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; }</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; </div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> GetTermVectorsReader()</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; {</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> tvReader = termVectorsLocal.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html#a5fd28799e6417e0bc11206d00bd6c9b2">Get</a>();</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">if</span> (tvReader == null)</div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; {</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> orig = core.GetTermVectorsReaderOrig();</div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; <span class="keywordflow">if</span> (orig == null)</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">return</span> null;</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; <span class="keywordflow">else</span></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">try</span></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; tvReader = (TermVectorsReader) orig.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html#a48b610b58797d38a91acdfd5069d5db0">Clone</a>();</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; }</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="keywordflow">catch</span> (System.Exception)</div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; {</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; }</div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; }</div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; termVectorsLocal.Set(tvReader);</div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; }</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="keywordflow">return</span> tvReader;</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; </div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> TermVectorsReader GetTermVectorsReaderOrig()</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; {</div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">return</span> core.GetTermVectorsReaderOrig();</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; </div>
<div class="line"><a name="l01507"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a66905d2e783d87c8297d760046813269"> 1507</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> docNumber, System.String field)</div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; {</div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <span class="comment">// Check if this field is invalid or has no stored term vector</span></div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_info.html">FieldInfo</a> fi = core.fieldInfos.FieldInfo(field);</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">if</span> (fi == null || !fi.storeTermVector)</div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="keywordflow">return</span> null;</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; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> termVectorsReader = GetTermVectorsReader();</div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">if</span> (termVectorsReader == null)</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="keywordflow">return</span> null;</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="keywordflow">return</span> termVectorsReader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html#a5fd28799e6417e0bc11206d00bd6c9b2">Get</a>(docNumber, field);</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; </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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a0498f6f4cf752d483f818145562aa6eb"> 1523</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="l01524"></a><span class="lineno"> 1524</span>&#160; {</div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_field_info.html">FieldInfo</a> fi = core.fieldInfos.FieldInfo(field);</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <span class="keywordflow">if</span> (fi == null || !fi.storeTermVector)</div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; </div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> termVectorsReader = GetTermVectorsReader();</div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; <span class="keywordflow">if</span> (termVectorsReader == null)</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; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; }</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; termVectorsReader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html#a5fd28799e6417e0bc11206d00bd6c9b2">Get</a>(docNumber, field, mapper);</div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; }</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"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a21f8f31ea7d931a564cdaa498ac582fe"> 1539</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="l01540"></a><span class="lineno"> 1540</span>&#160; {</div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; </div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> termVectorsReader = GetTermVectorsReader();</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keywordflow">if</span> (termVectorsReader == null)</div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; return ;</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; termVectorsReader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html#a5fd28799e6417e0bc11206d00bd6c9b2">Get</a>(docNumber, mapper);</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; }</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; </div>
<div class="line"><a name="l01557"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a4f90851b3f9e26d7b248fd441f0aa040"> 1557</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> docNumber)</div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; {</div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; EnsureOpen();</div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; </div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html">TermVectorsReader</a> termVectorsReader = GetTermVectorsReader();</div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keywordflow">if</span> (termVectorsReader == null)</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; </div>
<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <span class="keywordflow">return</span> termVectorsReader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_vectors_reader.html#a5fd28799e6417e0bc11206d00bd6c9b2">Get</a>(docNumber);</div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; }</div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">string</span> SegmentName</div>
<div class="line"><a name="l01570"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#ad51c621f47065e1fadad6b485b977872"> 1570</a></span>&#160; {</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> core.segment; }</div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; }</div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <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> <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></div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; {</div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> si; }</div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keyword">set</span> { si = value; }</div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; }</div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;</div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> StartCommit()</div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; {</div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; rollbackSegmentInfo = (SegmentInfo)si.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_info.html#a3aef5649d77cef804d2d8be63e8f31d4">Clone</a>();</div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; rollbackHasChanges = hasChanges;</div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; rollbackDeletedDocsDirty = deletedDocsDirty;</div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; rollbackNormsDirty = normsDirty;</div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; rollbackPendingDeleteCount = pendingDeleteCount;</div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <span class="keywordflow">foreach</span>(Norm norm <span class="keywordflow">in</span> norms.Values)</div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; {</div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; norm.rollbackDirty = norm.dirty;</div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; }</div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; }</div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; </div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="keyword">internal</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> RollbackCommit()</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; {</div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; si.Reset(rollbackSegmentInfo);</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; hasChanges = rollbackHasChanges;</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; deletedDocsDirty = rollbackDeletedDocsDirty;</div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; normsDirty = rollbackNormsDirty;</div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; pendingDeleteCount = rollbackPendingDeleteCount;</div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; <span class="keywordflow">foreach</span>(Norm norm <span class="keywordflow">in</span> norms.Values)</div>
<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; {</div>
<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; norm.dirty = norm.rollbackDirty;</div>
<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; }</div>
<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; }</div>
<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; </div>
<div class="line"><a name="l01608"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aa43d2c6fe7730b436470d5b6cf7fb0e6"> 1608</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="l01609"></a><span class="lineno"> 1609</span>&#160; {</div>
<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="comment">// Don&#39;t ensureOpen here -- in certain cases, when a</span></div>
<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; <span class="comment">// cloned/reopened reader needs to commit, it may call</span></div>
<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="comment">// this method on the closed original reader</span></div>
<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="keywordflow">return</span> core.dir;</div>
<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; }</div>
<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; </div>
<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <span class="comment">// This is necessary so that cloned SegmentReaders (which</span></div>
<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <span class="comment">// share the underlying postings data) will map to the</span></div>
<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; <span class="comment">// same entry in the FieldCache. See LUCENE-1579.</span></div>
<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;</div>
<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">object</span> FieldCacheKey</div>
<div class="line"><a name="l01621"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a123ce334de40b844d7a5a14f58e56bd9"> 1621</a></span>&#160; {</div>
<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> core.freqStream; }</div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; }</div>
<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;</div>
<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">object</span> DeletesCacheKey</div>
<div class="line"><a name="l01626"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#af22c234c940b1015351d16994f4efa34"> 1626</a></span>&#160; {</div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> deletedDocs; }</div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; }</div>
<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;</div>
<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;</div>
<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">long</span> UniqueTermCount</div>
<div class="line"><a name="l01632"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#af5ae495b40b502057d77143c7d779bcc"> 1632</a></span>&#160; {</div>
<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> core.GetTermsReader().Size(); }</div>
<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; }</div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;</div>
<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; [Obsolete(<span class="stringliteral">&quot;Remove this when tests are fixed!&quot;</span>)]</div>
<div class="line"><a name="l01642"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#abd7aa54a3a8e5cce04d5f7049c0121a2"> 1642</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">static</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> GetOnlySegmentReader(<a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> dir)</div>
<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; {</div>
<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="keywordflow">return</span> GetOnlySegmentReader(<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>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ad51f1feca975e447b6486d01ed24e1ea" title="Returns an IndexReader reading the index in the given Directory. You should pass readOnly=true, since it gives much better concurrent performance, unless you intend to do write operations (delete documents or change norms) with the reader. ">Open</a>(dir,<span class="keyword">false</span>));</div>
<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; }</div>
<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; </div>
<div class="line"><a name="l01647"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aaa37cbdc670ddda8156d8e6f80a36fae"> 1647</a></span>&#160; <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">static</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> GetOnlySegmentReader(<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)</div>
<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; {</div>
<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; var onlySegmentReader = reader as <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>;</div>
<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="keywordflow">if</span> (onlySegmentReader != null)</div>
<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <span class="keywordflow">return</span> onlySegmentReader;</div>
<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; </div>
<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <span class="keywordflow">if</span> (reader is <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>)</div>
<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; {</div>
<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <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 = reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a80ce49bcb14cf6c51f87404115ab705c" title="Expert: returns the sequential sub readers that this reader is logically composed of...">GetSequentialSubReaders</a>();</div>
<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="keywordflow">if</span> (subReaders.Length != 1)</div>
<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; {</div>
<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.ArgumentException(reader + <span class="stringliteral">&quot; has &quot;</span> + subReaders.Length + <span class="stringliteral">&quot; segments instead of exactly one&quot;</span>);</div>
<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; }</div>
<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; </div>
<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="keywordflow">return</span> (SegmentReader) subReaders[0];</div>
<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; }</div>
<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; </div>
<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.ArgumentException(reader + <span class="stringliteral">&quot; is not a SegmentReader or a single-segment DirectoryReader&quot;</span>);</div>
<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; }</div>
<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;</div>
<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> TermInfosIndexDivisor</div>
<div class="line"><a name="l01668"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a4bb927332bdd2d1bb5aedbd00a01c75f"> 1668</a></span>&#160; {</div>
<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> core.termsIndexDivisor; }</div>
<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; }</div>
<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;</div>
<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <span class="keyword">public</span> System.Collections.Generic.IDictionary&lt;string, Norm&gt; norms_ForNUnit</div>
<div class="line"><a name="l01673"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aa420fe7e25bfb325a73bfc37aa812969"> 1673</a></span>&#160; {</div>
<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> norms; }</div>
<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; }</div>
<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;</div>
<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_bit_vector.html" title="Optimized implementation of a vector of bits. This is more-or-less like java.util.BitSet, but also includes the following: a count() method, which efficiently computes the number of one bits; optimized read from and write to disk; inlinable get() method; store and load, as bit set or d-gaps, depending on sparseness; ">BitVector</a> deletedDocs_ForNUnit</div>
<div class="line"><a name="l01678"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#af615aa0bd7cf9ca7bf154d2f23de1604"> 1678</a></span>&#160; {</div>
<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> deletedDocs; }</div>
<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; }</div>
<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;</div>
<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keyword">public</span> CoreReaders core_ForNUnit</div>
<div class="line"><a name="l01683"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#a7e978b1fa9a344ac86e5fa4adc7435f5"> 1683</a></span>&#160; {</div>
<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> core; }</div>
<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; }</div>
<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;</div>
<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="keyword">public</span> Ref deletedDocsRef_ForNUnit</div>
<div class="line"><a name="l01688"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_index_1_1_segment_reader.html#aff00aed67166ba820f652cba915b3cc4"> 1688</a></span>&#160; {</div>
<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> deletedDocsRef; }</div>
<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; }</div>
<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; }</div>
<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 3 2013 02:12:45 for Lucene.Net by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.3
</small></address>
</body>
</html>