if (!allowsParallelEdges()) { checkArgument( !(connectionsU != null && connectionsU.successors().contains(nodeV)), PARALLEL_EDGES_NOT_ALLOWED, nodeU, connectionsU = addNodeInternal(nodeU); connectionsU.addOutEdge(edge, nodeV); NetworkConnections<N, E> connectionsV = nodeConnections.get(nodeV); if (connectionsV == null) { connectionsV = addNodeInternal(nodeV); connectionsV.addInEdge(edge, nodeU, isSelfLoop); edgeToReferenceNode.put(edge, nodeU); return true;
@Override @CanIgnoreReturnValue public boolean removeEdge(E edge) { checkNotNull(edge, "edge"); N nodeU = edgeToReferenceNode.get(edge); if (nodeU == null) { return false; } NetworkConnections<N, E> connectionsU = nodeConnections.get(nodeU); N nodeV = connectionsU.adjacentNode(edge); NetworkConnections<N, E> connectionsV = nodeConnections.get(nodeV); connectionsU.removeOutEdge(edge); connectionsV.removeInEdge(edge, allowsSelfLoops() && nodeU.equals(nodeV)); edgeToReferenceNode.remove(edge); return true; }
@Override public Set<N> adjacentNodes(N node) { return checkedConnections(node).adjacentNodes(); }
@Override public Set<E> incidentEdges(N node) { return checkedConnections(node).incidentEdges(); }
@Override public Set<E> edgesConnecting(N nodeU, N nodeV) { NetworkConnections<N, E> connectionsU = checkedConnections(nodeU); if (!allowsSelfLoops && nodeU == nodeV) { // just an optimization, only check reference equality return ImmutableSet.of(); } checkArgument(containsNode(nodeV), NODE_NOT_IN_GRAPH, nodeV); return connectionsU.edgesConnecting(nodeV); }
@Override public EndpointPair<N> incidentNodes(E edge) { N nodeU = checkedReferenceNode(edge); N nodeV = nodeConnections.get(nodeU).adjacentNode(edge); return EndpointPair.of(this, nodeU, nodeV); }
@Override public Set<E> outEdges(N node) { return checkedConnections(node).outEdges(); }
@Override public Set<N> predecessors(N node) { return checkedConnections(node).predecessors(); }
@Override public Set<E> inEdges(N node) { return checkedConnections(node).inEdges(); }
@Override public Set<E> incidentEdges(N node) { return checkedConnections(node).incidentEdges(); }
@Override public Set<E> edgesConnecting(N nodeU, N nodeV) { NetworkConnections<N, E> connectionsU = checkedConnections(nodeU); if (!allowsSelfLoops && nodeU == nodeV) { // just an optimization, only check reference equality return ImmutableSet.of(); } checkArgument(containsNode(nodeV), NODE_NOT_IN_GRAPH, nodeV); return connectionsU.edgesConnecting(nodeV); }
@Override public EndpointPair<N> incidentNodes(E edge) { N nodeU = checkedReferenceNode(edge); N nodeV = nodeConnections.get(nodeU).adjacentNode(edge); return EndpointPair.of(this, nodeU, nodeV); }
@Override public Set<E> outEdges(N node) { return checkedConnections(node).outEdges(); }
@Override public Set<N> predecessors(N node) { return checkedConnections(node).predecessors(); }
@Override public Set<E> inEdges(N node) { return checkedConnections(node).inEdges(); }
@Override @CanIgnoreReturnValue public boolean removeEdge(E edge) { checkNotNull(edge, "edge"); N nodeU = edgeToReferenceNode.get(edge); if (nodeU == null) { return false; } NetworkConnections<N, E> connectionsU = nodeConnections.get(nodeU); N nodeV = connectionsU.adjacentNode(edge); NetworkConnections<N, E> connectionsV = nodeConnections.get(nodeV); connectionsU.removeOutEdge(edge); connectionsV.removeInEdge(edge, allowsSelfLoops() && nodeU.equals(nodeV)); edgeToReferenceNode.remove(edge); return true; }
if (!allowsParallelEdges()) { checkArgument( !(connectionsU != null && connectionsU.successors().contains(nodeV)), PARALLEL_EDGES_NOT_ALLOWED, nodeU, connectionsU = addNodeInternal(nodeU); connectionsU.addOutEdge(edge, nodeV); NetworkConnections<N, E> connectionsV = nodeConnections.get(nodeV); if (connectionsV == null) { connectionsV = addNodeInternal(nodeV); connectionsV.addInEdge(edge, nodeU, isSelfLoop); edgeToReferenceNode.put(edge, nodeU); return true;
@Override public Set<E> incidentEdges(N node) { return checkedConnections(node).incidentEdges(); }
@Override public Set<E> edgesConnecting(N nodeU, N nodeV) { NetworkConnections<N, E> connectionsU = checkedConnections(nodeU); if (!allowsSelfLoops && nodeU == nodeV) { // just an optimization, only check reference equality return ImmutableSet.of(); } checkArgument(containsNode(nodeV), NODE_NOT_IN_GRAPH, nodeV); return connectionsU.edgesConnecting(nodeV); }
@Override public EndpointPair<N> incidentNodes(E edge) { N nodeU = checkedReferenceNode(edge); N nodeV = nodeConnections.get(nodeU).adjacentNode(edge); return EndpointPair.of(this, nodeU, nodeV); }