1 package org.matsim.core.router.speedy;
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.Collections;
13 import java.util.List;
53 this.nodeData =
new int[this.nodeCount *
SpeedyGraph.NODE_SIZE];
54 this.linkData =
new int[this.linkCount *
SpeedyGraph.LINK_SIZE];
58 Arrays.fill(this.nodeData, -1);
59 Arrays.fill(this.linkData, -1);
62 this.nodes[node.getId().index()] = node;
64 List<Id<Link>> linkIds =
new ArrayList<>(network.
getLinks().keySet());
65 Collections.sort(linkIds);
73 this.nodes[node.index()] = node.node();
79 return new SpeedyGraph(this.nodeData, this.linkData, this.nodes, this.links,
true);
86 this.nodeData =
new int[this.nodeCount *
SpeedyGraph.NODE_SIZE];
87 this.linkData =
new int[this.linkCount *
SpeedyGraph.LINK_SIZE];
91 Arrays.fill(this.nodeData, -1);
92 Arrays.fill(this.linkData, -1);
95 this.nodes[node.getId().index()] = node;
97 List<Id<Link>> linkIds =
new ArrayList<>(network.
getLinks().keySet());
98 Collections.sort(linkIds);
104 return new SpeedyGraph(this.nodeData, this.linkData, this.nodes, this.links,
false);
110 int linkIdx = link.
getId().index();
113 this.linkData[base + 2] = fromNodeIdx;
114 this.linkData[base + 3] = toNodeIdx;
115 this.linkData[base + 4] = (int) Math.round(link.
getLength() * 100.0);
121 this.links[linkIdx] = link;
125 int fromNodeIdx = -1;
127 int linkIdx = link.index;
129 if (link.fromColoredNode != null) {
130 fromNodeIdx = link.fromColoredNode.index();
132 if (link.fromNode != null) {
133 fromNodeIdx = link.fromNode.getId().index();
135 if (link.toColoredNode != null) {
136 toNodeIdx = link.toColoredNode.index();
138 if (link.toNode != null) {
139 toNodeIdx = link.toNode.getId().index();
143 this.linkData[base + 2] = fromNodeIdx;
144 this.linkData[base + 3] = toNodeIdx;
145 this.linkData[base + 4] = (int) Math.round(link.link.getLength() * 100.0);
146 this.linkData[base + 5] = (int) Math.round(link.link.getLength() / link.link.getFreespeed() * 100.0);
151 this.links[linkIdx] = link.link;
155 final int nodeI = fromNodeIdx *
SpeedyGraph.NODE_SIZE;
156 int outLinkIdx = this.nodeData[nodeI];
157 if (outLinkIdx < 0) {
158 this.nodeData[nodeI] = linkIdx;
163 lastLinkIdx = outLinkIdx;
164 outLinkIdx = this.linkData[lastLinkIdx *
SpeedyGraph.LINK_SIZE];
165 }
while (outLinkIdx >= 0);
166 this.linkData[lastLinkIdx *
SpeedyGraph.LINK_SIZE] = linkIdx;
170 final int nodeI = toNodeIdx *
SpeedyGraph.NODE_SIZE + 1;
171 int inLinkIdx = this.nodeData[nodeI];
173 this.nodeData[nodeI] = linkIdx;
178 lastLinkIdx = inLinkIdx;
179 inLinkIdx = this.linkData[lastLinkIdx *
SpeedyGraph.LINK_SIZE + 1];
180 }
while (inLinkIdx >= 0);
181 this.linkData[lastLinkIdx *
SpeedyGraph.LINK_SIZE + 1] = linkIdx;
static< T > int getNumberOfIds(final Class< T > type)
static boolean hasTurnRestrictions(Network network)
Map< Id< Node >, ? extends Node > getNodes()
SpeedyGraph buildWithoutTurnRestrictions(Network network)
static TurnRestrictionsContext build(Network network)
void setOutLink(int fromNodeIdx, int linkIdx)
List< ColoredNode > coloredNodes
static DisallowedNextLinks getDisallowedNextLinks(Link link)
record ColoredNode(int index, Node node, List< ColoredLink > outLinks, List< ColoredLink > inLinks)
static SpeedyGraph build(Network network)
void addLink(TurnRestrictionsContext.ColoredLink link)
List< ColoredLink > coloredLinks
SpeedyGraph buildWithTurnRestrictions(Network network)
Map< Id< Link >, ? extends Link > getLinks()
Map< Id< Link >, ColoredLink > replacedLinks
void setInLink(int toNodeIdx, int linkIdx)