You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by us...@apache.org on 2009/02/22 19:17:14 UTC

svn commit: r746790 - in /lucene/java/trunk/contrib/queries/src: java/org/apache/lucene/search/trie/TrieUtils.java test/org/apache/lucene/search/trie/TestTrieUtils.java

Author: uschindler
Date: Sun Feb 22 18:17:13 2009
New Revision: 746790

URL: http://svn.apache.org/viewvc?rev=746790&view=rev
Log:
LUCENE-1470: API change in RangeBuilder

Modified:
    lucene/java/trunk/contrib/queries/src/java/org/apache/lucene/search/trie/TrieUtils.java
    lucene/java/trunk/contrib/queries/src/test/org/apache/lucene/search/trie/TestTrieUtils.java

Modified: lucene/java/trunk/contrib/queries/src/java/org/apache/lucene/search/trie/TrieUtils.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/queries/src/java/org/apache/lucene/search/trie/TrieUtils.java?rev=746790&r1=746789&r2=746790&view=diff
==============================================================================
--- lucene/java/trunk/contrib/queries/src/java/org/apache/lucene/search/trie/TrieUtils.java (original)
+++ lucene/java/trunk/contrib/queries/src/java/org/apache/lucene/search/trie/TrieUtils.java Sun Feb 22 18:17:13 2009
@@ -419,7 +419,7 @@
     final Object builder, final int valSize,
     final int precisionStep, long minBound, long maxBound
   ) {
-    for (int shift=0;; shift+=precisionStep) {
+    for (int level=0,shift=0;; level++) {
       // calculate new bounds for inner precision
       final long diff = 1L << (shift+precisionStep),
         mask = ((1L<<precisionStep) - 1L) << shift;
@@ -432,27 +432,28 @@
 
       if (shift+precisionStep>=valSize || nextMinBound>nextMaxBound) {
         // We are in the lowest precision or the next precision is not available.
-        addRange(builder, valSize, precisionStep, minBound, maxBound, shift);
+        addRange(builder, valSize, minBound, maxBound, shift, level);
         // exit the split recursion loop
         break;
       }
       
       if (hasLower)
-        addRange(builder, valSize, precisionStep, minBound, minBound | mask, shift);
+        addRange(builder, valSize, minBound, minBound | mask, shift, level);
       if (hasUpper)
-        addRange(builder, valSize, precisionStep, maxBound & ~mask, maxBound, shift);
+        addRange(builder, valSize, maxBound & ~mask, maxBound, shift, level);
       
       // recurse to next precision
       minBound = nextMinBound;
       maxBound = nextMaxBound;
+      shift += precisionStep;
     }
   }
   
   /** Helper that delegates to correct range builder */
   private static void addRange(
     final Object builder, final int valSize,
-    final int precisionStep, long minBound, long maxBound,
-    final int shift
+    long minBound, long maxBound,
+    final int shift, final int level
   ) {
     // for the max bound set all lower bits (that were shifted away):
     // this is important for testing or other usages of the splitted range
@@ -462,10 +463,10 @@
     // delegate to correct range builder
     switch(valSize) {
       case 64:
-        ((LongRangeBuilder)builder).addRange(precisionStep, minBound, maxBound, shift);
+        ((LongRangeBuilder)builder).addRange(minBound, maxBound, shift, level);
         break;
       case 32:
-        ((IntRangeBuilder)builder).addRange(precisionStep, (int)minBound, (int)maxBound, shift);
+        ((IntRangeBuilder)builder).addRange((int)minBound, (int)maxBound, shift, level);
         break;
       default:
         // Should not happen!
@@ -476,6 +477,8 @@
   /**
    * Expert: Callback for {@link #splitLongRange}.
    * You need to overwrite only one of the methods.
+   * <p><font color="red">WARNING: This is a very low-level interface,
+   * the method signatures may change in later versions.</font>
    */
   public static abstract class LongRangeBuilder {
     
@@ -498,10 +501,10 @@
      * Overwrite this method, if you like to receive the raw long range bounds.
      * You can use this for e.g. debugging purposes (print out range bounds).
      */
-    public void addRange(final int precisionStep, final long min, final long max, final int shift) {
+    public void addRange(final long min, final long max, final int shift, final int level) {
       /*System.out.println(Long.toHexString((min^0x8000000000000000L) >>> shift)+".."+
         Long.toHexString((max^0x8000000000000000L) >>> shift));*/
-      addRange(longToPrefixCoded(min, shift), longToPrefixCoded(max, shift), shift/precisionStep);
+      addRange(longToPrefixCoded(min, shift), longToPrefixCoded(max, shift), level);
     }
   
   }
@@ -509,6 +512,8 @@
   /**
    * Expert: Callback for {@link #splitIntRange}.
    * You need to overwrite only one of the methods.
+   * <p><font color="red">WARNING: This is a very low-level interface,
+   * the method signatures may change in later versions.</font>
    */
   public static abstract class IntRangeBuilder {
     
@@ -531,10 +536,10 @@
      * Overwrite this method, if you like to receive the raw int range bounds.
      * You can use this for e.g. debugging purposes (print out range bounds).
      */
-    public void addRange(final int precisionStep, final int min, final int max, final int shift) {
+    public void addRange(final int min, final int max, final int shift, final int level) {
       /*System.out.println(Integer.toHexString((min^0x80000000) >>> shift)+".."+
         Integer.toHexString((max^0x80000000) >>> shift));*/
-      addRange(intToPrefixCoded(min, shift), intToPrefixCoded(max, shift), shift/precisionStep);
+      addRange(intToPrefixCoded(min, shift), intToPrefixCoded(max, shift), level);
     }
   
   }

Modified: lucene/java/trunk/contrib/queries/src/test/org/apache/lucene/search/trie/TestTrieUtils.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/queries/src/test/org/apache/lucene/search/trie/TestTrieUtils.java?rev=746790&r1=746789&r2=746790&view=diff
==============================================================================
--- lucene/java/trunk/contrib/queries/src/test/org/apache/lucene/search/trie/TestTrieUtils.java (original)
+++ lucene/java/trunk/contrib/queries/src/test/org/apache/lucene/search/trie/TestTrieUtils.java Sun Feb 22 18:17:13 2009
@@ -178,7 +178,8 @@
     final OpenBitSet bits=useBitSet ? new OpenBitSet(upper-lower+1) : null;
     
     TrieUtils.splitLongRange(new TrieUtils.LongRangeBuilder() {
-      public void addRange(int precisionStep, long min, long max, int shift) {
+      //@Override
+      public void addRange(long min, long max, int shift, int level) {
         assertTrue("min, max should be inside bounds", min>=lower && min<=upper && max>=lower && max<=upper);
         if (useBitSet) for (long l=min; l<=max; l++) {
           assertFalse("ranges should not overlap", bits.getAndSet(l-lower) );
@@ -251,7 +252,8 @@
     final OpenBitSet bits=useBitSet ? new OpenBitSet(upper-lower+1) : null;
     
     TrieUtils.splitIntRange(new TrieUtils.IntRangeBuilder() {
-      public void addRange(int precisionStep, int min, int max, int shift) {
+      //@Override
+      public void addRange(int min, int max, int shift, int level) {
         assertTrue("min, max should be inside bounds", min>=lower && min<=upper && max>=lower && max<=upper);
         if (useBitSet) for (int i=min; i<=max; i++) {
           assertFalse("ranges should not overlap", bits.getAndSet(i-lower) );