| <!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/Store/SimpleFSDirectory.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 |
|  <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 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 List</span></a></li> |
| <li><a href="globals.html"><span>File 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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </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_0fd6a22b48ba7ca96d8c1554e5fff3e1.html">Store</a></li> </ul> |
| </div> |
| </div><!-- top --> |
| <div class="header"> |
| <div class="headertitle"> |
| <div class="title">SimpleFSDirectory.cs</div> </div> |
| </div><!--header--> |
| <div class="contents"> |
| <a href="_simple_f_s_directory_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> <span class="comment">/* </span></div> |
| <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <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> <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> <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> <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> <span class="comment"> * (the "License"); you may not use this file except in compliance with</span></div> |
| <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <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> <span class="comment"> * </span></div> |
| <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <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> <span class="comment"> * </span></div> |
| <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <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> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div> |
| <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <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> <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> <span class="comment"> * limitations under the License.</span></div> |
| <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> */</span></div> |
| <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div> |
| <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">using</span> System;</div> |
| <div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div> |
| <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">namespace </span>Lucene.Net.Store</div> |
| <div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div> |
| <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  </div> |
| <div class="line"><a name="l00030"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html"> 30</a></span>  <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html" title="A straightforward implementation of FSDirectory using java.io.RandomAccessFile. However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. ">SimpleFSDirectory</a> : <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_f_s_directory.html" title=" Base class for Directory implementations that store index files in the file system. There are currently three core subclasses:">FSDirectory</a></div> |
| <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div> |
| <div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html#acca276ae10d86f22126f2354928b28d0"> 40</a></span>  <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html" title="A straightforward implementation of FSDirectory using java.io.RandomAccessFile. However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. ">SimpleFSDirectory</a>(System.IO.DirectoryInfo path, <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_lock_factory.html" title="Base class for Locking implementation. Directory uses instances of this class to implement locking...">LockFactory</a> lockFactory)</div> |
| <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  : base(path, lockFactory)</div> |
| <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div> |
| <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div> |
| <div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div> |
| <div class="line"><a name="l00051"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html#ad0cdd3ba5912cb56c92e577e03370565"> 51</a></span>  <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html" title="A straightforward implementation of FSDirectory using java.io.RandomAccessFile. However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. ">SimpleFSDirectory</a>(System.IO.DirectoryInfo path) : base(path, null)</div> |
| <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div> |
| <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div> |
| <div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div> |
| <div class="line"><a name="l00056"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html#abd10cb8ca402c6a05fedca5975920131"> 56</a></span>  <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_index_output.html" title="Abstract base class for output to a file in a Directory. A random-access output stream. Used for all Lucene index output operations. ">IndexOutput</a> CreateOutput(System.String name)</div> |
| <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div> |
| <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  InitOutput(name);</div> |
| <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html">SimpleFSIndexOutput</a>(<span class="keyword">new</span> System.IO.FileInfo(System.IO.Path.Combine(internalDirectory.FullName, name)));</div> |
| <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div> |
| <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div> |
| <div class="line"><a name="l00063"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory.html#a81277add65cc14b7a64765d068837b9d"> 63</a></span>  <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_index_input.html" title="Abstract base class for input from a file in a Directory. A random-access input stream. Used for all Lucene index input operations. ">IndexInput</a> OpenInput(System.String name, <span class="keywordtype">int</span> bufferSize)</div> |
| <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div> |
| <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  EnsureOpen();</div> |
| <div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div> |
| <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  Exception e = null;</div> |
| <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">for</span> (var i = 0; i < 10; i++)</div> |
| <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div> |
| <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">try</span></div> |
| <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div> |
| <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> SimpleFSIndexInput(<span class="keyword">new</span> System.IO.FileInfo(</div> |
| <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  System.IO.Path.Combine(internalDirectory.FullName, name)), bufferSize, ReadChunkSize);</div> |
| <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div> |
| <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">catch</span> (System.UnauthorizedAccessException ex)</div> |
| <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div> |
| <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  e = ex;</div> |
| <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  System.Threading.Thread.Sleep(1);</div> |
| <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div> |
| <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> |
| <div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div> |
| <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">throw</span> e;</div> |
| <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div> |
| <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div> |
| <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">class </span>SimpleFSIndexInput : <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_buffered_index_input.html" title="Base implementation class for buffered IndexInput. ">BufferedIndexInput</a></div> |
| <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div> |
| <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="comment">// TODO: This is a bad way to handle memory and disposing</span></div> |
| <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">class </span>Descriptor : System.IO.BinaryReader</div> |
| <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div> |
| <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// remember if the file is open, so that we don't try to close it</span></div> |
| <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// more than once</span></div> |
| <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">volatile</span> <span class="keywordtype">bool</span> isOpen;</div> |
| <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">internal</span> <span class="keywordtype">long</span> position;</div> |
| <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">internal</span> <span class="keywordtype">long</span> length;</div> |
| <div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div> |
| <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">private</span> <span class="keywordtype">bool</span> isDisposed;</div> |
| <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  </div> |
| <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">public</span> Descriptor(<span class="comment">/*FSIndexInput enclosingInstance,*/</span> System.IO.FileInfo file, System.IO.FileAccess mode) </div> |
| <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  : base(new System.IO.FileStream(file.FullName, System.IO.FileMode.Open, mode, System.IO.FileShare.ReadWrite))</div> |
| <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div> |
| <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  isOpen = <span class="keyword">true</span>;</div> |
| <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  length = file.Length;</div> |
| <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div> |
| <div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div> |
| <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">protected</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div> |
| <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div> |
| <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (isDisposed) <span class="keywordflow">return</span>;</div> |
| <div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div> |
| <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">if</span> (disposing)</div> |
| <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div> |
| <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> (isOpen)</div> |
| <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div> |
| <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  isOpen = <span class="keyword">false</span>;</div> |
| <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div> |
| <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div> |
| <div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> |
| <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  isDisposed = <span class="keyword">true</span>;</div> |
| <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  base.Dispose(disposing);</div> |
| <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div> |
| <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div> |
| <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  ~Descriptor()</div> |
| <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div> |
| <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">try</span></div> |
| <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div> |
| <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  Dispose(<span class="keyword">false</span>);</div> |
| <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div> |
| <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">finally</span></div> |
| <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div> |
| <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div> |
| <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div> |
| <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div> |
| <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  </div> |
| <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">protected</span> <span class="keyword">internal</span> Descriptor file;</div> |
| <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">internal</span> <span class="keywordtype">bool</span> isClone;</div> |
| <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">private</span> <span class="keywordtype">bool</span> isDisposed;</div> |
| <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="comment">// LUCENE-1566 - maximum read length on a 32bit JVM to prevent incorrect OOM </span></div> |
| <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keywordtype">int</span> chunkSize;</div> |
| <div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div> |
| <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">public</span> SimpleFSIndexInput(System.IO.FileInfo path, <span class="keywordtype">int</span> bufferSize, <span class="keywordtype">int</span> chunkSize)</div> |
| <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  : base(bufferSize)</div> |
| <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div> |
| <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  file = <span class="keyword">new</span> Descriptor(path, System.IO.FileAccess.Read);</div> |
| <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  this.chunkSize = chunkSize;</div> |
| <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div> |
| <div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div> |
| <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> ReadInternal(byte[] b, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> len)</div> |
| <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div> |
| <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  lock (file)</div> |
| <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  {</div> |
| <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordtype">long</span> position = FilePointer;</div> |
| <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span> (position != file.position)</div> |
| <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  {</div> |
| <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  file.BaseStream.Seek(position, System.IO.SeekOrigin.Begin);</div> |
| <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  file.position = position;</div> |
| <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div> |
| <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordtype">int</span> total = 0;</div> |
| <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  </div> |
| <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">try</span></div> |
| <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div> |
| <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">do</span> </div> |
| <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div> |
| <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordtype">int</span> readLength;</div> |
| <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (total + chunkSize > len)</div> |
| <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div> |
| <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  readLength = len - total;</div> |
| <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div> |
| <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">else</span></div> |
| <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div> |
| <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">// LUCENE-1566 - work around JVM Bug by breaking very large reads into chunks</span></div> |
| <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  readLength = chunkSize;</div> |
| <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div> |
| <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">int</span> i = file.Read(b, offset + total, readLength);</div> |
| <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">if</span> (i == - 1)</div> |
| <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  {</div> |
| <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> System.IO.IOException(<span class="stringliteral">"read past EOF"</span>);</div> |
| <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div> |
| <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  file.position += i;</div> |
| <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  total += i;</div> |
| <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div> |
| <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">while</span> (total < len);</div> |
| <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div> |
| <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">catch</span> (System.OutOfMemoryException e)</div> |
| <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  {</div> |
| <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="comment">// propagate OOM up and add a hint for 32bit VM Users hitting the bug</span></div> |
| <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// with a large chunk size in the fast path.</span></div> |
| <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  System.OutOfMemoryException outOfMemoryError = <span class="keyword">new</span> System.OutOfMemoryException(<span class="stringliteral">"OutOfMemoryError likely caused by the Sun VM Bug described in "</span> + <span class="stringliteral">"https://issues.apache.org/jira/browse/LUCENE-1566; try calling FSDirectory.setReadChunkSize "</span> + <span class="stringliteral">"with a a value smaller than the current chunks size ("</span> + chunkSize + <span class="stringliteral">")"</span>, e);</div> |
| <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">throw</span> outOfMemoryError;</div> |
| <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div> |
| <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div> |
| <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div> |
| <div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div> |
| <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">protected</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div> |
| <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div> |
| <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> (isDisposed) <span class="keywordflow">return</span>;</div> |
| <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">if</span> (disposing)</div> |
| <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div> |
| <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="comment">// only close the file if this is not a clone</span></div> |
| <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">if</span> (!isClone && file != null)</div> |
| <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div> |
| <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  file.Close();</div> |
| <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  file = null;</div> |
| <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div> |
| <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div> |
| <div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div> |
| <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  isDisposed = <span class="keyword">true</span>;</div> |
| <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div> |
| <div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div> |
| <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> SeekInternal(<span class="keywordtype">long</span> position)</div> |
| <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div> |
| <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div> |
| <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div> |
| <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">long</span> Length()</div> |
| <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div> |
| <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">return</span> file.length;</div> |
| <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  }</div> |
| <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  </div> |
| <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">public</span> <span class="keyword">override</span> System.Object Clone()</div> |
| <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div> |
| <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  SimpleFSIndexInput clone = (SimpleFSIndexInput) base.Clone();</div> |
| <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  clone.isClone = <span class="keyword">true</span>;</div> |
| <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> clone;</div> |
| <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div> |
| <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  </div> |
| <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">public</span> <span class="comment">/*internal*/</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> IsFDValid()</div> |
| <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div> |
| <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">return</span> file.BaseStream != null;</div> |
| <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div> |
| <div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div> |
| <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">public</span> <span class="keywordtype">bool</span> isClone_ForNUnit</div> |
| <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  {</div> |
| <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">get</span> { <span class="keywordflow">return</span> isClone; }</div> |
| <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div> |
| <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div> |
| <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  </div> |
| <div class="line"><a name="l00239"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html"> 239</a></span>  <span class="comment">/*protected internal*/</span> <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html">SimpleFSIndexOutput</a>:<a class="code" href="class_lucene_1_1_net_1_1_store_1_1_buffered_index_output.html" title="Base implementation class for buffered IndexOutput. ">BufferedIndexOutput</a></div> |
| <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  {</div> |
| <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">internal</span> System.IO.FileStream file = null;</div> |
| <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  </div> |
| <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// remember if the file is open, so that we don't try to close it</span></div> |
| <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// more than once</span></div> |
| <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keyword">private</span> <span class="keyword">volatile</span> <span class="keywordtype">bool</span> isOpen;</div> |
| <div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div> |
| <div class="line"><a name="l00247"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html#a4aa0f88a127ce5ad330552a379416f81"> 247</a></span>  <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html">SimpleFSIndexOutput</a>(System.IO.FileInfo path)</div> |
| <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  {</div> |
| <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  file = <span class="keyword">new</span> System.IO.FileStream(path.FullName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);</div> |
| <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  isOpen = <span class="keyword">true</span>;</div> |
| <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }</div> |
| <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  </div> |
| <div class="line"><a name="l00254"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html#a69d6dbd37575dd068a3db8ae3e624ef1"> 254</a></span>  <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> FlushBuffer(byte[] b, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> size)</div> |
| <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div> |
| <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  file.Write(b, offset, size);</div> |
| <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">// {{dougsale-2.4.0}}</span></div> |
| <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// FSIndexOutput.Flush</span></div> |
| <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// When writing frequently with small amounts of data, the data isn't flushed to disk.</span></div> |
| <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment">// Thus, attempting to read the data soon after this method is invoked leads to</span></div> |
| <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="comment">// BufferedIndexInput.Refill() throwing an IOException for reading past EOF.</span></div> |
| <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">// Test\Index\TestDoc.cs demonstrates such a situation.</span></div> |
| <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">// Forcing a flush here prevents said issue.</span></div> |
| <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="comment">// {{DIGY 2.9.0}}</span></div> |
| <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">// This code is not available in Lucene.Java 2.9.X.</span></div> |
| <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="comment">// Can there be a indexing-performance problem?</span></div> |
| <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  file.<a class="code" href="class_lucene_1_1_net_1_1_store_1_1_buffered_index_output.html#a797a0cba22cecb096a18f169012aa502" title="Forces any buffered output to be written. ">Flush</a>();</div> |
| <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div> |
| <div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div> |
| <div class="line"><a name="l00270"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html#a4bd9d7004cd146ab3747d72d4705dd52"> 270</a></span>  <span class="keyword">protected</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div> |
| <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div> |
| <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="comment">// only close the file if it has not been closed yet</span></div> |
| <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">if</span> (isOpen)</div> |
| <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  {</div> |
| <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div> |
| <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">try</span></div> |
| <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  {</div> |
| <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  base.Dispose(disposing);</div> |
| <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  success = <span class="keyword">true</span>;</div> |
| <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div> |
| <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">finally</span></div> |
| <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  {</div> |
| <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  isOpen = <span class="keyword">false</span>;</div> |
| <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!success)</div> |
| <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div> |
| <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">try</span></div> |
| <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  {</div> |
| <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  file.Dispose();</div> |
| <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  }</div> |
| <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">catch</span> (System.Exception)</div> |
| <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  {</div> |
| <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="comment">// Suppress so we don't mask original exception</span></div> |
| <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div> |
| <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div> |
| <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">else</span></div> |
| <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  file.Dispose();</div> |
| <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  }</div> |
| <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div> |
| <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div> |
| <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  </div> |
| <div class="line"><a name="l00302"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html#a53f65aa11f755e3e32b673e8059b8d63"> 302</a></span>  <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Seek(<span class="keywordtype">long</span> pos)</div> |
| <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div> |
| <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  base.Seek(pos);</div> |
| <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  file.Seek(pos, System.IO.SeekOrigin.Begin);</div> |
| <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div> |
| <div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div> |
| <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">long</span> Length</div> |
| <div class="line"><a name="l00309"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html#a4287a5ebff1f1ec3e5b98b95e4ad0d8a"> 309</a></span>  {</div> |
| <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">get</span> { <span class="keywordflow">return</span> file.Length; }</div> |
| <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div> |
| <div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div> |
| <div class="line"><a name="l00313"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_store_1_1_simple_f_s_directory_1_1_simple_f_s_index_output.html#ada00ba7c68416cadf670b5b0db7e25fc"> 313</a></span>  <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> SetLength(<span class="keywordtype">long</span> length)</div> |
| <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  {</div> |
| <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  file.SetLength(length);</div> |
| <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div> |
| <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div> |
| <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div> |
| <div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div> |
| </div><!-- fragment --></div><!-- contents --> |
| <!-- start footer part --> |
| <hr class="footer"/><address class="footer"><small> |
| Generated on Thu Jan 3 2013 02:12:46 for Lucene.Net by  <a href="http://www.doxygen.org/index.html"> |
| <img class="footer" src="doxygen.png" alt="doxygen"/> |
| </a> 1.8.3 |
| </small></address> |
| </body> |
| </html> |