From 1c6e35b2ca98037fc487099addddc73f6cbaab61 Mon Sep 17 00:00:00 2001 From: leventov Date: Fri, 2 Dec 2016 13:18:37 -0600 Subject: [PATCH] Deduplicate looking for bitset.nextSetBit() in BitSetIterator.next() and hasNext() --- .../bitmap/WrappedImmutableBitSetBitmap.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/metamx/collections/bitmap/WrappedImmutableBitSetBitmap.java b/src/main/java/com/metamx/collections/bitmap/WrappedImmutableBitSetBitmap.java index e59c0c1..faea08c 100644 --- a/src/main/java/com/metamx/collections/bitmap/WrappedImmutableBitSetBitmap.java +++ b/src/main/java/com/metamx/collections/bitmap/WrappedImmutableBitSetBitmap.java @@ -20,6 +20,7 @@ import java.nio.ByteBuffer; import java.util.BitSet; +import java.util.NoSuchElementException; /** * WrappedImmutableBitSetBitmap implements ImmutableBitmap for java.util.BitSet @@ -47,18 +48,27 @@ public WrappedImmutableBitSetBitmap(ByteBuffer byteBuffer){ private class BitSetIterator implements IntIterator { - private int pos = -1; + private int nextPos; + + BitSetIterator() + { + nextPos = bitmap.nextSetBit(0); + } @Override public boolean hasNext() { - return bitmap.nextSetBit(pos + 1) >= 0; + return nextPos >= 0; } @Override public int next() { - pos = bitmap.nextSetBit(pos + 1); + int pos = nextPos; + if (pos < 0) { + throw new NoSuchElementException(); + } + nextPos = bitmap.nextSetBit(pos + 1); return pos; } @@ -66,7 +76,7 @@ public int next() public IntIterator clone() { BitSetIterator newIt = new BitSetIterator(); - newIt.pos = pos; + newIt.nextPos = nextPos; return newIt; } }