Repository: calcite Updated Branches: refs/heads/branch-1.15 [created] 2ffe5d581
Add ImmutableBitSet.set(int, boolean) Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/01eb6b5e Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/01eb6b5e Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/01eb6b5e Branch: refs/heads/branch-1.15 Commit: 01eb6b5ec28985eb64892fec0918c4a0a7c4aad0 Parents: cd493ef Author: Julian Hyde <[email protected]> Authored: Thu Feb 2 14:41:40 2017 -0800 Committer: Julian Hyde <[email protected]> Committed: Mon Nov 27 16:33:31 2017 -0800 ---------------------------------------------------------------------- .../main/java/org/apache/calcite/util/ImmutableBitSet.java | 9 +++++++++ .../java/org/apache/calcite/util/ImmutableBitSetTest.java | 9 +++++++++ 2 files changed, 18 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/01eb6b5e/core/src/main/java/org/apache/calcite/util/ImmutableBitSet.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/util/ImmutableBitSet.java b/core/src/main/java/org/apache/calcite/util/ImmutableBitSet.java index 568fe3e..4f514bb 100644 --- a/core/src/main/java/org/apache/calcite/util/ImmutableBitSet.java +++ b/core/src/main/java/org/apache/calcite/util/ImmutableBitSet.java @@ -843,6 +843,15 @@ public class ImmutableBitSet return union(ImmutableBitSet.of(i)); } + /** Returns a bit set the same as this but with a given bit set (if b is + * true) or unset (if b is false). */ + public ImmutableBitSet set(int i, boolean b) { + if (get(i) == b) { + return this; + } + return b ? set(i) : clear(i); + } + /** Returns a bit set the same as this but with a given bit set if condition * is true. */ public ImmutableBitSet setIf(int bit, boolean condition) { http://git-wip-us.apache.org/repos/asf/calcite/blob/01eb6b5e/core/src/test/java/org/apache/calcite/util/ImmutableBitSetTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/calcite/util/ImmutableBitSetTest.java b/core/src/test/java/org/apache/calcite/util/ImmutableBitSetTest.java index 8894012..9ae81d0 100644 --- a/core/src/test/java/org/apache/calcite/util/ImmutableBitSetTest.java +++ b/core/src/test/java/org/apache/calcite/util/ImmutableBitSetTest.java @@ -33,6 +33,7 @@ import java.util.SortedMap; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; @@ -490,6 +491,14 @@ public class ImmutableBitSetTest { assertThat(bitSet.clearIf(29, true), equalTo(bitSet2)); } + @Test public void testSet2() { + final ImmutableBitSet bitSet = ImmutableBitSet.of(29, 4, 1969); + final ImmutableBitSet bitSet2 = ImmutableBitSet.of(29, 4, 1969, 30); + assertThat(bitSet.set(30, false), sameInstance(bitSet)); + assertThat(bitSet.set(30, true), equalTo(bitSet2)); + assertThat(bitSet.set(29, true), sameInstance(bitSet)); + } + @Test public void testShift() { final ImmutableBitSet bitSet = ImmutableBitSet.of(29, 4, 1969); assertThat(bitSet.shift(0), is(bitSet));
