diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java index d2af9c871d02dea1e00cb1dea9f0caa84e770fec..c0be9b10fc3e3d584f5162008178023a531585f0 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java @@ -166,25 +166,8 @@ public abstract class Isochrone { qStartNodes.initialize(output); Node node = null; - NodeConnection cConnections = null; - NodeConnection dConnections = null; while ((node = nodeQueue.poll()) != null) { - final int nodeId = node.getId(); - - final Collection<Link> links = calcAdjLinks(nodeId); - output.addNode(node); - node.close(); - - cConnections = prepareContinuousLinks(node, links); - updateNodeQueue(expandContinuousLinks(cConnections)); - - dConnections = prepareDiscreteLinks(node, links); - updateNodeQueue(expandDiscreteLinks(dConnections)); - - output.addLinks(links.stream().filter(PREDICATE_LINK_CONT)); - if (qIsExpiring && node.isExpired()) { - removeNode(nodeId); - } + expandNode(output, node); } output.addNodes(getNodes()); @@ -298,6 +281,25 @@ public abstract class Isochrone { return results; } + private <T extends AbstractOutput> void expandNode(final T output, final Node node) { + final int nodeId = node.getId(); + + final Collection<Link> links = calcAdjLinks(nodeId); + output.addNode(node); + node.close(); + + final NodeConnection cConnections = prepareContinuousLinks(node, links); + updateNodeQueue(expandContinuousLinks(cConnections)); + + final NodeConnection dConnections = prepareDiscreteLinks(node, links); + updateNodeQueue(expandDiscreteLinks(dConnections)); + + output.addLinks(links.stream().filter(PREDICATE_LINK_CONT)); + if (qIsExpiring && node.isExpired()) { + removeNode(nodeId); + } + } + /** * Gets date codes for a given time. *