blob: e7f9ab23237e690cdda971e95e9f9de6519267a7 [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/Document/NumberTools.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_26c304b05067858a09da5afdd232cb28.html">Document</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">NumberTools.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_number_tools_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> Lucene.Net.Search;</div>
<div class="line"><a name="l00020"></a><span class="lineno"><a class="code" href="_number_tools_8cs.html#a35ee450e1da1e0bf32b70e5018cc9e5e"> 20</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_numeric_token_stream_8cs.html#a35ee450e1da1e0bf32b70e5018cc9e5e">NumericUtils</a> = Lucene.Net.Util.NumericUtils;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">namespace </span>Lucene.Net.<a class="code" href="_index_set_8cs.html#ab0c91be630b1f43f2379cc5964ed640c">Documents</a></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="comment">// do not remove this class in 3.0, it may be needed to decode old indexes!</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; [Obsolete(<span class="stringliteral">&quot;For new indexes use NumericUtils instead, which provides a sortable binary representation (prefix encoded) of numeric values. To index and efficiently query numeric values use NumericField and NumericRangeQuery. This class is included for use with existing indices and will be removed in a future release (possibly Lucene 4.0).&quot;</span>)]</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html"> 49</a></span>&#160; <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html" title="Provides support for converting longs to Strings, and back again. The strings are structured so that ...">NumberTools</a></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; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">int</span> RADIX = 36;</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">private</span> <span class="keyword">const</span> <span class="keywordtype">char</span> NEGATIVE_PREFIX = <span class="charliteral">&#39;-&#39;</span>;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// NB: NEGATIVE_PREFIX must be &lt; POSITIVE_PREFIX</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">private</span> <span class="keyword">const</span> <span class="keywordtype">char</span> POSITIVE_PREFIX = <span class="charliteral">&#39;0&#39;</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">//NB: this must be less than</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span><span class="preprocessor">#if !PRE_LUCENE_NET_2_0_0_COMPATIBLE</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html#ac1b90972753bd8869ea5aef8b179b4f9"> 62</a></span>&#160;<span class="preprocessor"></span> <span class="keyword">public</span> <span class="keyword">static</span> readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + <span class="stringliteral">&quot;0000000000000&quot;</span>;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor"></span> <span class="keyword">public</span> <span class="keyword">static</span> readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + <span class="stringliteral">&quot;0000000000000000&quot;</span>;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor"></span> </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#if !PRE_LUCENE_NET_2_0_0_COMPATIBLE</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html#a0321e2bed955de364cef01e655dcfedd"> 69</a></span>&#160;<span class="preprocessor"></span> <span class="keyword">public</span> <span class="keyword">static</span> readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + <span class="stringliteral">&quot;1y2p0ij32e8e7&quot;</span>;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor"></span> <span class="keyword">public</span> <span class="keyword">static</span> readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + <span class="stringliteral">&quot;7fffffffffffffff&quot;</span>;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor"></span> </div>
<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html#a4fea5a789fdb9a4dc14ae7a35a01b63d"> 75</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> readonly <span class="keywordtype">int</span> STR_SIZE = MIN_STRING_VALUE.Length;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html#aec390b66c051d7d9df81f5c485d5dc3a"> 78</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> System.String LongToString(<span class="keywordtype">long</span> l)</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="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (l == System.Int64.MinValue)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// special case, because long is not symmetric around zero</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> MIN_STRING_VALUE;</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; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; System.Text.StringBuilder buf = <span class="keyword">new</span> System.Text.StringBuilder(STR_SIZE);</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; <span class="keywordflow">if</span> (l &lt; 0)</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; buf.Append(NEGATIVE_PREFIX);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; l = System.Int64.MaxValue + l + 1;</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="keywordflow">else</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; buf.Append(POSITIVE_PREFIX);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#if !PRE_LUCENE_NET_2_0_0_COMPATIBLE</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="preprocessor"></span> System.String num = ToString(l);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor"></span> System.String num = System.Convert.ToString(l, RADIX);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor"></span> </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">int</span> padLen = STR_SIZE - num.Length - buf.Length;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">while</span> (padLen-- &gt; 0)</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; buf.Append(<span class="charliteral">&#39;0&#39;</span>);</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; buf.Append(num);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> buf.ToString();</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; </div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html#ab1588fa68ff59ffec383f799598fcdc4"> 125</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keywordtype">long</span> StringToLong(System.String str)</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; <span class="keywordflow">if</span> (str == null)</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.NullReferenceException(<span class="stringliteral">&quot;string cannot be null&quot;</span>);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (str.Length != STR_SIZE)</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">throw</span> <span class="keyword">new</span> System.FormatException(<span class="stringliteral">&quot;string is the wrong size&quot;</span>);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (str.Equals(MIN_STRING_VALUE))</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; <span class="keywordflow">return</span> System.Int64.MinValue;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordtype">char</span> prefix = str[0];</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="preprocessor">#if !PRE_LUCENE_NET_2_0_0_COMPATIBLE</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="preprocessor"></span> <span class="keywordtype">long</span> l = ToLong(str.Substring(1));</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="preprocessor"></span> <span class="keywordtype">long</span> l = System.Convert.ToInt64(str.Substring(1), RADIX);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="preprocessor"></span> </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (prefix == POSITIVE_PREFIX)</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// nop</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (prefix == NEGATIVE_PREFIX)</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; l = l - System.Int64.MaxValue - 1;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.FormatException(<span class="stringliteral">&quot;string does not begin with the correct prefix&quot;</span>);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">return</span> l;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="preprocessor">#if !PRE_LUCENE_NET_2_0_0_COMPATIBLE</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #region BASE36 OPS </span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor"></span> <span class="keyword">static</span> System.String digits = <span class="stringliteral">&quot;0123456789abcdefghijklmnopqrstuvwxyz&quot;</span>;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">static</span> <span class="keywordtype">long</span>[] powersOf36 = </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; 1L,</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; 36L,</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; 36L*36L,</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; 36L*36L*36L,</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; 36L*36L*36L*36L,</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; 36L*36L*36L*36L*36L,</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; 36L*36L*36L*36L*36L*36L,</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; 36L*36L*36L*36L*36L*36L*36L,</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; 36L*36L*36L*36L*36L*36L*36L*36L,</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; 36L*36L*36L*36L*36L*36L*36L*36L*36L,</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L,</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L,</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; };</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div>
<div class="line"><a name="l00184"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html#ad6c199edd8da9608cf73944ce405cf6b"> 184</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> System.String ToString(<span class="keywordtype">long</span> lval)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (lval == 0)</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;0&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;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordtype">int</span> maxStrLen = powersOf36.Length;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordtype">long</span> curval = lval;</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="keywordtype">char</span>[] tb = <span class="keyword">new</span> <span class="keywordtype">char</span>[maxStrLen];</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">int</span> outpos = 0;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; maxStrLen; i++)</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">long</span> pval = powersOf36[maxStrLen - i - 1];</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordtype">int</span> pos = (int)(curval / pval);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; tb[outpos++] = digits.Substring(pos, 1).ToCharArray()[0];</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; curval = curval % pval;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (outpos == 0)</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; tb[outpos++] = <span class="charliteral">&#39;0&#39;</span>;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> System.String(tb, 0, outpos).TrimStart(<span class="charliteral">&#39;0&#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;</div>
<div class="line"><a name="l00208"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_documents_1_1_number_tools.html#a9b3d14a66ca8bd7baa39aa82ae81f424"> 208</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keywordtype">long</span> ToLong(System.String t)</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">long</span> ival = 0;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordtype">char</span>[] tb = t.ToCharArray();</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; tb.Length; i++)</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; ival += powersOf36[i] * digits.IndexOf(tb[tb.Length - i - 1]);</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> ival;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="preprocessor"> #endregion</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor"></span> }</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 3 2013 02:12:44 for Lucene.Net by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.3
</small></address>
</body>
</html>