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 dc4e4760cb7c56e7775da70ece04f706382d99d9..49c4dfa99bce5f743aaad254f2bac70f93d8bddf 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java @@ -5,6 +5,7 @@ import it.unibz.inf.isochrone.db.Database; import it.unibz.inf.isochrone.network.AbstractOutput; import it.unibz.inf.isochrone.network.IOutput; import it.unibz.inf.isochrone.network.Link; +import it.unibz.inf.isochrone.network.LinkCollection; import it.unibz.inf.isochrone.network.Location; import it.unibz.inf.isochrone.network.MemoryOutput; import it.unibz.inf.isochrone.network.Node; @@ -161,19 +162,18 @@ public abstract class Isochrone { NodeConnection dConnections = null; while ((node = nodeQueue.poll()) != null) { final int nodeId = node.getId(); - new NodeConnection(node); - final Collection<Link> targets = calcAdjLinks(nodeId); + final LinkCollection links = new LinkCollection(calcAdjLinks(nodeId)); output.addNode(node); node.close(); - cConnections = prepareContinuousLinks(node, targets); + cConnections = prepareContinuousLinks(node, links); updateNodeQueue(expandContinuousLinks(cConnections)); - dConnections = prepareDiscreteLinks(node, targets); + dConnections = prepareDiscreteLinks(node, links); updateNodeQueue(expandDiscreteLinks(dConnections)); - addLinks(output, targets); + output.addLinks(links.getContinuousTargets()); if (qIsExpiring && node.isExpired()) { removeNode(nodeId); } @@ -223,7 +223,7 @@ public abstract class Isochrone { } } else { nConnection.addLink(targetNode, link); - } + } } /** @@ -359,26 +359,25 @@ public abstract class Isochrone { } } - private NodeConnection prepareContinuousLinks(final Node node, final Collection<Link> links) { + private NodeConnection prepareContinuousLinks(final Node node, final LinkCollection links) { final NodeConnection nConnection = new NodeConnection(node); final double nodeDistance = node.getDistance(); - for (final Link link : links) { - if (link.isContinuous()) { - prepareLinkOffsets(link, nodeDistance); - addTargetNode(nConnection, node, link); - } + final Collection<Link> cLinks = links.getContinuousTargets(); + for (final Link link : cLinks) { + prepareLinkOffsets(link, nodeDistance); + addTargetNode(nConnection, node, link); } return nConnection; } - private NodeConnection prepareDiscreteLinks(final Node node, final Collection<Link> links) { + private NodeConnection prepareDiscreteLinks(final Node node, final LinkCollection links) { final NodeConnection nConnection = new NodeConnection(node); - for (final Link link : links) { - if (!link.isContinuous()) { - addTargetNode(nConnection, node, link); - } + + final Collection<Link> dLinks = links.getDiscreteTargets(); + for (final Link link : dLinks) { + addTargetNode(nConnection, node, link); } return nConnection; @@ -427,14 +426,4 @@ public abstract class Isochrone { } } - // Private static methods - - private static <T extends IOutput> void addLinks(final T output, final Collection<Link> links) { - final Double min = Double.MIN_VALUE; - for (final Link link : links) { - if (link.isContinuous() && !min.equals(link.getStartOffset())) { - output.addLink(link); - } - } - } } diff --git a/src/main/java/it/unibz/inf/isochrone/network/LinkCollection.java b/src/main/java/it/unibz/inf/isochrone/network/LinkCollection.java new file mode 100644 index 0000000000000000000000000000000000000000..f8a6f79e344a388b827b9c628af4b9bfc20d2690 --- /dev/null +++ b/src/main/java/it/unibz/inf/isochrone/network/LinkCollection.java @@ -0,0 +1,31 @@ +package it.unibz.inf.isochrone.network; + +import java.util.ArrayList; +import java.util.Collection; + +public class LinkCollection { + private final Collection<Link> cTargets; + private final Collection<Link> dTargets; + + public LinkCollection(final Collection<Link> links) { + cTargets = new ArrayList<>(); + dTargets = new ArrayList<>(); + + for (final Link l : links) { + if (l.isContinuous()) { + cTargets.add(l); + } else { + dTargets.add(l); + } + } + } + + public Collection<Link> getContinuousTargets() { + return cTargets; + } + + public Collection<Link> getDiscreteTargets() { + return dTargets; + } + +}