@Override public Set<N> adjacentNodes(N node) { return AbstractNetwork.this.adjacentNodes(node); }
/** Returns a string representation of this network. */ @Override public String toString() { return "isDirected: " + isDirected() + ", allowsParallelEdges: " + allowsParallelEdges() + ", allowsSelfLoops: " + allowsSelfLoops() + ", nodes: " + nodes() + ", edges: " + edgeIncidentNodesMap(this); }
@Override public Set<E> edgesConnecting(N nodeU, N nodeV) { Set<E> outEdgesU = outEdges(nodeU); Set<E> inEdgesV = inEdges(nodeV); return outEdgesU.size() <= inEdgesV.size() ? unmodifiableSet(Sets.filter(outEdgesU, connectedPredicate(nodeU, nodeV))) : unmodifiableSet(Sets.filter(inEdgesV, connectedPredicate(nodeV, nodeU))); }
@Override public int inDegree(N node) { return isDirected() ? inEdges(node).size() : degree(node); }
@Override public int outDegree(N node) { return isDirected() ? outEdges(node).size() : degree(node); }
@Override public int degree(N node) { if (isDirected()) { return IntMath.saturatedAdd(inEdges(node).size(), outEdges(node).size()); } else { return IntMath.saturatedAdd(incidentEdges(node).size(), edgesConnecting(node, node).size()); } }
@Override public final boolean equals(@Nullable Object obj) { if (obj == this) { return true; } if (!(obj instanceof Network)) { return false; } Network<?, ?> other = (Network<?, ?>) obj; return isDirected() == other.isDirected() && nodes().equals(other.nodes()) && edgeIncidentNodesMap(this).equals(edgeIncidentNodesMap(other)); }
@Override public Set<E> adjacentEdges(E edge) { EndpointPair<N> endpointPair = incidentNodes(edge); // Verifies that edge is in this network. Set<E> endpointPairIncidentEdges = Sets.union(incidentEdges(endpointPair.nodeU()), incidentEdges(endpointPair.nodeV())); return Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge)); }
@Override public boolean hasEdgeConnecting(N nodeU, N nodeV) { return !edgesConnecting(nodeU, nodeV).isEmpty(); }
@Override public boolean apply(E edge) { return incidentNodes(edge).adjacentNode(nodePresent).equals(nodeToCheck); } };
@Override public boolean allowsSelfLoops() { return AbstractNetwork.this.allowsSelfLoops(); }
@Override public final int hashCode() { return edgeIncidentNodesMap(this).hashCode(); }
@Override public Set<EndpointPair<N>> edges() { if (allowsParallelEdges()) { return super.edges(); // Defer to AbstractGraph implementation.
@Override public Set<E> edgesConnecting(EndpointPair<N> endpoints) { validateEndpoints(endpoints); return edgesConnecting(endpoints.nodeU(), endpoints.nodeV()); }
@Override public boolean hasEdgeConnecting(EndpointPair<N> endpoints) { checkNotNull(endpoints); if (!isOrderingCompatible(endpoints)) { return false; } return !edgesConnecting(endpoints.nodeU(), endpoints.nodeV()).isEmpty(); }
@Override public int degree(N node) { if (isDirected()) { return IntMath.saturatedAdd(inEdges(node).size(), outEdges(node).size()); } else { return IntMath.saturatedAdd(incidentEdges(node).size(), edgesConnecting(node, node).size()); } }
@Override public final boolean equals(@NullableDecl Object obj) { if (obj == this) { return true; } if (!(obj instanceof Network)) { return false; } Network<?, ?> other = (Network<?, ?>) obj; return isDirected() == other.isDirected() && nodes().equals(other.nodes()) && edgeIncidentNodesMap(this).equals(edgeIncidentNodesMap(other)); }
@Override public int inDegree(N node) { return isDirected() ? inEdges(node).size() : degree(node); }
@Override public int outDegree(N node) { return isDirected() ? outEdges(node).size() : degree(node); }
@Override public Set<E> adjacentEdges(E edge) { EndpointPair<N> endpointPair = incidentNodes(edge); // Verifies that edge is in this network. Set<E> endpointPairIncidentEdges = Sets.union(incidentEdges(endpointPair.nodeU()), incidentEdges(endpointPair.nodeV())); return Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge)); }