diff options
Diffstat (limited to 'src/main/java/com/it_jaros/jscanner/PortRangeIterator.java')
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/PortRangeIterator.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/PortRangeIterator.java b/src/main/java/com/it_jaros/jscanner/PortRangeIterator.java new file mode 100644 index 0000000..6690957 --- /dev/null +++ b/src/main/java/com/it_jaros/jscanner/PortRangeIterator.java @@ -0,0 +1,38 @@ +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<Integer> { + + 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; + } +} |
