diff options
| author | 2026-08-01 12:38:33 +0200 | |
|---|---|---|
| committer | 2026-08-01 12:38:33 +0200 | |
| commit | d475e58f5cc8838538b5d7189a58e88362d5e552 (patch) | |
| tree | 5c11045456f4d0e5b108a458e8f2126c6d08b09c /src/main/java/com/it_jaros/jscanner/PortRangeIterator.java | |
| parent | 4a51139f719df8a9a0a2f5640985c4c9b3cefd56 (diff) | |
Split Iterator from PortRange into seperate mutable class. so Portrange
is a clean Object that is immutable and can create as many iterators as
it wants without breaking.
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; + } +} |
