From d475e58f5cc8838538b5d7189a58e88362d5e552 Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Sat, 1 Aug 2026 12:38:33 +0200 Subject: 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. --- src/main/java/com/it_jaros/jscanner/PortRange.java | 36 ++-------------------- 1 file changed, 3 insertions(+), 33 deletions(-) (limited to 'src/main/java/com/it_jaros/jscanner/PortRange.java') diff --git a/src/main/java/com/it_jaros/jscanner/PortRange.java b/src/main/java/com/it_jaros/jscanner/PortRange.java index 9e66371..3a735c5 100644 --- a/src/main/java/com/it_jaros/jscanner/PortRange.java +++ b/src/main/java/com/it_jaros/jscanner/PortRange.java @@ -2,17 +2,12 @@ package com.it_jaros.jscanner; import java.util.BitSet; import java.util.Iterator; -import java.util.NoSuchElementException; -public class PortRange implements Iterator { +public class PortRange { public static final int MIN_PORT = 1; public static final int MAX_PORT = 65535; private final BitSet specifiedPorts = new BitSet(MAX_PORT); - private final BitSet availablePorts = new BitSet(MAX_PORT); - - private int currentPortCursor; - private int done = 0; public PortRange(String ports) { if (ports == null || "".equals(ports)) { @@ -22,9 +17,6 @@ public class PortRange implements Iterator { } else { parsePortRange(ports); } - - availablePorts.or(specifiedPorts); - currentPortCursor = availablePorts.nextSetBit(MIN_PORT); } /** @@ -80,29 +72,7 @@ public class PortRange implements Iterator { } } - @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; - } - - public int getTotal() { - return specifiedPorts.cardinality(); - } - - public int getDone() { - return done; + public Iterator iterator() { + return new PortRangeIterator(specifiedPorts); } } \ No newline at end of file -- cgit v1.3.1