1 package org.matsim.core.population.routes.heavycompressed;
9 import java.util.ArrayList;
10 import java.util.HashSet;
11 import java.util.List;
55 if (this.uncompressedLength < 0) {
56 return new ArrayList<>(0);
61 if ((previousLinkId == null) || (endLinkId == null)) {
64 if (previousLinkId.equals(endLinkId) && this.uncompressedLength == 0) {
68 for (
int linkIndex : route) {
72 previousLinkId = linkId;
83 Link nextLink = allLinks[nextLinkId.
index()];
89 linkId = subsequentLinks[linkId.
index()].
getId();
99 Set<Id<Node>> visitedNodes =
new HashSet<>();
100 Set<Id<Node>> multiplyVisitedNodes =
new HashSet<>();
103 if ((srcRoute == null) || (srcRoute.size() == 0)) {
104 this.uncompressedLength = 0;
109 int[] route =
new int[srcRoute.size()];
111 Id<Link> previousLinkId = startLinkId;
113 Link link = links[linkId.index()];
115 if (!visitedNodes.add(fromNodeId)) {
117 multiplyVisitedNodes.add(fromNodeId);
119 if (!subsequentLinks[previousLinkId.
index()].
getId().equals(linkId)) {
120 route[pos] = linkId.index();
123 previousLinkId = linkId;
127 if (!visitedNodes.add(fromNodeId)) {
129 multiplyVisitedNodes.add(fromNodeId);
132 if (!multiplyVisitedNodes.isEmpty()) {
136 previousLinkId = startLinkId;
138 Link link = links[linkId.index()];
140 if (!subsequentLinks[previousLinkId.
index()].
getId().equals(linkId) || multiplyVisitedNodes.contains(fromNodeId)) {
141 route[pos] = linkId.index();
144 previousLinkId = linkId;
149 this.uncompressedLength = srcRoute.size();
static< T > Id< T > get(int index, final Class< T > type)
static long decode(ByteBuffer bb)
void setStartLinkId(Id< Link > linkId)
void getLinksTillLink(final List< Id< Link >> links, final Id< Link > nextLinkId, final Id< Link > startLinkId)
Id< Link > getEndLinkId()
static final byte [] EMPTY_ROUTE
void setLinkIds(final Id< Link > startLinkId, final List< Id< Link >> srcRoute, final Id< Link > endLinkId)
static void encode(ByteBuffer bb, long x)
final HeavyCompressedNetworkRouteFactory.CompressionData compressionData
Id< Link > getStartLinkId()
HeavyCompressedNetworkRoute(Id< Link > startLinkId, Id< Link > endLinkId, HeavyCompressedNetworkRouteFactory.CompressionData compressionData)
void setEndLinkId(Id< Link > linkId)
HeavyCompressedNetworkRoute clone()
List< Id< Link > > getLinkIds()