package com.it_jaros.jscanner; import java.util.BitSet; import java.util.Iterator; import java.util.NoSuchElementException; import static com.it_jaros.jscanner.PortRange.MAX_PORT; import static com.it_jaros.jscanner.PortRange.MIN_PORT; public class PortRangeIterator implements Iterator { private int currentPortCursor; private int done = 0; private final BitSet availablePorts = new BitSet(MAX_PORT); PortRangeIterator(BitSet specifiedPorts) { availablePorts.or(specifiedPorts); currentPortCursor = availablePorts.nextSetBit(MIN_PORT); } @Override public Integer next() { int p = availablePorts.nextSetBit(currentPortCursor); if (p > 0) { availablePorts.clear(p); currentPortCursor = p + 1; done++; return p; } throw new NoSuchElementException("Reached end of port range"); } @Override public boolean hasNext() { return availablePorts.nextSetBit(currentPortCursor) > 0; } }