You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2014/08/01 00:14:55 UTC

[3/3] git commit: Fix build breakage on JDK 1.6 due to missing method BitSet.previousClearBit.

Fix build breakage on JDK 1.6 due to missing method BitSet.previousClearBit.


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/e4b5fe77
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/e4b5fe77
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/e4b5fe77

Branch: refs/heads/master
Commit: e4b5fe77abdbe637f7cd87f5c46fc571db87bdb2
Parents: 5091422
Author: Julian Hyde <jh...@apache.org>
Authored: Thu Jul 31 14:36:01 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Thu Jul 31 14:36:01 2014 -0700

----------------------------------------------------------------------
 .../java/net/hydromatic/optiq/util/BitSets.java | 17 ++++++++++++++
 .../rel/rules/OptimizeBushyJoinRule.java        |  3 ++-
 .../net/hydromatic/optiq/util/BitSetsTest.java  | 24 +++++++++++++++++++-
 3 files changed, 42 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/e4b5fe77/core/src/main/java/net/hydromatic/optiq/util/BitSets.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/net/hydromatic/optiq/util/BitSets.java b/core/src/main/java/net/hydromatic/optiq/util/BitSets.java
index 78394db..b9cbf11 100644
--- a/core/src/main/java/net/hydromatic/optiq/util/BitSets.java
+++ b/core/src/main/java/net/hydromatic/optiq/util/BitSets.java
@@ -229,6 +229,23 @@ public final class BitSets {
     }
     return s;
   }
+
+  /** Returns the previous clear bit.
+   *
+   * <p>Has same behavior as {@link BitSet#previousClearBit}, but that method
+   * does not exist before 1.7. */
+  public static int previousClearBit(BitSet bitSet, int fromIndex) {
+    if (fromIndex < -1) {
+      throw new IndexOutOfBoundsException();
+    }
+    while (fromIndex >= 0) {
+      if (!bitSet.get(fromIndex)) {
+        return fromIndex;
+      }
+      --fromIndex;
+    }
+    return -1;
+  }
 }
 
 // End BitSets.java

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/e4b5fe77/core/src/main/java/org/eigenbase/rel/rules/OptimizeBushyJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/rules/OptimizeBushyJoinRule.java b/core/src/main/java/org/eigenbase/rel/rules/OptimizeBushyJoinRule.java
index 135a105..586f041 100644
--- a/core/src/main/java/org/eigenbase/rel/rules/OptimizeBushyJoinRule.java
+++ b/core/src/main/java/org/eigenbase/rel/rules/OptimizeBushyJoinRule.java
@@ -124,7 +124,8 @@ public class OptimizeBushyJoinRule extends RelOptRule {
       if (edgeOrdinal == -1) {
         // No more edges. Are there any un-joined vertexes?
         final Vertex lastVertex = Util.last(vertexes);
-        final int z = lastVertex.factors.previousClearBit(lastVertex.id - 1);
+        final int z =
+            BitSets.previousClearBit(lastVertex.factors, lastVertex.id - 1);
         if (z < 0) {
           break;
         }

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/e4b5fe77/core/src/test/java/net/hydromatic/optiq/util/BitSetsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/net/hydromatic/optiq/util/BitSetsTest.java b/core/src/test/java/net/hydromatic/optiq/util/BitSetsTest.java
index 3c7076d..9aae64b 100644
--- a/core/src/test/java/net/hydromatic/optiq/util/BitSetsTest.java
+++ b/core/src/test/java/net/hydromatic/optiq/util/BitSetsTest.java
@@ -30,6 +30,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 /**
  * Unit test for {@link net.hydromatic.optiq.util.BitSets}.
@@ -164,7 +165,28 @@ public class BitSetsTest {
     list = ImmutableIntList.of(2, 70, 5, 0);
     assertThat(BitSets.of(list), equalTo(BitSets.of(0, 2, 5, 70)));
   }
+
+  /**
+   * Tests the method
+   * {@link net.hydromatic.optiq.util.BitSets#previousClearBit(java.util.BitSet, int)}.
+   */
+  @Test public void testPreviousClearBit() {
+    assertThat(BitSets.previousClearBit(BitSets.of(), 10), equalTo(10));
+    assertThat(BitSets.previousClearBit(BitSets.of(), 0), equalTo(0));
+    assertThat(BitSets.previousClearBit(BitSets.of(), -1), equalTo(-1));
+    try {
+      final int actual = BitSets.previousClearBit(BitSets.of(), -2);
+      fail("expected exception, got " + actual);
+    } catch (IndexOutOfBoundsException e) {
+      // ok
+    }
+    assertThat(BitSets.previousClearBit(BitSets.of(0, 1, 3, 4), 4), equalTo(2));
+    assertThat(BitSets.previousClearBit(BitSets.of(0, 1, 3, 4), 3), equalTo(2));
+    assertThat(BitSets.previousClearBit(BitSets.of(0, 1, 3, 4), 2), equalTo(2));
+    assertThat(BitSets.previousClearBit(BitSets.of(0, 1, 3, 4), 1),
+        equalTo(-1));
+    assertThat(BitSets.previousClearBit(BitSets.of(1, 3, 4), 1), equalTo(0));
+  }
 }
 
 // End BitSetsTest.java
-