/** * */ package iamrescue.routing.dijkstra; import org.jgrapht.util.FibonacciHeapNode; /** * @author Sebastian * */ public class ExperimentalDijkstraSearchNode { public static final double DEFAULT_COST = Double.POSITIVE_INFINITY; public static final int DEFAULT_PREDECESSOR = -1; public static final FibonacciHeapNode<Integer> DEFAULT_HEAP_NODE = null; public static final boolean DEFAULT_TERMINAL_NODE = false; private NodeValidator validator; private double cost = DEFAULT_COST; private int predecessor = DEFAULT_PREDECESSOR; private FibonacciHeapNode<Integer> heapNode = DEFAULT_HEAP_NODE; private int valueValidity; private boolean terminalNode = DEFAULT_TERMINAL_NODE; private int terminalValidity; public ExperimentalDijkstraSearchNode(NodeValidator validator) { this.validator = validator; invalidate(); } public void setValues(double cost, int predecessor, FibonacciHeapNode<Integer> heapNode) { this.cost = cost; this.predecessor = predecessor; this.heapNode = heapNode; valueValidity = validator.getCurrentIteration(); } public void setTerminal(boolean terminal) { this.terminalNode = terminal; terminalValidity = validator.getCurrentIteration(); } public void invalidate() { valueValidity = Integer.MIN_VALUE; terminalValidity = Integer.MIN_VALUE; } /** * @return the cost */ public double getCost() { if (valueValidity < validator.getCurrentIteration()) { return DEFAULT_COST; } else { return cost; } } /** * @return the heapNode */ public FibonacciHeapNode<Integer> getHeapNode() { if (valueValidity < validator.getCurrentIteration()) { return DEFAULT_HEAP_NODE; } else { return heapNode; } } /** * @return the predecessor */ public int getPredecessor() { if (valueValidity < validator.getCurrentIteration()) { return DEFAULT_PREDECESSOR; } else { return predecessor; } } /** * @return the terminalNode */ public boolean isTerminalNode() { if (terminalValidity < validator.getCurrentIteration()) { return DEFAULT_TERMINAL_NODE; } else { return terminalNode; } } public void markVisited() { this.heapNode = null; } }