V - the graph vertex typeW - the value typepublic class MutableValueGraphAdapter<V,W> extends BaseValueGraphAdapter<V,W,com.google.common.graph.MutableValueGraph<V,W>> implements Graph<V,com.google.common.graph.EndpointPair<V>>, java.lang.Cloneable, java.io.Serializable
MutableValueGraph.
The adapter uses class EndpointPair to represent edges. Changes in the adapter such as
adding or removing vertices and edges are reflected in the underlying value graph.
The class uses a converter from Guava's values to JGraphT's double weights. Thus, the resulting graph is weighted. Assume for example that the following class is the value type:
class MyValue
implements
Serializable
{
private double value;
public MyValue(double value)
{
this.value = value;
}
public double getValue()
{
return value;
}
}
Then one could create an adapter using the following code:
MutableValueGraph<String, MyValue> valueGraph =
ValueGraphBuilder.directed().allowsSelfLoops(true).build();
valueGraph.addNode("v1");
valueGraph.addNode("v2");
valueGraph.putEdgeValue("v1", "v2", new MyValue(5.0));
Graph<String, EndpointPair<String>> graph = new MutableValueGraphAdapter<>(
valueGraph, new MyValue(1.0), (ToDoubleFunction<MyValue> & Serializable) MyValue::getValue);
double weight = graph.getEdgeWeight(EndpointPair.ordered("v1", "v2")); // should return 5.0
This is a one-way conversion meaning that calling setEdgeWeight(EndpointPair, double)
will throw an unsupported operation exception. Adjusting the weights can be done directly (by
keeping an external reference) on the underlying MutableValueGraph and calling
MutableValueGraph.putEdgeValue(Object, Object, Object). Changes on the values will be
propagated upstream using the provided value converter.
| Modifier and Type | Field and Description |
|---|---|
protected W |
defaultValue |
edgeSupplier, LOOPS_NOT_ALLOWED, unmodifiableEdgeSet, unmodifiableVertexSet, valueConverter, valueGraph, vertexOrder, vertexOrderMethod, vertexSupplierDEFAULT_EDGE_WEIGHT| Constructor and Description |
|---|
MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph,
W defaultValue,
java.util.function.ToDoubleFunction<W> valueConverter)
Create a new adapter.
|
MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph,
W defaultValue,
java.util.function.ToDoubleFunction<W> valueConverter,
java.util.function.Supplier<V> vertexSupplier,
java.util.function.Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier)
Create a new adapter.
|
MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph,
W defaultValue,
java.util.function.ToDoubleFunction<W> valueConverter,
java.util.function.Supplier<V> vertexSupplier,
java.util.function.Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier,
ElementOrderMethod<V> vertexOrderMethod)
Create a new adapter.
|
| Modifier and Type | Method and Description |
|---|---|
com.google.common.graph.EndpointPair<V> |
addEdge(V sourceVertex,
V targetVertex) |
boolean |
addEdge(V sourceVertex,
V targetVertex,
com.google.common.graph.EndpointPair<V> e)
The provided edge object can either be null or must respect the source and target vertices
that are provided as parameters.
|
V |
addVertex() |
boolean |
addVertex(V v) |
java.lang.Object |
clone()
Returns a shallow copy of this graph instance.
|
boolean |
removeEdge(com.google.common.graph.EndpointPair<V> e) |
com.google.common.graph.EndpointPair<V> |
removeEdge(V sourceVertex,
V targetVertex) |
boolean |
removeVertex(V v) |
void |
setEdgeWeight(com.google.common.graph.EndpointPair<V> e,
double weight)
This method always throws an
UnsupportedOperationException since the adapter works
one-way from values to weights. |
containsEdge, containsVertex, createVertexOrder, degreeOf, edgeSet, edgesOf, getAllEdges, getEdge, getEdgeSource, getEdgeSupplier, getEdgeTarget, getEdgeWeight, getType, getVertexSupplier, incomingEdgesOf, inDegreeOf, outDegreeOf, outgoingEdgesOf, setEdgeSupplier, setVertexSupplier, vertexSetassertVertexExist, containsEdge, equals, hashCode, removeAllEdges, removeAllEdges, removeAllEdges, removeAllVertices, toString, toStringFromSetsfinalize, getClass, notify, notifyAll, wait, wait, waitcontainsEdge, containsEdge, containsVertex, degreeOf, edgeSet, edgesOf, getAllEdges, getEdge, getEdgeSource, getEdgeSupplier, getEdgeTarget, getEdgeWeight, getType, getVertexSupplier, incomingEdgesOf, inDegreeOf, iterables, outDegreeOf, outgoingEdgesOf, removeAllEdges, removeAllEdges, removeAllVertices, setEdgeWeight, vertexSetprotected final W defaultValue
public MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph, W defaultValue, java.util.function.ToDoubleFunction<W> valueConverter)
valueGraph - the value graphdefaultValue - a default value to be used when creating new edgesvalueConverter - a function that converts a value to a doublepublic MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph, W defaultValue, java.util.function.ToDoubleFunction<W> valueConverter, java.util.function.Supplier<V> vertexSupplier, java.util.function.Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier)
valueGraph - the value graphdefaultValue - a default value to be used when creating new edgesvalueConverter - a function that converts a value to a doublevertexSupplier - the vertex supplieredgeSupplier - the edge supplierpublic MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph, W defaultValue, java.util.function.ToDoubleFunction<W> valueConverter, java.util.function.Supplier<V> vertexSupplier, java.util.function.Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier, ElementOrderMethod<V> vertexOrderMethod)
valueGraph - the value graphdefaultValue - a default value to be used when creating new edgesvalueConverter - a function that converts a value to a doublevertexSupplier - the vertex supplieredgeSupplier - the edge suppliervertexOrderMethod - the method used to ensure a total order of the graph vertices. This
is required in order to make edge source/targets be consistent.public boolean addEdge(V sourceVertex, V targetVertex, com.google.common.graph.EndpointPair<V> e)
addEdge in interface Graph<V,com.google.common.graph.EndpointPair<V>>java.lang.IllegalArgumentException - if edge e is not null and the sourceVertex parameter does
not match the node U of the endpoint-pairjava.lang.IllegalArgumentException - if edge e is not null and the targetVertex parameter does
not match the node V of the endpoint-pairpublic V addVertex()
public boolean addVertex(V v)
public com.google.common.graph.EndpointPair<V> removeEdge(V sourceVertex, V targetVertex)
removeEdge in interface Graph<V,com.google.common.graph.EndpointPair<V>>public boolean removeEdge(com.google.common.graph.EndpointPair<V> e)
removeEdge in interface Graph<V,com.google.common.graph.EndpointPair<V>>public boolean removeVertex(V v)
removeVertex in interface Graph<V,com.google.common.graph.EndpointPair<V>>public void setEdgeWeight(com.google.common.graph.EndpointPair<V> e, double weight)
UnsupportedOperationException since the adapter works
one-way from values to weights. Adjusting the weights can be done by adjusting the values in
the underlying ValueGraph which will automatically be propagated using the provided
converter.setEdgeWeight in interface Graph<V,com.google.common.graph.EndpointPair<V>>e - edge on which to set weightweight - new weight for edgejava.lang.UnsupportedOperationException - if the graph does not support weightspublic java.lang.Object clone()
clone in class java.lang.Objectjava.lang.RuntimeException - in case the clone is not supportedObject.clone()Copyright © 2021. All rights reserved.