You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ar...@apache.org on 2007/05/01 05:15:25 UTC
svn commit: r533920 - in /incubator/lucene.net:
tags/Lucene.Net_2_0_0/src/HISTORY.txt
tags/Lucene.Net_2_0_0/src/Lucene.Net/Document/NumberTools.cs
trunk/C#/src/HISTORY.txt trunk/C#/src/Lucene.Net/Document/NumberTools.cs
Author: aroush
Date: Mon Apr 30 20:15:24 2007
New Revision: 533920
URL: http://svn.apache.org/viewvc?view=rev&rev=533920
Log:
Fixed LUCENENET-37 "Exception while search in Lucene.Net and Index prepared by Lucene Java"
Modified:
incubator/lucene.net/tags/Lucene.Net_2_0_0/src/HISTORY.txt
incubator/lucene.net/tags/Lucene.Net_2_0_0/src/Lucene.Net/Document/NumberTools.cs
incubator/lucene.net/trunk/C#/src/HISTORY.txt
incubator/lucene.net/trunk/C#/src/Lucene.Net/Document/NumberTools.cs
Modified: incubator/lucene.net/tags/Lucene.Net_2_0_0/src/HISTORY.txt
URL: http://svn.apache.org/viewvc/incubator/lucene.net/tags/Lucene.Net_2_0_0/src/HISTORY.txt?view=diff&rev=533920&r1=533919&r2=533920
==============================================================================
--- incubator/lucene.net/tags/Lucene.Net_2_0_0/src/HISTORY.txt (original)
+++ incubator/lucene.net/tags/Lucene.Net_2_0_0/src/HISTORY.txt Mon Apr 30 20:15:24 2007
@@ -2,6 +2,11 @@
-------------------------
+30Apr07:
+ - Patch: Apache Lucene.Net.2.0 build 005 "final"
+ - Fix: LUCENENET-37 "Exception while search in Lucene.Net and Index prepared by Lucene Java"
+
+
11Mar07:
- Release: Apache Lucene.Net.2.0 build 004 "final"
- Fix: LUCENENET-36 "Countries using "," as decimal separator gets an exception in QueryParser.cs with a query like color~0.5"
Modified: incubator/lucene.net/tags/Lucene.Net_2_0_0/src/Lucene.Net/Document/NumberTools.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/tags/Lucene.Net_2_0_0/src/Lucene.Net/Document/NumberTools.cs?view=diff&rev=533920&r1=533919&r2=533920
==============================================================================
--- incubator/lucene.net/tags/Lucene.Net_2_0_0/src/Lucene.Net/Document/NumberTools.cs (original)
+++ incubator/lucene.net/tags/Lucene.Net_2_0_0/src/Lucene.Net/Document/NumberTools.cs Mon Apr 30 20:15:24 2007
@@ -20,118 +20,186 @@
namespace Lucene.Net.Documents
{
- /// <summary> Provides support for converting longs to Strings, and back again. The strings
- /// are structured so that lexicographic sorting order is preserved.
- ///
- /// <p>
- /// That is, if l1 is less than l2 for any two longs l1 and l2, then
- /// NumberTools.longToString(l1) is lexicographically less than
- /// NumberTools.longToString(l2). (Similarly for "greater than" and "equals".)
- ///
- /// <p>
- /// This class handles <b>all</b> long values (unlike
- /// {@link Lucene.Net.document.DateField}).
- ///
- /// </summary>
- /// <author> Matt Quail (spud at madbean dot com)
- /// </author>
- public class NumberTools
- {
-
- private const int RADIX = 16;
-
- private const char NEGATIVE_PREFIX = '-';
-
- // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX
- private const char POSITIVE_PREFIX = '0';
-
- //NB: this must be less than
- /// <summary> Equivalent to longToString(Long.MIN_VALUE)</summary>
- public static readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + "0000000000000000";
-
- /// <summary> Equivalent to longToString(Long.MAX_VALUE)</summary>
- public static readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + "7fffffffffffffff";
-
- /// <summary> The length of (all) strings returned by {@link #longToString}</summary>
- public static readonly int STR_SIZE = MIN_STRING_VALUE.Length;
-
- /// <summary> Converts a long to a String suitable for indexing.</summary>
- public static System.String LongToString(long l)
- {
+ /// <summary> Provides support for converting longs to Strings, and back again. The strings
+ /// are structured so that lexicographic sorting order is preserved.
+ ///
+ /// <p>
+ /// That is, if l1 is less than l2 for any two longs l1 and l2, then
+ /// NumberTools.longToString(l1) is lexicographically less than
+ /// NumberTools.longToString(l2). (Similarly for "greater than" and "equals".)
+ ///
+ /// <p>
+ /// This class handles <b>all</b> long values (unlike
+ /// {@link Lucene.Net.document.DateField}).
+ ///
+ /// </summary>
+ /// <author> Matt Quail (spud at madbean dot com)
+ /// </author>
+ public class NumberTools
+ {
+
+ private const int RADIX = 16;
+
+ private const char NEGATIVE_PREFIX = '-';
+
+ // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX
+ private const char POSITIVE_PREFIX = '0';
+
+ //NB: this must be less than
+ /// <summary> Equivalent to longToString(Long.MIN_VALUE)</summary>
+#if LUCENE_JAVA_COMPATIBLE
+ public static readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + "0000000000000";
+#else
+ public static readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + "0000000000000000";
+#endif
+
+ /// <summary> Equivalent to longToString(Long.MAX_VALUE)</summary>
+#if LUCENE_JAVA_COMPATIBLE
+ public static readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + "1y2p0ij32e8e7";
+#else
+ public static readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + "7fffffffffffffff";
+#endif
+
+ /// <summary> The length of (all) strings returned by {@link #longToString}</summary>
+ public static readonly int STR_SIZE = MIN_STRING_VALUE.Length;
+
+ /// <summary> Converts a long to a String suitable for indexing.</summary>
+ public static System.String LongToString(long l)
+ {
if (l == System.Int64.MinValue)
- {
- // special case, because long is not symetric around zero
- return MIN_STRING_VALUE;
- }
-
- System.Text.StringBuilder buf = new System.Text.StringBuilder(STR_SIZE);
-
- if (l < 0)
- {
- buf.Append(NEGATIVE_PREFIX);
- l = System.Int64.MaxValue + l + 1;
- }
- else
- {
- buf.Append(POSITIVE_PREFIX);
- }
- System.String num = System.Convert.ToString(l, RADIX);
-
- int padLen = STR_SIZE - num.Length - buf.Length;
- while (padLen-- > 0)
- {
- buf.Append('0');
- }
- buf.Append(num);
-
- return buf.ToString();
- }
-
- /// <summary> Converts a String that was returned by {@link #longToString} back to a
- /// long.
- ///
- /// </summary>
- /// <throws> IllegalArgumentException </throws>
- /// <summary> if the input is null
- /// </summary>
- /// <throws> NumberFormatException </throws>
- /// <summary> if the input does not parse (it was not a String returned by
- /// longToString()).
- /// </summary>
- public static long StringToLong(System.String str)
- {
- if (str == null)
- {
- throw new System.NullReferenceException("string cannot be null");
- }
- if (str.Length != STR_SIZE)
- {
- throw new System.FormatException("string is the wrong size");
- }
-
- if (str.Equals(MIN_STRING_VALUE))
- {
- return System.Int64.MinValue;
- }
-
- char prefix = str[0];
- long l = System.Convert.ToInt64(str.Substring(1), RADIX);
-
- if (prefix == POSITIVE_PREFIX)
- {
- // nop
- }
- else if (prefix == NEGATIVE_PREFIX)
- {
- l = l - System.Int64.MaxValue - 1;
- }
- else
- {
- throw new System.FormatException("string does not begin with the correct prefix");
- }
-
- return l;
- }
- }
+ {
+ // special case, because long is not symetric around zero
+ return MIN_STRING_VALUE;
+ }
+
+ System.Text.StringBuilder buf = new System.Text.StringBuilder(STR_SIZE);
+
+ if (l < 0)
+ {
+ buf.Append(NEGATIVE_PREFIX);
+ l = System.Int64.MaxValue + l + 1;
+ }
+ else
+ {
+ buf.Append(POSITIVE_PREFIX);
+ }
+#if LUCENE_JAVA_COMPATIBLE
+ System.String num = ToString(l);
+#else
+ System.String num = System.Convert.ToString(l, RADIX);
+#endif
+
+ int padLen = STR_SIZE - num.Length - buf.Length;
+ while (padLen-- > 0)
+ {
+ buf.Append('0');
+ }
+ buf.Append(num);
+
+ return buf.ToString();
+ }
+
+ /// <summary> Converts a String that was returned by {@link #longToString} back to a
+ /// long.
+ ///
+ /// </summary>
+ /// <throws> IllegalArgumentException </throws>
+ /// <summary> if the input is null
+ /// </summary>
+ /// <throws> NumberFormatException </throws>
+ /// <summary> if the input does not parse (it was not a String returned by
+ /// longToString()).
+ /// </summary>
+ public static long StringToLong(System.String str)
+ {
+ if (str == null)
+ {
+ throw new System.NullReferenceException("string cannot be null");
+ }
+ if (str.Length != STR_SIZE)
+ {
+ throw new System.FormatException("string is the wrong size");
+ }
+
+ if (str.Equals(MIN_STRING_VALUE))
+ {
+ return System.Int64.MinValue;
+ }
+
+ char prefix = str[0];
+#if LUCENE_JAVA_COMPATIBLE
+ long l = ToLong(str.Substring(1));
+#else
+ long l = System.Convert.ToInt64(str.Substring(1), RADIX);
+#endif
+
+ if (prefix == POSITIVE_PREFIX)
+ {
+ // nop
+ }
+ else if (prefix == NEGATIVE_PREFIX)
+ {
+ l = l - System.Int64.MaxValue - 1;
+ }
+ else
+ {
+ throw new System.FormatException("string does not begin with the correct prefix");
+ }
+
+ return l;
+ }
+
+#if LUCENE_JAVA_COMPATIBLE
+ #region BASE36 OPS
+ static System.String digits = "0123456789abcdefghijklmnopqrstuvwxyz";
+ static long[] powersOf36 =
+ {
+ 1L,
+ 36L,
+ 36L*36L,
+ 36L*36L*36L,
+ 36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L
+ };
+
+ public static System.String ToString(long lval)
+ {
+ int maxStrLen = powersOf36.Length;
+ long curval = lval;
+
+ char[] tb = new char[maxStrLen];
+ int outpos = 0;
+ for (int i = 0; i < maxStrLen; i++)
+ {
+ long pval = powersOf36[maxStrLen - i - 1];
+ int pos = (int)(curval / pval);
+ tb[outpos++] = digits.Substring(pos, 1).ToCharArray()[0];
+ curval = curval % pval;
+ }
+ if (outpos == 0)
+ tb[outpos++] = '0';
+ return new System.String(tb, 0, outpos).TrimStart('0');
+ }
+
+ public static long ToLong(System.String t)
+ {
+ long ival = 0;
+ char[] tb = t.ToCharArray();
+ for (int i = 0; i < tb.Length; i++)
+ {
+ ival += powersOf36[i] * digits.IndexOf(tb[tb.Length - i - 1]);
+ }
+ return ival;
+ }
+ #endregion
+#endif
+ }
}
Modified: incubator/lucene.net/trunk/C#/src/HISTORY.txt
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/HISTORY.txt?view=diff&rev=533920&r1=533919&r2=533920
==============================================================================
--- incubator/lucene.net/trunk/C#/src/HISTORY.txt (original)
+++ incubator/lucene.net/trunk/C#/src/HISTORY.txt Mon Apr 30 20:15:24 2007
@@ -2,6 +2,11 @@
-------------------------
+30Apr07:
+ - Patch: Apache Lucene.Net.2.0 build 005 "final"
+ - Fix: LUCENENET-37 "Exception while search in Lucene.Net and Index prepared by Lucene Java"
+
+
11Mar07:
- Release: Apache Lucene.Net.2.0 build 004 "final"
- Fix: LUCENENET-36 "Countries using "," as decimal separator gets an exception in QueryParser.cs with a query like color~0.5"
Modified: incubator/lucene.net/trunk/C#/src/Lucene.Net/Document/NumberTools.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Document/NumberTools.cs?view=diff&rev=533920&r1=533919&r2=533920
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Lucene.Net/Document/NumberTools.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Lucene.Net/Document/NumberTools.cs Mon Apr 30 20:15:24 2007
@@ -20,118 +20,186 @@
namespace Lucene.Net.Documents
{
- /// <summary> Provides support for converting longs to Strings, and back again. The strings
- /// are structured so that lexicographic sorting order is preserved.
- ///
- /// <p>
- /// That is, if l1 is less than l2 for any two longs l1 and l2, then
- /// NumberTools.longToString(l1) is lexicographically less than
- /// NumberTools.longToString(l2). (Similarly for "greater than" and "equals".)
- ///
- /// <p>
- /// This class handles <b>all</b> long values (unlike
- /// {@link Lucene.Net.document.DateField}).
- ///
- /// </summary>
- /// <author> Matt Quail (spud at madbean dot com)
- /// </author>
- public class NumberTools
- {
-
- private const int RADIX = 16;
-
- private const char NEGATIVE_PREFIX = '-';
-
- // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX
- private const char POSITIVE_PREFIX = '0';
-
- //NB: this must be less than
- /// <summary> Equivalent to longToString(Long.MIN_VALUE)</summary>
- public static readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + "0000000000000000";
-
- /// <summary> Equivalent to longToString(Long.MAX_VALUE)</summary>
- public static readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + "7fffffffffffffff";
-
- /// <summary> The length of (all) strings returned by {@link #longToString}</summary>
- public static readonly int STR_SIZE = MIN_STRING_VALUE.Length;
-
- /// <summary> Converts a long to a String suitable for indexing.</summary>
- public static System.String LongToString(long l)
- {
+ /// <summary> Provides support for converting longs to Strings, and back again. The strings
+ /// are structured so that lexicographic sorting order is preserved.
+ ///
+ /// <p>
+ /// That is, if l1 is less than l2 for any two longs l1 and l2, then
+ /// NumberTools.longToString(l1) is lexicographically less than
+ /// NumberTools.longToString(l2). (Similarly for "greater than" and "equals".)
+ ///
+ /// <p>
+ /// This class handles <b>all</b> long values (unlike
+ /// {@link Lucene.Net.document.DateField}).
+ ///
+ /// </summary>
+ /// <author> Matt Quail (spud at madbean dot com)
+ /// </author>
+ public class NumberTools
+ {
+
+ private const int RADIX = 16;
+
+ private const char NEGATIVE_PREFIX = '-';
+
+ // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX
+ private const char POSITIVE_PREFIX = '0';
+
+ //NB: this must be less than
+ /// <summary> Equivalent to longToString(Long.MIN_VALUE)</summary>
+#if LUCENE_JAVA_COMPATIBLE
+ public static readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + "0000000000000";
+#else
+ public static readonly System.String MIN_STRING_VALUE = NEGATIVE_PREFIX + "0000000000000000";
+#endif
+
+ /// <summary> Equivalent to longToString(Long.MAX_VALUE)</summary>
+#if LUCENE_JAVA_COMPATIBLE
+ public static readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + "1y2p0ij32e8e7";
+#else
+ public static readonly System.String MAX_STRING_VALUE = POSITIVE_PREFIX + "7fffffffffffffff";
+#endif
+
+ /// <summary> The length of (all) strings returned by {@link #longToString}</summary>
+ public static readonly int STR_SIZE = MIN_STRING_VALUE.Length;
+
+ /// <summary> Converts a long to a String suitable for indexing.</summary>
+ public static System.String LongToString(long l)
+ {
if (l == System.Int64.MinValue)
- {
- // special case, because long is not symetric around zero
- return MIN_STRING_VALUE;
- }
-
- System.Text.StringBuilder buf = new System.Text.StringBuilder(STR_SIZE);
-
- if (l < 0)
- {
- buf.Append(NEGATIVE_PREFIX);
- l = System.Int64.MaxValue + l + 1;
- }
- else
- {
- buf.Append(POSITIVE_PREFIX);
- }
- System.String num = System.Convert.ToString(l, RADIX);
-
- int padLen = STR_SIZE - num.Length - buf.Length;
- while (padLen-- > 0)
- {
- buf.Append('0');
- }
- buf.Append(num);
-
- return buf.ToString();
- }
-
- /// <summary> Converts a String that was returned by {@link #longToString} back to a
- /// long.
- ///
- /// </summary>
- /// <throws> IllegalArgumentException </throws>
- /// <summary> if the input is null
- /// </summary>
- /// <throws> NumberFormatException </throws>
- /// <summary> if the input does not parse (it was not a String returned by
- /// longToString()).
- /// </summary>
- public static long StringToLong(System.String str)
- {
- if (str == null)
- {
- throw new System.NullReferenceException("string cannot be null");
- }
- if (str.Length != STR_SIZE)
- {
- throw new System.FormatException("string is the wrong size");
- }
-
- if (str.Equals(MIN_STRING_VALUE))
- {
- return System.Int64.MinValue;
- }
-
- char prefix = str[0];
- long l = System.Convert.ToInt64(str.Substring(1), RADIX);
-
- if (prefix == POSITIVE_PREFIX)
- {
- // nop
- }
- else if (prefix == NEGATIVE_PREFIX)
- {
- l = l - System.Int64.MaxValue - 1;
- }
- else
- {
- throw new System.FormatException("string does not begin with the correct prefix");
- }
-
- return l;
- }
- }
+ {
+ // special case, because long is not symetric around zero
+ return MIN_STRING_VALUE;
+ }
+
+ System.Text.StringBuilder buf = new System.Text.StringBuilder(STR_SIZE);
+
+ if (l < 0)
+ {
+ buf.Append(NEGATIVE_PREFIX);
+ l = System.Int64.MaxValue + l + 1;
+ }
+ else
+ {
+ buf.Append(POSITIVE_PREFIX);
+ }
+#if LUCENE_JAVA_COMPATIBLE
+ System.String num = ToString(l);
+#else
+ System.String num = System.Convert.ToString(l, RADIX);
+#endif
+
+ int padLen = STR_SIZE - num.Length - buf.Length;
+ while (padLen-- > 0)
+ {
+ buf.Append('0');
+ }
+ buf.Append(num);
+
+ return buf.ToString();
+ }
+
+ /// <summary> Converts a String that was returned by {@link #longToString} back to a
+ /// long.
+ ///
+ /// </summary>
+ /// <throws> IllegalArgumentException </throws>
+ /// <summary> if the input is null
+ /// </summary>
+ /// <throws> NumberFormatException </throws>
+ /// <summary> if the input does not parse (it was not a String returned by
+ /// longToString()).
+ /// </summary>
+ public static long StringToLong(System.String str)
+ {
+ if (str == null)
+ {
+ throw new System.NullReferenceException("string cannot be null");
+ }
+ if (str.Length != STR_SIZE)
+ {
+ throw new System.FormatException("string is the wrong size");
+ }
+
+ if (str.Equals(MIN_STRING_VALUE))
+ {
+ return System.Int64.MinValue;
+ }
+
+ char prefix = str[0];
+#if LUCENE_JAVA_COMPATIBLE
+ long l = ToLong(str.Substring(1));
+#else
+ long l = System.Convert.ToInt64(str.Substring(1), RADIX);
+#endif
+
+ if (prefix == POSITIVE_PREFIX)
+ {
+ // nop
+ }
+ else if (prefix == NEGATIVE_PREFIX)
+ {
+ l = l - System.Int64.MaxValue - 1;
+ }
+ else
+ {
+ throw new System.FormatException("string does not begin with the correct prefix");
+ }
+
+ return l;
+ }
+
+#if LUCENE_JAVA_COMPATIBLE
+ #region BASE36 OPS
+ static System.String digits = "0123456789abcdefghijklmnopqrstuvwxyz";
+ static long[] powersOf36 =
+ {
+ 1L,
+ 36L,
+ 36L*36L,
+ 36L*36L*36L,
+ 36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L,
+ 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L
+ };
+
+ public static System.String ToString(long lval)
+ {
+ int maxStrLen = powersOf36.Length;
+ long curval = lval;
+
+ char[] tb = new char[maxStrLen];
+ int outpos = 0;
+ for (int i = 0; i < maxStrLen; i++)
+ {
+ long pval = powersOf36[maxStrLen - i - 1];
+ int pos = (int)(curval / pval);
+ tb[outpos++] = digits.Substring(pos, 1).ToCharArray()[0];
+ curval = curval % pval;
+ }
+ if (outpos == 0)
+ tb[outpos++] = '0';
+ return new System.String(tb, 0, outpos).TrimStart('0');
+ }
+
+ public static long ToLong(System.String t)
+ {
+ long ival = 0;
+ char[] tb = t.ToCharArray();
+ for (int i = 0; i < tb.Length; i++)
+ {
+ ival += powersOf36[i] * digits.IndexOf(tb[tb.Length - i - 1]);
+ }
+ return ival;
+ }
+ #endregion
+#endif
+ }
}