what-the-bank/sources/com/google/common/graph/StandardMutableValueGraph.java

131 lines
5.2 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package com.google.common.graph;
import com.google.android.gms.measurement.api.AppMeasurementSdk;
import com.google.common.base.Preconditions;
import java.util.Iterator;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes2.dex */
public final class StandardMutableValueGraph<N, V> extends StandardValueGraph<N, V> implements MutableValueGraph<N, V> {
private final ElementOrder<N> incidentEdgeOrder;
/* JADX INFO: Access modifiers changed from: package-private */
public StandardMutableValueGraph(AbstractGraphBuilder<? super N> abstractGraphBuilder) {
super(abstractGraphBuilder);
this.incidentEdgeOrder = (ElementOrder<N>) abstractGraphBuilder.incidentEdgeOrder.cast();
}
@Override // com.google.common.graph.MutableValueGraph
public final boolean addNode(N n) {
Preconditions.checkNotNull(n, "node");
if (containsNode(n)) {
return false;
}
addNodeInternal(n);
return true;
}
private GraphConnections<N, V> addNodeInternal(N n) {
GraphConnections<N, V> newConnections = newConnections();
Preconditions.checkState(this.nodeConnections.put(n, newConnections) == null);
return newConnections;
}
@Override // com.google.common.graph.MutableValueGraph
public final V putEdgeValue(N n, N n2, V v) {
Preconditions.checkNotNull(n, "nodeU");
Preconditions.checkNotNull(n2, "nodeV");
Preconditions.checkNotNull(v, AppMeasurementSdk.ConditionalUserProperty.VALUE);
if (!allowsSelfLoops()) {
Preconditions.checkArgument(!n.equals(n2), "Cannot add self-loop edge on node %s, as self-loops are not allowed. To construct a graph that allows self-loops, call allowsSelfLoops(true) on the Builder.", n);
}
GraphConnections<N, V> graphConnections = this.nodeConnections.get(n);
if (graphConnections == null) {
graphConnections = addNodeInternal(n);
}
V addSuccessor = graphConnections.addSuccessor(n2, v);
GraphConnections<N, V> graphConnections2 = this.nodeConnections.get(n2);
if (graphConnections2 == null) {
graphConnections2 = addNodeInternal(n2);
}
graphConnections2.addPredecessor(n, v);
if (addSuccessor == null) {
long j = this.edgeCount + 1;
this.edgeCount = j;
Graphs.checkPositive(j);
}
return addSuccessor;
}
@Override // com.google.common.graph.MutableValueGraph
public final V putEdgeValue(EndpointPair<N> endpointPair, V v) {
validateEndpoints(endpointPair);
return putEdgeValue(endpointPair.nodeU(), endpointPair.nodeV(), v);
}
@Override // com.google.common.graph.MutableValueGraph
public final boolean removeNode(N n) {
Preconditions.checkNotNull(n, "node");
GraphConnections<N, V> graphConnections = this.nodeConnections.get(n);
if (graphConnections == null) {
return false;
}
if (allowsSelfLoops() && graphConnections.removeSuccessor(n) != null) {
graphConnections.removePredecessor(n);
this.edgeCount--;
}
Iterator<N> it = graphConnections.successors().iterator();
while (it.hasNext()) {
this.nodeConnections.getWithoutCaching(it.next()).removePredecessor(n);
this.edgeCount--;
}
if (isDirected()) {
Iterator<N> it2 = graphConnections.predecessors().iterator();
while (it2.hasNext()) {
Preconditions.checkState(this.nodeConnections.getWithoutCaching(it2.next()).removeSuccessor(n) != null);
this.edgeCount--;
}
}
this.nodeConnections.remove(n);
Graphs.checkNonNegative(this.edgeCount);
return true;
}
@Override // com.google.common.graph.MutableValueGraph
public final V removeEdge(N n, N n2) {
Preconditions.checkNotNull(n, "nodeU");
Preconditions.checkNotNull(n2, "nodeV");
GraphConnections<N, V> graphConnections = this.nodeConnections.get(n);
GraphConnections<N, V> graphConnections2 = this.nodeConnections.get(n2);
if (graphConnections == null || graphConnections2 == null) {
return null;
}
V removeSuccessor = graphConnections.removeSuccessor(n2);
if (removeSuccessor != null) {
graphConnections2.removePredecessor(n);
long j = this.edgeCount - 1;
this.edgeCount = j;
Graphs.checkNonNegative(j);
}
return removeSuccessor;
}
@Override // com.google.common.graph.MutableValueGraph
public final V removeEdge(EndpointPair<N> endpointPair) {
validateEndpoints(endpointPair);
return removeEdge(endpointPair.nodeU(), endpointPair.nodeV());
}
private GraphConnections<N, V> newConnections() {
if (isDirected()) {
return DirectedGraphConnections.of(this.incidentEdgeOrder);
}
return UndirectedGraphConnections.of(this.incidentEdgeOrder);
}
@Override // com.google.common.graph.AbstractValueGraph, com.google.common.graph.AbstractBaseGraph, com.google.common.graph.BaseGraph
public final ElementOrder<N> incidentEdgeOrder() {
return this.incidentEdgeOrder;
}
}