@Override public final long getFlags() { if (isShortcut()) throw new IllegalStateException("Shortcut should not need to return raw flags!"); return getDirectFlags(); }
@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); }
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 protected final boolean checkRange() { if (isShortcut()) return edgeId < shortcutCount; if (super.checkRange()) return true; // iterate over shortcuts edgeAccess = chEdgeAccess; edgeId = 0; edgePointer = (long) edgeId * shortcutEntryBytes; return edgeId < shortcutCount; }
@Override public AllCHEdgesIterator getAllEdges() { return new AllCHEdgesIteratorImpl(baseGraph); }
@Override public AllCHEdgesIterator getAllEdges() { return new AllCHEdgesIteratorImpl(baseGraph); }
@Override public int getMergeStatus(long flags) { return PrepareEncoder.getScMergeStatus(getDirectFlags(), flags); }
@Override public int getEdge() { if (isShortcut()) return baseGraph.edgeCount + edgeId; return super.getEdge(); }
@Override public int getMergeStatus(long flags) { return PrepareEncoder.getScMergeStatus(getDirectFlags(), flags); } }
@Override public final int getSkippedEdge1() { checkShortcut(true, "getSkippedEdge1"); return shortcuts.getInt(edgePointer + S_SKIP_EDGE1); }
@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 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 protected final boolean checkRange() { if (isShortcut()) return edgeId < shortcutCount; if (super.checkRange()) return true; // iterate over shortcuts edgeAccess = chEdgeAccess; edgeId = 0; edgePointer = (long) edgeId * shortcutEntryBytes; return edgeId < shortcutCount; }
@Override public int getEdge() { if (isShortcut()) return baseGraph.edgeCount + edgeId; return super.getEdge(); }
@Override public final int getSkippedEdge2() { checkShortcut(true, "getSkippedEdge2"); return shortcuts.getInt(edgePointer + S_SKIP_EDGE2); }
@Override public AllCHEdgesIterator getAllEdges() { return new AllCHEdgesIteratorImpl(baseGraph); }
@Override public boolean canBeOverwritten( long flags ) { return PrepareEncoder.canBeOverwritten(getDirectFlags(), flags); } }
@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 isBackward( FlagEncoder encoder ) { assert encoder == weighting.getFlagEncoder() : encoder + " vs. " + weighting.getFlagEncoder(); if (isShortcut()) return (getDirectFlags() & PrepareEncoder.getScBwdDir()) != 0; return encoder.isBackward(getDirectFlags()); }