/** * @param i iterator we wish to iterate over * @return an iterator over the set bits corresponding to the iterator */ public static IntIterator toSetBitsIntIterator(final IteratingRLW32 i) { return new IntIteratorOverIteratingRLW32(i); }
/** * @param p iterator we wish to iterate over */ public IntIteratorOverIteratingRLW32(final IteratingRLW32 p) { this.parent = p; this.position = 0; setupForCurrentRunningLengthWord(); this.hasNext = moveToNext(); }
/** * @return whether we could find another set bit; don't move if there is * an unprocessed value */ private boolean moveToNext() { while (!runningHasNext() && !literalHasNext()) { if (this.parent.next()) setupForCurrentRunningLengthWord(); else return false; } return true; }
@Override public final int next() { final int answer; if (runningHasNext()) { answer = this.position++; } else { final int t = this.word & -this.word; answer = this.literalPosition + Integer.bitCount(t - 1); this.word ^= t; } this.hasNext = this.moveToNext(); return answer; }
/** * @return whether we could find another set bit; don't move if there is * an unprocessed value */ private boolean moveToNext() { while (!runningHasNext() && !literalHasNext()) { if (this.parent.next()) setupForCurrentRunningLengthWord(); else return false; } return true; }
@Override public final int next() { final int answer; if (runningHasNext()) { answer = this.position++; } else { final int t = this.word & -this.word; answer = this.literalPosition + Integer.bitCount(t - 1); this.word ^= t; } this.hasNext = this.moveToNext(); return answer; }
/** * @param p iterator we wish to iterate over */ public IntIteratorOverIteratingRLW32(final IteratingRLW32 p) { this.parent = p; this.position = 0; setupForCurrentRunningLengthWord(); this.hasNext = moveToNext(); }
/** * @param i iterator we wish to iterate over * @return an iterator over the set bits corresponding to the iterator */ public static IntIterator toSetBitsIntIterator(final IteratingRLW32 i) { return new IntIteratorOverIteratingRLW32(i); }