@Override public final N getTip(E edge, EdgeTip tip) { return delegate.getTip(edge, tip); } }
@Override public final N getTip(E edge, EdgeTip tip) { return delegate.getTip(edge, tip); }
@Override public final N getTip(E edge, EdgeTip tip) { return delegate.getTip(edge, tip); }
public final Collection<N> getNodes(N node, EdgeDirection direction) { final List<N> nodes = new ArrayList<>(); final EdgeTip tip = direction == EdgeDirection.INGOING ? EdgeTip.SOURCE : EdgeTip.TARGET; for (final E edge : adapter.getEdges(node, direction)) { nodes.add(adapter.getTip(edge, tip)); } return nodes; }
public final boolean hasEdge(N source, N target) { for (final E edge : adapter.getEdges(source, EdgeDirection.OUTGOING)) { if (adapter.getTip(edge, EdgeTip.TARGET) == target) { return true; } } return false; }
@Override public final void removeEdges(N source, N target) { for (final E edge : delegate.getEdges(source, EdgeDirection.OUTGOING)) { final N tgt = delegate.getTip(edge, EdgeTip.TARGET); if (target == tgt) { removedEdges.add(edge); } } }
@Override public final void removeEdges(N source, N target) { for (final E edge : delegate.getEdges(source, EdgeDirection.OUTGOING)) { final N tgt = delegate.getTip(edge, EdgeTip.TARGET); if (target == tgt) { edges.remove(edge); } } }
public FilteredSubGraph(GraphAdapter<N, E> delegate) { Checks.isNotNull(delegate, "delegate"); this.delegate = delegate; this.checkedEdgePredicate = input -> { final boolean pass = edgePredicate.test(input); if (pass) { // If the edge is accepted, both tips must be accepted final boolean sourceMismatch = !nodePredicate.test(delegate.getTip(input, EdgeTip.SOURCE)); final boolean targetMismatch = !nodePredicate.test(delegate.getTip(input, EdgeTip.TARGET)); if (sourceMismatch || targetMismatch) { throw new GraphConsistencyError("Edge is accepted, but its source or target is not"); } } return pass; }; }
private final boolean visit(final N node) { if (critical.contains(node)) { return true; } else { critical.add(node); for (final E edge : adapter.getEdges(node, EdgeDirection.OUTGOING)) { final N successor = adapter.getTip(edge, EdgeTip.TARGET); final boolean found = visit(successor); if (found) { return true; } } critical.remove(node); visited.add(node); return false; } } }
@Override public final N getTip(E edge, EdgeTip tip) { Checks.isNotNull(tip, "tip"); return delegate.getTip(edge, tip.opposite()); } }
void write(GvWriter writer) throws IOException { writer.beginGraph("g", true, null); for (final N node : adapter.getNodes()) { writer.addNode(getNodeId(node), getNodeAttributes(node, basic)); } for (final E edge : adapter.getEdges()) { writer.addEdge(getNodeId(adapter.getTip(edge, EdgeTip.SOURCE)), getNodeId(adapter.getTip(edge, EdgeTip.TARGET)), getEdgeAttributes(edge)); } writer.endGraph(); } }
private void addOutgoingClosure(N node, ExplicitSubGraph<N, E> result) { if (!result.containsNode(node)) { result.addNode(node); for (final E edge : adapter.getEdges(node, EdgeDirection.OUTGOING)) { if (!result.containsEdge(edge)) { final N target = adapter.getTip(edge, EdgeTip.TARGET); addOutgoingClosure(target, result); result.addEdge(edge); } } } }
private void addIngoingClosure(N node, ExplicitSubGraph<N, E> result) { if (!result.containsNode(node)) { result.addNode(node); for (final E edge : adapter.getEdges(node, EdgeDirection.INGOING)) { if (!result.containsEdge(edge)) { final N source = adapter.getTip(edge, EdgeTip.SOURCE); addIngoingClosure(source, result); result.addEdge(edge); } } } }