MultiTreeSPEntry.java
- /* This file is part of Openrouteservice.
- *
- * Openrouteservice is free software; you can redistribute it and/or modify it under the terms of the
- * GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1
- * of the License, or (at your option) any later version.
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License along with this library;
- * if not, see <https://www.gnu.org/licenses/>.
- */
- package org.heigit.ors.routing.graphhopper.extensions.storages;
- /**
- * This class is used to create the shortest-path-tree from linked entities.
- * <p>
- */
- public class MultiTreeSPEntry implements Comparable<MultiTreeSPEntry> {
- private int adjNode;
- protected int edge;
- private boolean visited = false;
- private final MultiTreeSPEntryItem[] items;
- private double totalWeight = 0.0;
- public MultiTreeSPEntry(int adjNode, int edgeId, double edgeWeight, boolean updated, MultiTreeSPEntry parent, int numTrees) {
- this.adjNode = adjNode;
- this.edge = edgeId;
- this.items = new MultiTreeSPEntryItem[numTrees];
- double entryWeight;
- for (int i = 0; i < numTrees; ++i) {
- MultiTreeSPEntryItem item = new MultiTreeSPEntryItem();
- items[i] = item;
- entryWeight = parent == null ? Double.POSITIVE_INFINITY : parent.items[i].getWeight();
- if (entryWeight == Double.POSITIVE_INFINITY && parent != null)
- continue;
- item.setWeight(edgeWeight + entryWeight);
- item.setParent(parent);
- item.setEdge(edgeId);
- item.setOriginalEdge(edgeId);
- item.setUpdate(updated);
- totalWeight += item.getWeight();
- }
- }
- public int getAdjNode() {
- return adjNode;
- }
- public void setAdjNode(int adjNode) {
- this.adjNode = adjNode;
- }
- public int getEdge() {
- return edge;
- }
- public boolean isVisited() {
- return visited;
- }
- public void setVisited(boolean visited) {
- this.visited = visited;
- }
- public int getSize() {
- return items.length;
- }
- public MultiTreeSPEntryItem getItem(int index) {
- return items[index];
- }
- public void resetUpdate(boolean value) {
- for (int i = 0; i < items.length; i++) {
- items[i].setUpdate(value);
- }
- }
- public void updateWeights() {
- totalWeight = 0.0;
- for (int i = 0; i < items.length; i++) {
- if (items[i].getWeight() == Double.POSITIVE_INFINITY) continue;
- totalWeight += items[i].getWeight();
- }
- }
- @Override
- public int compareTo(MultiTreeSPEntry o) {
- if (totalWeight < o.totalWeight)
- return -1;
- // assumption no NaN and no -0
- return totalWeight > o.totalWeight ? 1 : 0;
- }
- @Override
- public String toString() {
- return "adjNode: " + adjNode + ", totalWeight: " + totalWeight; // TODO
- }
- }