Class GuavaValueGraphAdapter<V,E,ValueT>
- Type Parameters:
V
- the vertices typeE
- the edges typeValueT
- the values type
- All Implemented Interfaces:
PredecessorsFunction<V>
,SuccessorsFunction<V>
,ValueGraph<V,
ValueT>
- Direct Known Subclasses:
GuavaMutableValueGraphAdapter
The adapter is constructed with a JGAlgo graph and implements the Guava value graph interface, and can be used with any Guava algorithm. The adapter is a live view, so any change in the JGAlgo graph is reflected in the Guava graph and vice versa, but the underlying JGAlgo graph should not be modified directly.
The Guava value graph is immutable, so as this adapter. A subclass of
this adapter, GuavaMutableValueGraphAdapter
, is a mutable adapter that implements the
Guava mutable value graph interface.
Parallel edges are not supported by Guava value graph, therefore the adapter will throw an UnsupportedOperationException if the underlying JGAlgo graph allows parallel edges. Whether this graph is directed or not, and whether it support self edges or not, is determined by the underlying JGAlgo graph.
The Guava value graph represent connections between nodes with value
for each connection. Each connection has a non unique value, similar to a map from the endpoints to the value. The
values of the edges are represented as weights in the underlying JGAlgo graph,
and weights the key is passed in the constructor, see Graph.edgesWeights(String). The type of the value is specified as a
generic ValueT
parameter. The edge generic type E
is not reflected in the Guava graph, and is only
used internally for safe access to the underlying JGAlgo graph.
Guava support different element orders for the nodes and the incident edges. This adapter uses the default element order, which is unordered, and cannot be changed as the underlying JGAlgo graph does not support any other order.
Among Guava Graph
, ValueGraph
and
Network
, the network is the most similar to JGAlgo graphs, as vertices and edges have
unique identifiers, and queries of edges are answered with the edges identifiers. On the other had, the Graph and
ValueGraph do not support unique identifiers for the edges, and operations on edges are addressed by a pair of nodes.
The ValueGraph does associate a value with each edge, be it does not have to be unique, and it is more similar to
weights in JGAlgo graphs.
For adapting the other way around, from Guava to JGAlgo, only from Guava
Network is supported, see GuavaNetworkWrapper
.
- Author:
- Barak Ugav
- See Also:
-
Constructor Summary
ConstructorDescriptionGuavaValueGraphAdapter
(Graph<V, E> graph, String edgeWeightKey) Constructs a new adapter from the given JGAlgo graph. -
Method Summary
Modifier and TypeMethodDescriptionadjacentNodes
(V node) boolean
asGraph()
int
Set
<EndpointPair<V>> edges()
edgeValueOrDefault
(EndpointPair<V> endpoints, ValueT defaultValue) edgeValueOrDefault
(V nodeU, V nodeV, ValueT defaultValue) boolean
hasEdgeConnecting
(EndpointPair<V> endpoints) boolean
hasEdgeConnecting
(V nodeU, V nodeV) Set
<EndpointPair<V>> incidentEdges
(V node) int
boolean
nodes()
int
predecessors
(V node) successors
(V node)
-
Constructor Details
-
GuavaValueGraphAdapter
Constructs a new adapter from the given JGAlgo graph.- Parameters:
graph
- the JGAlgo graphedgeWeightKey
- the key of the weights of the edges, which are the values of the value graph- Throws:
IllegalArgumentException
- if the graph does not contain edge weights for the given keyUnsupportedOperationException
- if the graph allows parallel edges
-
-
Method Details
-
nodes
-
edges
- Specified by:
edges
in interfaceValueGraph<V,
E>
-
successors
-
predecessors
-
adjacentNodes
-
incidentEdges
- Specified by:
incidentEdges
in interfaceValueGraph<V,
E>
-
hasEdgeConnecting
- Specified by:
hasEdgeConnecting
in interfaceValueGraph<V,
E>
-
hasEdgeConnecting
- Specified by:
hasEdgeConnecting
in interfaceValueGraph<V,
E>
-
degree
- Specified by:
degree
in interfaceValueGraph<V,
E>
-
outDegree
- Specified by:
outDegree
in interfaceValueGraph<V,
E>
-
inDegree
- Specified by:
inDegree
in interfaceValueGraph<V,
E>
-
asGraph
- Specified by:
asGraph
in interfaceValueGraph<V,
E> - Overrides:
asGraph
in classAbstractValueGraph<V,
ValueT>
-
isDirected
public boolean isDirected() -
allowsSelfLoops
public boolean allowsSelfLoops() -
nodeOrder
-
incidentEdgeOrder
- Specified by:
incidentEdgeOrder
in interfaceValueGraph<V,
E>
-
edgeValueOrDefault
-
edgeValueOrDefault
-