Skip to content

Commit

Permalink
Methods that take a node as parameter now take type N instead of Object.
Browse files Browse the repository at this point in the history
[]

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151580804
  • Loading branch information
nymanjens authored and cpovirk committed Mar 29, 2017
1 parent 5090ad5 commit de8d63f
Show file tree
Hide file tree
Showing 25 changed files with 124 additions and 130 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -131,8 +131,6 @@ static <N> void validateGraph(Graph<N> graph) {


for (N node : sanityCheckSet(graph.nodes())) { for (N node : sanityCheckSet(graph.nodes())) {
assertThat(nodeString).contains(node.toString()); assertThat(nodeString).contains(node.toString());
assertThat(graph.hasEdge(node, new Object())).isFalse();
assertThat(graph.hasEdge(new Object(), node)).isFalse();


if (graph.isDirected()) { if (graph.isDirected()) {
assertThat(graph.degree(node)).isEqualTo(graph.inDegree(node) + graph.outDegree(node)); assertThat(graph.degree(node)).isEqualTo(graph.inDegree(node) + graph.outDegree(node));
Expand Down Expand Up @@ -170,7 +168,6 @@ static <N> void validateGraph(Graph<N> graph) {
} }


sanityCheckSet(graph.edges()); sanityCheckSet(graph.edges());
assertThat(graph.hasEdge(new Object(), new Object())).isFalse();
assertThat(graph.edges()).doesNotContain(EndpointPair.of(graph, new Object(), new Object())); assertThat(graph.edges()).doesNotContain(EndpointPair.of(graph, new Object(), new Object()));
assertThat(graph.edges()).isEqualTo(allEndpointPairs); assertThat(graph.edges()).isEqualTo(allEndpointPairs);
} }
Expand Down
14 changes: 9 additions & 5 deletions guava/src/com/google/common/graph/AbstractBaseGraph.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ public int size() {
return Ints.saturatedCast(edgeCount()); return Ints.saturatedCast(edgeCount());
} }


// Mostly safe: We check contains(u) before calling successors(u), so we perform unsafe
// operations only in weird cases like checking for an EndpointPair<ArrayList> in a
// Graph<LinkedList>.
@SuppressWarnings("unchecked")
@Override @Override
public boolean contains(@Nullable Object obj) { public boolean contains(@Nullable Object obj) {
if (!(obj instanceof EndpointPair)) { if (!(obj instanceof EndpointPair)) {
Expand All @@ -74,13 +78,13 @@ public boolean contains(@Nullable Object obj) {
EndpointPair<?> endpointPair = (EndpointPair<?>) obj; EndpointPair<?> endpointPair = (EndpointPair<?>) obj;
return isDirected() == endpointPair.isOrdered() return isDirected() == endpointPair.isOrdered()
&& nodes().contains(endpointPair.nodeU()) && nodes().contains(endpointPair.nodeU())
&& successors(endpointPair.nodeU()).contains(endpointPair.nodeV()); && successors((N) endpointPair.nodeU()).contains(endpointPair.nodeV());
} }
}; };
} }


@Override @Override
public int degree(Object node) { public int degree(N node) {
if (isDirected()) { if (isDirected()) {
return IntMath.saturatedAdd(predecessors(node).size(), successors(node).size()); return IntMath.saturatedAdd(predecessors(node).size(), successors(node).size());
} else { } else {
Expand All @@ -91,17 +95,17 @@ public int degree(Object node) {
} }


@Override @Override
public int inDegree(Object node) { public int inDegree(N node) {
return isDirected() ? predecessors(node).size() : degree(node); return isDirected() ? predecessors(node).size() : degree(node);
} }


@Override @Override
public int outDegree(Object node) { public int outDegree(N node) {
return isDirected() ? successors(node).size() : degree(node); return isDirected() ? successors(node).size() : degree(node);
} }


@Override @Override
public boolean hasEdge(Object nodeU, Object nodeV) { public boolean hasEdge(N nodeU, N nodeV) {
checkNotNull(nodeU); checkNotNull(nodeU);
checkNotNull(nodeV); checkNotNull(nodeV);
return nodes().contains(nodeU) && successors(nodeU).contains(nodeV); return nodes().contains(nodeU) && successors(nodeU).contains(nodeV);
Expand Down
22 changes: 13 additions & 9 deletions guava/src/com/google/common/graph/AbstractNetwork.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ public int size() {
return AbstractNetwork.this.edges().size(); return AbstractNetwork.this.edges().size();
} }


// Mostly safe: We check contains(u) before calling successors(u), so we perform unsafe
// operations only in weird cases like checking for an EndpointPair<ArrayList> in a
// Network<LinkedList>.
@SuppressWarnings("unchecked")
@Override @Override
public boolean contains(@Nullable Object obj) { public boolean contains(@Nullable Object obj) {
if (!(obj instanceof EndpointPair)) { if (!(obj instanceof EndpointPair)) {
Expand All @@ -86,7 +90,7 @@ public boolean contains(@Nullable Object obj) {
EndpointPair<?> endpointPair = (EndpointPair<?>) obj; EndpointPair<?> endpointPair = (EndpointPair<?>) obj;
return isDirected() == endpointPair.isOrdered() return isDirected() == endpointPair.isOrdered()
&& nodes().contains(endpointPair.nodeU()) && nodes().contains(endpointPair.nodeU())
&& successors(endpointPair.nodeU()).contains(endpointPair.nodeV()); && successors((N) endpointPair.nodeU()).contains(endpointPair.nodeV());
} }
}; };
} }
Expand All @@ -107,17 +111,17 @@ public boolean allowsSelfLoops() {
} }


@Override @Override
public Set<N> adjacentNodes(Object node) { public Set<N> adjacentNodes(N node) {
return AbstractNetwork.this.adjacentNodes(node); return AbstractNetwork.this.adjacentNodes(node);
} }


@Override @Override
public Set<N> predecessors(Object node) { public Set<N> predecessors(N node) {
return AbstractNetwork.this.predecessors(node); return AbstractNetwork.this.predecessors(node);
} }


@Override @Override
public Set<N> successors(Object node) { public Set<N> successors(N node) {
return AbstractNetwork.this.successors(node); return AbstractNetwork.this.successors(node);
} }


Expand All @@ -126,7 +130,7 @@ public Set<N> successors(Object node) {
} }


@Override @Override
public int degree(Object node) { public int degree(N node) {
if (isDirected()) { if (isDirected()) {
return IntMath.saturatedAdd(inEdges(node).size(), outEdges(node).size()); return IntMath.saturatedAdd(inEdges(node).size(), outEdges(node).size());
} else { } else {
Expand All @@ -135,25 +139,25 @@ public int degree(Object node) {
} }


@Override @Override
public int inDegree(Object node) { public int inDegree(N node) {
return isDirected() ? inEdges(node).size() : degree(node); return isDirected() ? inEdges(node).size() : degree(node);
} }


@Override @Override
public int outDegree(Object node) { public int outDegree(N node) {
return isDirected() ? outEdges(node).size() : degree(node); return isDirected() ? outEdges(node).size() : degree(node);
} }


@Override @Override
public Set<E> adjacentEdges(Object edge) { public Set<E> adjacentEdges(Object edge) {
EndpointPair<?> endpointPair = incidentNodes(edge); // Verifies that edge is in this network. EndpointPair<N> endpointPair = incidentNodes(edge); // Verifies that edge is in this network.
Set<E> endpointPairIncidentEdges = Set<E> endpointPairIncidentEdges =
Sets.union(incidentEdges(endpointPair.nodeU()), incidentEdges(endpointPair.nodeV())); Sets.union(incidentEdges(endpointPair.nodeU()), incidentEdges(endpointPair.nodeV()));
return Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge)); return Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge));
} }


@Override @Override
public Optional<E> edgeConnecting(Object nodeU, Object nodeV) { public Optional<E> edgeConnecting(N nodeU, N nodeV) {
Set<E> edgesConnecting = edgesConnecting(nodeU, nodeV); Set<E> edgesConnecting = edgesConnecting(nodeU, nodeV);
switch (edgesConnecting.size()) { switch (edgesConnecting.size()) {
case 0: case 0:
Expand Down
14 changes: 7 additions & 7 deletions guava/src/com/google/common/graph/AbstractValueGraph.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -70,39 +70,39 @@ public ElementOrder<N> nodeOrder() {
} }


@Override @Override
public Set<N> adjacentNodes(Object node) { public Set<N> adjacentNodes(N node) {
return AbstractValueGraph.this.adjacentNodes(node); return AbstractValueGraph.this.adjacentNodes(node);
} }


@Override @Override
public Set<N> predecessors(Object node) { public Set<N> predecessors(N node) {
return AbstractValueGraph.this.predecessors(node); return AbstractValueGraph.this.predecessors(node);
} }


@Override @Override
public Set<N> successors(Object node) { public Set<N> successors(N node) {
return AbstractValueGraph.this.successors(node); return AbstractValueGraph.this.successors(node);
} }


@Override @Override
public int degree(Object node) { public int degree(N node) {
return AbstractValueGraph.this.degree(node); return AbstractValueGraph.this.degree(node);
} }


@Override @Override
public int inDegree(Object node) { public int inDegree(N node) {
return AbstractValueGraph.this.inDegree(node); return AbstractValueGraph.this.inDegree(node);
} }


@Override @Override
public int outDegree(Object node) { public int outDegree(N node) {
return AbstractValueGraph.this.outDegree(node); return AbstractValueGraph.this.outDegree(node);
} }
}; };
} }


@Override @Override
public V edgeValue(Object nodeU, Object nodeV) { public V edgeValue(N nodeU, N nodeV) {
V value = edgeValueOrDefault(nodeU, nodeV, null); V value = edgeValueOrDefault(nodeU, nodeV, null);
if (value == null) { if (value == null) {
checkArgument(nodes().contains(nodeU), NODE_NOT_IN_GRAPH, nodeU); checkArgument(nodes().contains(nodeU), NODE_NOT_IN_GRAPH, nodeU);
Expand Down
15 changes: 7 additions & 8 deletions guava/src/com/google/common/graph/BaseGraph.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@


package com.google.common.graph; package com.google.common.graph;


import com.google.errorprone.annotations.CompatibleWith;
import java.util.Set; import java.util.Set;


/** /**
Expand Down Expand Up @@ -66,7 +65,7 @@ interface BaseGraph<N> extends SuccessorsFunction<N>, PredecessorsFunction<N> {
* *
* @throws IllegalArgumentException if {@code node} is not an element of this graph * @throws IllegalArgumentException if {@code node} is not an element of this graph
*/ */
Set<N> adjacentNodes(@CompatibleWith("N") Object node); Set<N> adjacentNodes(N node);


/** /**
* Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing
Expand All @@ -77,7 +76,7 @@ interface BaseGraph<N> extends SuccessorsFunction<N>, PredecessorsFunction<N> {
* @throws IllegalArgumentException if {@code node} is not an element of this graph * @throws IllegalArgumentException if {@code node} is not an element of this graph
*/ */
@Override @Override
Set<N> predecessors(Object node); Set<N> predecessors(N node);


/** /**
* Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing
Expand All @@ -91,7 +90,7 @@ interface BaseGraph<N> extends SuccessorsFunction<N>, PredecessorsFunction<N> {
* @throws IllegalArgumentException if {@code node} is not an element of this graph * @throws IllegalArgumentException if {@code node} is not an element of this graph
*/ */
@Override @Override
Set<N> successors(Object node); Set<N> successors(N node);


/** /**
* Returns the count of {@code node}'s incident edges, counting self-loops twice (equivalently, * Returns the count of {@code node}'s incident edges, counting self-loops twice (equivalently,
Expand All @@ -106,7 +105,7 @@ interface BaseGraph<N> extends SuccessorsFunction<N>, PredecessorsFunction<N> {
* *
* @throws IllegalArgumentException if {@code node} is not an element of this graph * @throws IllegalArgumentException if {@code node} is not an element of this graph
*/ */
int degree(@CompatibleWith("N") Object node); int degree(N node);


/** /**
* Returns the count of {@code node}'s incoming edges (equal to {@code predecessors(node).size()}) * Returns the count of {@code node}'s incoming edges (equal to {@code predecessors(node).size()})
Expand All @@ -116,7 +115,7 @@ interface BaseGraph<N> extends SuccessorsFunction<N>, PredecessorsFunction<N> {
* *
* @throws IllegalArgumentException if {@code node} is not an element of this graph * @throws IllegalArgumentException if {@code node} is not an element of this graph
*/ */
int inDegree(@CompatibleWith("N") Object node); int inDegree(N node);


/** /**
* Returns the count of {@code node}'s outgoing edges (equal to {@code successors(node).size()}) * Returns the count of {@code node}'s outgoing edges (equal to {@code successors(node).size()})
Expand All @@ -126,13 +125,13 @@ interface BaseGraph<N> extends SuccessorsFunction<N>, PredecessorsFunction<N> {
* *
* @throws IllegalArgumentException if {@code node} is not an element of this graph * @throws IllegalArgumentException if {@code node} is not an element of this graph
*/ */
int outDegree(@CompatibleWith("N") Object node); int outDegree(N node);


/** /**
* Returns true if there is an edge directly connecting {@code nodeU} to {@code nodeV}. This is * Returns true if there is an edge directly connecting {@code nodeU} to {@code nodeV}. This is
* equivalent to {@code return nodes().contains(nodeU) && successors(nodeU).contains(nodeV)}. * equivalent to {@code return nodes().contains(nodeU) && successors(nodeU).contains(nodeV)}.
* *
* <p>In an undirected graph, this is equal to {@code hasEdge(nodeV, nodeU)}. * <p>In an undirected graph, this is equal to {@code hasEdge(nodeV, nodeU)}.
*/ */
boolean hasEdge(@CompatibleWith("N") Object nodeU, @CompatibleWith("N") Object nodeV); boolean hasEdge(N nodeU, N nodeV);
} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ public boolean putEdge(N nodeU, N nodeV) {
} }


@Override @Override
public boolean removeNode(Object node) { public boolean removeNode(N node) {
return backingValueGraph.removeNode(node); return backingValueGraph.removeNode(node);
} }


@Override @Override
public boolean removeEdge(Object nodeU, Object nodeV) { public boolean removeEdge(N nodeU, N nodeV) {
return backingValueGraph.removeEdge(nodeU, nodeV) != null; return backingValueGraph.removeEdge(nodeU, nodeV) != null;
} }
} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public boolean addEdge(N nodeU, N nodeV, E edge) {


@Override @Override
@CanIgnoreReturnValue @CanIgnoreReturnValue
public boolean removeNode(Object node) { public boolean removeNode(N node) {
checkNotNull(node, "node"); checkNotNull(node, "node");


NetworkConnections<N, E> connections = nodeConnections.get(node); NetworkConnections<N, E> connections = nodeConnections.get(node);
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public V putEdgeValue(N nodeU, N nodeV, V value) {


@Override @Override
@CanIgnoreReturnValue @CanIgnoreReturnValue
public boolean removeNode(Object node) { public boolean removeNode(N node) {
checkNotNull(node, "node"); checkNotNull(node, "node");


GraphConnections<N, V> connections = nodeConnections.get(node); GraphConnections<N, V> connections = nodeConnections.get(node);
Expand Down Expand Up @@ -133,7 +133,7 @@ public boolean removeNode(Object node) {


@Override @Override
@CanIgnoreReturnValue @CanIgnoreReturnValue
public V removeEdge(Object nodeU, Object nodeV) { public V removeEdge(N nodeU, N nodeV) {
checkNotNull(nodeU, "nodeU"); checkNotNull(nodeU, "nodeU");
checkNotNull(nodeV, "nodeV"); checkNotNull(nodeV, "nodeV");


Expand Down
14 changes: 7 additions & 7 deletions guava/src/com/google/common/graph/ConfigurableNetwork.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public ElementOrder<E> edgeOrder() {
} }


@Override @Override
public Set<E> incidentEdges(Object node) { public Set<E> incidentEdges(N node) {
return checkedConnections(node).incidentEdges(); return checkedConnections(node).incidentEdges();
} }


Expand All @@ -140,12 +140,12 @@ public EndpointPair<N> incidentNodes(Object edge) {
} }


@Override @Override
public Set<N> adjacentNodes(Object node) { public Set<N> adjacentNodes(N node) {
return checkedConnections(node).adjacentNodes(); return checkedConnections(node).adjacentNodes();
} }


@Override @Override
public Set<E> edgesConnecting(Object nodeU, Object nodeV) { public Set<E> edgesConnecting(N nodeU, N nodeV) {
NetworkConnections<N, E> connectionsU = checkedConnections(nodeU); NetworkConnections<N, E> connectionsU = checkedConnections(nodeU);
if (!allowsSelfLoops && nodeU == nodeV) { // just an optimization, only check reference equality if (!allowsSelfLoops && nodeU == nodeV) { // just an optimization, only check reference equality
return ImmutableSet.of(); return ImmutableSet.of();
Expand All @@ -155,22 +155,22 @@ public Set<E> edgesConnecting(Object nodeU, Object nodeV) {
} }


@Override @Override
public Set<E> inEdges(Object node) { public Set<E> inEdges(N node) {
return checkedConnections(node).inEdges(); return checkedConnections(node).inEdges();
} }


@Override @Override
public Set<E> outEdges(Object node) { public Set<E> outEdges(N node) {
return checkedConnections(node).outEdges(); return checkedConnections(node).outEdges();
} }


@Override @Override
public Set<N> predecessors(Object node) { public Set<N> predecessors(N node) {
return checkedConnections(node).predecessors(); return checkedConnections(node).predecessors();
} }


@Override @Override
public Set<N> successors(Object node) { public Set<N> successors(N node) {
return checkedConnections(node).successors(); return checkedConnections(node).successors();
} }


Expand Down
Loading

0 comments on commit de8d63f

Please sign in to comment.