blob: 8668d49d9b3b06d1a6cb6756e910875abad8d56a [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3"/>
<title>Lucene.Net: contrib/Analyzers/Filters/ChainedFilter.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="lucene-net-icon-128x128.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">Lucene.Net
&#160;<span id="projectnumber">3.0.3</span>
</div>
<div id="projectbrief">Lucene.Net is a .NET port of the Java Lucene Indexing Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="Index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Packages</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Properties</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_3a8d697be1e2feab9f01acc78e9570fb.html">contrib</a></li><li class="navelem"><a class="el" href="dir_d6f46d6f08706e7c5949ba49fb409a42.html">Analyzers</a></li><li class="navelem"><a class="el" href="dir_dfe1f6dc2918267c5c8576edcd9fcac2.html">Filters</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">ChainedFilter.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_chained_filter_8cs.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using</span> System;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using</span> System.Collections.Generic;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> System.Linq;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">using</span> System.Text;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">using</span> Lucene.Net.Search;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">using</span> Lucene.Net.Index;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">using</span> Lucene.Net.Util;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">namespace </span>Lucene.Net.Analysis</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html"> 45</a></span>&#160; <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html">ChainedFilter</a> : <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a></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"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05"> 47</a></span>&#160; <span class="keyword">public</span> <span class="keyword">enum</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a></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; NONE = -1,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; OR = 0,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; AND = 1,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; ANDNOT = 2,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; XOR = 3</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; };</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#ad0a3baf7aa8d646fc104f8a2702339ad"> 57</a></span>&#160; <span class="keyword">public</span> <span class="keyword">const</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a> DEFAULT = <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a>.OR;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a>[] chain = null;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a>[] logicArray;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a> logic = <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a>.NONE;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a1223ce12b93fdea7ce79ac292655a043"> 67</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html">ChainedFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a>[] chain)</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; this.chain = chain;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a2f0915ae6c77c6aeb264a4251ee17d46"> 75</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html">ChainedFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a>[] chain, <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a>[] logicArray)</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; this.chain = chain;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; this.logicArray = logicArray;</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;</div>
<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#abee4b2ee986b77954374f7326761413f"> 84</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html">ChainedFilter</a>(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a>[] chain, <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a> logic)</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; this.chain = chain;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; this.logic = logic;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a8006778890081fda13a09ab4262f2ac5"> 91</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a> GetDocIdSet(<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="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">int</span>[] index = <span class="keyword">new</span> <span class="keywordtype">int</span>[1]; <span class="comment">// use array as reference to modifiable int; </span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; index[0] = 0; <span class="comment">// an object attribute would not be thread safe.</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span> (logic != <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a844b412c19d0795e2c9b51ffffaa6d05">Logic</a>.NONE)</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> GetDocIdSet(reader, logic, index);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (logicArray != null)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> GetDocIdSet(reader, logicArray, index);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">return</span> GetDocIdSet(reader, DEFAULT, index);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html" title="This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to Int32.MaxValue in order to be used as a sentinel object. Implementations of this class are expected to consider int.MaxValue as an invalid value. ">DocIdSetIterator</a> GetDISI(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a> filter, <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="l00104"></a><span class="lineno"> 104</span>&#160; {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a> docIdSet = filter.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html#a6acd9f9caec9c3a4adba5580593f76c7">GetDocIdSet</a>(reader);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (docIdSet == null)</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#a0954d462a5e3b7b8d1161d48d72ba391" title="An empty DocIdSet instance for easy use, e.g. in Filters that hit no documents. ">EMPTY_DOCIDSET</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#ada9f32eb3d60f5b8702420e19373356c" title="Provides a DocIdSetIterator to access the set. This implementation can return null or EMPTY_DOCIDSET...">Iterator</a>();</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html" title="This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to Int32.MaxValue in order to be used as a sentinel object. Implementations of this class are expected to consider int.MaxValue as an invalid value. ">DocIdSetIterator</a> iter = docIdSet.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#ada9f32eb3d60f5b8702420e19373356c" title="Provides a DocIdSetIterator to access the set. This implementation can return null or EMPTY_DOCIDSET...">Iterator</a>();</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (iter == null)</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">return</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#a0954d462a5e3b7b8d1161d48d72ba391" title="An empty DocIdSet instance for easy use, e.g. in Filters that hit no documents. ">EMPTY_DOCIDSET</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#ada9f32eb3d60f5b8702420e19373356c" title="Provides a DocIdSetIterator to access the set. This implementation can return null or EMPTY_DOCIDSET...">Iterator</a>();</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> iter;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html">OpenBitSetDISI</a> InitialResult(<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, Logic logic, <span class="keywordtype">int</span>[] index)</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html">OpenBitSetDISI</a> result;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (logic == Logic.AND)</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; result = <span class="keyword">new</span> <a class="code" href="_caching_wrapper_filter_8cs.html#a66ecd2e4919dc3b8a82041b62e31d883">OpenBitSetDISI</a>(GetDISI(chain[index[0]], reader), reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>());</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; ++index[0];</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (logic == Logic.ANDNOT)</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; result = <span class="keyword">new</span> <a class="code" href="_caching_wrapper_filter_8cs.html#a66ecd2e4919dc3b8a82041b62e31d883">OpenBitSetDISI</a>(GetDISI(chain[index[0]], reader), reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>());</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set.html#aa792d629332cb21cc67c85c02ff6ff5d" title="flips a bit, expanding the set size if necessary ">Flip</a>(0, reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>()); <span class="comment">// NOTE: may set bits for deleted docs.</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; ++index[0];</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; result = <span class="keyword">new</span> <a class="code" href="_caching_wrapper_filter_8cs.html#a66ecd2e4919dc3b8a82041b62e31d883">OpenBitSetDISI</a>(reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>());</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">return</span> result;</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;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div>
<div class="line"><a name="l00157"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a225b10e1d3164c912a7251d57c6f8e4c"> 157</a></span>&#160; <span class="keyword">protected</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a> FinalResult(<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html">OpenBitSetDISI</a> result, <span class="keywordtype">int</span> maxDocs)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> result;</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;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a> GetDocIdSet(<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, Logic logic, <span class="keywordtype">int</span>[] index)</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html">OpenBitSetDISI</a> result = InitialResult(reader, logic, index);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">for</span> (; index[0] &lt; chain.Length; index[0]++)</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; DoChain(result, logic, chain[index[0]].GetDocIdSet(reader));</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; <span class="keywordflow">return</span> FinalResult(result, reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>());</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;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a> GetDocIdSet(<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, Logic[] logic, <span class="keywordtype">int</span>[] index)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (logic.Length != chain.Length)</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> ArgumentException(<span class="stringliteral">&quot;Invalid number of elements in logic array&quot;</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; <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html">OpenBitSetDISI</a> result = InitialResult(reader, logic[0], index);</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">for</span> (; index[0] &lt; chain.Length; index[0]++)</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; DoChain(result, logic[index[0]], chain[index[0]].GetDocIdSet(reader));</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">return</span> FinalResult(result, reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>());</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div>
<div class="line"><a name="l00198"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_chained_filter.html#a05db2c121c07384d97f3696efa297817"> 198</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> String ToString()</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; StringBuilder sb = <span class="keyword">new</span> StringBuilder();</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; sb.Append(<span class="stringliteral">&quot;ChainedFilter: [&quot;</span>);</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; chain.Length; i++)</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; sb.Append(chain[i]);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; sb.Append(<span class="charliteral">&#39; &#39;</span>);</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; sb.Append(<span class="charliteral">&#39;]&#39;</span>);</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> sb.ToString();</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> DoChain(<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html">OpenBitSetDISI</a> result, Logic logic, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a> dis)</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;</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">if</span> (dis is <a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set.html" title="An &quot;open&quot; BitSet implementation that allows direct access to the array of words storing the bits...">OpenBitSet</a>)</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// optimized case for OpenBitSets</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">switch</span> (logic)</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">case</span> Logic.OR:</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set.html#ac1796923673f129f923bcb2a8c8324d8">Or</a>((OpenBitSet)dis);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">case</span> Logic.AND:</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set.html#a6fdeb324fef4eec0c3801968b67f42a8">And</a>((OpenBitSet)dis);</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">case</span> Logic.ANDNOT:</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set.html#a4719489a3e616544713c7abe2a7010bf">AndNot</a>((OpenBitSet)dis);</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">case</span> Logic.XOR:</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set.html#a5fe53c09f9673afb4036d05ef9298c8d" title="this = this XOR other ">Xor</a>((OpenBitSet)dis);</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; DoChain(result, DEFAULT, dis);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html" title="This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to Int32.MaxValue in order to be used as a sentinel object. Implementations of this class are expected to consider int.MaxValue as an invalid value. ">DocIdSetIterator</a> disi;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (dis == null)</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; disi = <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#a0954d462a5e3b7b8d1161d48d72ba391" title="An empty DocIdSet instance for easy use, e.g. in Filters that hit no documents. ">EMPTY_DOCIDSET</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#ada9f32eb3d60f5b8702420e19373356c" title="Provides a DocIdSetIterator to access the set. This implementation can return null or EMPTY_DOCIDSET...">Iterator</a>();</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; <span class="keywordflow">else</span></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; disi = dis.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set.html#aa6923d931a282a9334ec956ecf2bbaf2">Iterator</a>();</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (disi == null)</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; disi = <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html" title="A DocIdSet contains a set of doc ids. Implementing classes must only implement Iterator to provide ac...">DocIdSet</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#a0954d462a5e3b7b8d1161d48d72ba391" title="An empty DocIdSet instance for easy use, e.g. in Filters that hit no documents. ">EMPTY_DOCIDSET</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#ada9f32eb3d60f5b8702420e19373356c" title="Provides a DocIdSetIterator to access the set. This implementation can return null or EMPTY_DOCIDSET...">Iterator</a>();</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;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">switch</span> (logic)</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">case</span> Logic.OR:</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html#a19be49000f97f994b2e96c8cb979dfd0" title="Perform an inplace OR with the doc ids from a given DocIdSetIterator, setting the bit for each such d...">InPlaceOr</a>(disi);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">case</span> Logic.AND:</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html#a6712db7e2ce2a1b2e508b54870d9493a" title="Perform an inplace AND with the doc ids from a given DocIdSetIterator, leaving only the bits set for ...">InPlaceAnd</a>(disi);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">case</span> Logic.ANDNOT:</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html#a28f78f85f9b426923bb329ade5d272f5" title="Perform an inplace NOT with the doc ids from a given DocIdSetIterator, clearing all the bits for each...">InPlaceNot</a>(disi);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">case</span> Logic.XOR:</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; result.<a class="code" href="class_lucene_1_1_net_1_1_util_1_1_open_bit_set_d_i_s_i.html#abaf273fa6a2f92bc66adb702e1707db0" title="Perform an inplace XOR with the doc ids from a given DocIdSetIterator, flipping all the bits for each...">InPlaceXor</a>(disi);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; DoChain(result, DEFAULT, dis);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 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;</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;</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</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:42 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>