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
-