@Override public CHEdgeIteratorState edge(int a, int b) { // increase edge array not for shortcuts baseGraph.ensureNodeIndex(Math.max(a, b)); int edgeId = baseGraph.edgeAccess.internalEdgeAdd(baseGraph.nextEdgeId(), a, b); CHEdgeIteratorImpl iter = new CHEdgeIteratorImpl(baseGraph, baseGraph.edgeAccess, EdgeFilter.ALL_EDGES); boolean ret = iter.init(edgeId, b); assert ret; return iter; }
@Override public final void setSkippedEdges(int edge1, int edge2) { checkShortcut(true, "setSkippedEdges"); if (EdgeIterator.Edge.isValid(edge1) != EdgeIterator.Edge.isValid(edge2)) { throw new IllegalStateException("Skipped edges of a shortcut needs " + "to be both valid or invalid but they were not " + edge1 + ", " + edge2); } shortcuts.setInt(edgePointer + S_SKIP_EDGE1, edge1); shortcuts.setInt(edgePointer + S_SKIP_EDGE2, edge2); }
public void checkShortcut(boolean shouldBeShortcut, String methodName) { if (isShortcut()) { if (!shouldBeShortcut) throw new IllegalStateException("Cannot call " + methodName + " on shortcut " + getEdge()); } else if (shouldBeShortcut) throw new IllegalStateException("Method " + methodName + " only for shortcuts " + getEdge()); }
@Override public CHEdgeIteratorState shortcut( int a, int b ) { if (!baseGraph.isFrozen()) throw new IllegalStateException("Cannot create shortcut if graph is not yet frozen"); checkNodeId(a); checkNodeId(b); int scId = chEdgeAccess.internalEdgeAdd(nextShortcutId(), a, b); CHEdgeIteratorImpl iter = new CHEdgeIteratorImpl(baseGraph, chEdgeAccess, EdgeFilter.ALL_EDGES); boolean ret = iter.init(scId, b); assert ret; iter.setSkippedEdges(EdgeIterator.NO_EDGE, EdgeIterator.NO_EDGE); return iter; }
@Override final EdgeIterable createSingleEdge(EdgeFilter edgeFilter) { return new CHEdgeIteratorImpl(baseGraph, this, edgeFilter); }
@Override public final PointList fetchWayGeometry(int mode) { checkShortcut(false, "fetchWayGeometry"); return super.fetchWayGeometry(mode); }
@Override public final EdgeIteratorState setName(String name) { checkShortcut(false, "setName"); return super.setName(name); }
@Override public final double getWeight() { checkShortcut(true, "getWeight"); return CHGraphImpl.this.getWeight(this); }
@Override public final CHEdgeIteratorState setWeight(double weight) { checkShortcut(true, "setWeight"); CHGraphImpl.this.setWeight(this, weight); return this; }
@Override public final void setSkippedEdges(int edge1, int edge2) { checkShortcut(true, "setSkippedEdges"); if (EdgeIterator.Edge.isValid(edge1) != EdgeIterator.Edge.isValid(edge2)) { throw new IllegalStateException("Skipped edges of a shortcut needs " + "to be both valid or invalid but they were not " + edge1 + ", " + edge2); } shortcuts.setInt(edgePointer + S_SKIP_EDGE1, edge1); shortcuts.setInt(edgePointer + S_SKIP_EDGE2, edge2); }
@Override public final double getWeight() { checkShortcut(true, "getWeight"); return CHGraphImpl.this.getWeight(this); }
@Override public final CHEdgeIteratorState setWeight( double weight ) { checkShortcut(true, "setWeight"); CHGraphImpl.this.setWeight(this, weight); return this; }
@Override public final int getSkippedEdge2() { checkShortcut(true, "getSkippedEdge2"); return shortcuts.getInt(edgePointer + S_SKIP_EDGE2); }
@Override public final long getFlags() { checkShortcut(false, "getFlags"); return super.getDirectFlags(); }
@Override public CHEdgeExplorer createEdgeExplorer( EdgeFilter filter ) { return new CHEdgeIteratorImpl(baseGraph, chEdgeAccess, filter); }
@Override public CHEdgeExplorer createEdgeExplorer(EdgeFilter filter) { return new CHEdgeIteratorImpl(baseGraph, chEdgeAccess, filter); }
@Override public boolean isForward(FlagEncoder encoder) { assert encoder == weighting.getFlagEncoder() : encoder + " vs. " + weighting.getFlagEncoder(); if (isShortcut()) return (getDirectFlags() & PrepareEncoder.getScFwdDir()) != 0; return encoder.isForward(getDirectFlags()); }
@Override public boolean isBackward(FlagEncoder encoder) { assert encoder == weighting.getFlagEncoder() : encoder + " vs. " + weighting.getFlagEncoder(); if (isShortcut()) return (getDirectFlags() & PrepareEncoder.getScBwdDir()) != 0; return encoder.isBackward(getDirectFlags()); }
@Override public boolean isForward( FlagEncoder encoder ) { assert encoder == weighting.getFlagEncoder() : encoder + " vs. " + weighting.getFlagEncoder(); if (isShortcut()) return (getDirectFlags() & PrepareEncoder.getScFwdDir()) != 0; return encoder.isForward(getDirectFlags()); }
@Override public boolean isForward(FlagEncoder encoder) { assert encoder == weighting.getFlagEncoder() : encoder + " vs. " + weighting.getFlagEncoder(); if (isShortcut()) return (getDirectFlags() & PrepareEncoder.getScFwdDir()) != 0; return encoder.isForward(getDirectFlags()); }