V
- the graph vertex typeG
- type of the underlying Guava's graphpublic abstract class BaseGraphAdapter<V,G extends com.google.common.graph.Graph<V>> extends AbstractGraph<V,com.google.common.graph.EndpointPair<V>> implements Graph<V,com.google.common.graph.EndpointPair<V>>, Cloneable, Serializable
Graph
. This is a
helper class in order to support both mutable and immutable graphs.Modifier and Type | Field and Description |
---|---|
protected Supplier<com.google.common.graph.EndpointPair<V>> |
edgeSupplier |
protected G |
graph |
protected static String |
LOOPS_NOT_ALLOWED |
protected Set<com.google.common.graph.EndpointPair<V>> |
unmodifiableEdgeSet |
protected Set<V> |
unmodifiableVertexSet |
protected Supplier<V> |
vertexSupplier |
DEFAULT_EDGE_WEIGHT
Constructor and Description |
---|
BaseGraphAdapter(G graph)
Create a new adapter.
|
BaseGraphAdapter(G graph,
Supplier<V> vertexSupplier,
Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier)
Create a new adapter.
|
Modifier and Type | Method and Description |
---|---|
boolean |
containsEdge(com.google.common.graph.EndpointPair<V> e)
Returns true if this graph contains the specified edge.
|
boolean |
containsVertex(V v)
Returns true if this graph contains the specified vertex.
|
int |
degreeOf(V vertex)
Returns the degree of the specified vertex.
|
Set<com.google.common.graph.EndpointPair<V>> |
edgeSet()
Returns a set of the edges contained in this graph.
|
Set<com.google.common.graph.EndpointPair<V>> |
edgesOf(V vertex)
Returns a set of all edges touching the specified vertex.
|
Set<com.google.common.graph.EndpointPair<V>> |
getAllEdges(V sourceVertex,
V targetVertex)
Returns a set of all edges connecting source vertex to target vertex if such vertices exist
in this graph.
|
com.google.common.graph.EndpointPair<V> |
getEdge(V sourceVertex,
V targetVertex)
Returns an edge connecting source vertex to target vertex if such vertices and such edge
exist in this graph.
|
V |
getEdgeSource(com.google.common.graph.EndpointPair<V> e)
Returns the source vertex of an edge.
|
Supplier<com.google.common.graph.EndpointPair<V>> |
getEdgeSupplier()
Return the edge supplier that the graph uses whenever it needs to create new edges.
|
V |
getEdgeTarget(com.google.common.graph.EndpointPair<V> e)
Returns the target vertex of an edge.
|
double |
getEdgeWeight(com.google.common.graph.EndpointPair<V> e)
Returns the weight assigned to a given edge.
|
GraphType |
getType()
Get the graph type.
|
Supplier<V> |
getVertexSupplier()
Return the vertex supplier that the graph uses whenever it needs to create new vertices.
|
Set<com.google.common.graph.EndpointPair<V>> |
incomingEdgesOf(V vertex)
Returns a set of all edges incoming into the specified vertex.
|
int |
inDegreeOf(V vertex)
Returns the "in degree" of the specified vertex.
|
int |
outDegreeOf(V vertex)
Returns the "out degree" of the specified vertex.
|
Set<com.google.common.graph.EndpointPair<V>> |
outgoingEdgesOf(V vertex)
Returns a set of all edges outgoing from the specified vertex.
|
void |
setEdgeSupplier(Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier)
Set the edge supplier that the graph uses whenever it needs to create new edges.
|
void |
setVertexSupplier(Supplier<V> vertexSupplier)
Set the vertex supplier that the graph uses whenever it needs to create new vertices.
|
Set<V> |
vertexSet()
Returns a set of the vertices contained in this graph.
|
assertVertexExist, containsEdge, equals, hashCode, removeAllEdges, removeAllEdges, removeAllEdges, removeAllVertices, toString, toStringFromSets
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
addEdge, addEdge, addVertex, addVertex, containsEdge, removeAllEdges, removeAllEdges, removeAllVertices, removeEdge, removeEdge, removeVertex, setEdgeWeight, setEdgeWeight
protected static final String LOOPS_NOT_ALLOWED
protected transient Set<com.google.common.graph.EndpointPair<V>> unmodifiableEdgeSet
public BaseGraphAdapter(G graph)
graph
- the graphpublic Supplier<V> getVertexSupplier()
Graph
A graph uses the vertex supplier to create new vertex objects whenever a user calls method
Graph.addVertex()
. Users can also create the vertex in user code and then use method
Graph.addVertex(Object)
to add the vertex.
In contrast with the Supplier
interface, the vertex supplier has the additional
requirement that a new and distinct result is returned every time it is invoked. More
specifically for a new vertex to be added in a graph v
must not be equal
to any other vertex in the graph. More formally, the graph must not contain any vertex
v2
such that v2.equals(v)
.
Care must also be taken when interchanging calls to methods Graph.addVertex(Object)
and Graph.addVertex()
. In such a case the user must make sure never to add vertices
in the graph using method Graph.addVertex(Object)
, which are going to be returned in
the future by the supplied vertex supplier. Such a sequence will result into an
IllegalArgumentException
when calling method Graph.addVertex()
.
getVertexSupplier
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
null
if the graph has no such supplierpublic void setVertexSupplier(Supplier<V> vertexSupplier)
A graph uses the vertex supplier to create new vertex objects whenever a user calls method
Graph.addVertex()
. Users can also create the vertex in user code and then use method
Graph.addVertex(Object)
to add the vertex.
In contrast with the Supplier
interface, the vertex supplier has the additional
requirement that a new and distinct result is returned every time it is invoked. More
specifically for a new vertex to be added in a graph v
must not be equal
to any other vertex in the graph. More formally, the graph must not contain any vertex
v2
such that v2.equals(v)
.
vertexSupplier
- the vertex supplierpublic Supplier<com.google.common.graph.EndpointPair<V>> getEdgeSupplier()
Graph
A graph uses the edge supplier to create new edge objects whenever a user calls method
Graph.addEdge(Object, Object)
. Users can also create the edge in user code and then
use method Graph.addEdge(Object, Object, Object)
to add the edge.
In contrast with the Supplier
interface, the edge supplier has the additional
requirement that a new and distinct result is returned every time it is invoked. More
specifically for a new edge to be added in a graph e
must not be equal to
any other edge in the graph (even if the graph allows edge-multiplicity). More formally, the
graph must not contain any edge e2
such that e2.equals(e)
.
getEdgeSupplier
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
null
if the graph has no such supplierpublic void setEdgeSupplier(Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier)
A graph uses the edge supplier to create new edge objects whenever a user calls method
Graph.addEdge(Object, Object)
. Users can also create the edge in user code and then
use method Graph.addEdge(Object, Object, Object)
to add the edge.
In contrast with the Supplier
interface, the edge supplier has the additional
requirement that a new and distinct result is returned every time it is invoked. More
specifically for a new edge to be added in a graph e
must not be equal to
any other edge in the graph (even if the graph allows edge-multiplicity). More formally, the
graph must not contain any edge e2
such that e2.equals(e)
.
edgeSupplier
- the edge supplierpublic com.google.common.graph.EndpointPair<V> getEdge(V sourceVertex, V targetVertex)
Graph
null
. If any of the specified vertices is null
returns null
In undirected graphs, the returned edge may have its source and target vertices in the opposite order.
public Set<V> vertexSet()
Graph
The graph implementation may maintain a particular set ordering (e.g. via
LinkedHashSet
) for deterministic iteration, but this is not required. It is
the responsibility of callers who rely on this behavior to only use graph implementations
which support it.
public V getEdgeSource(com.google.common.graph.EndpointPair<V> e)
Graph
getEdgeSource
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
e
- edge of interestpublic V getEdgeTarget(com.google.common.graph.EndpointPair<V> e)
Graph
getEdgeTarget
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
e
- edge of interestpublic GraphType getType()
Graph
public boolean containsEdge(com.google.common.graph.EndpointPair<V> e)
Graph
e2
such that
e.equals(e2)
. If the specified edge is null
returns
false
.containsEdge
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
e
- edge whose presence in this graph is to be tested.public boolean containsVertex(V v)
Graph
u
such that
u.equals(v)
. If the specified vertex is null
returns
false
.containsVertex
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
v
- vertex whose presence in this graph is to be tested.public Set<com.google.common.graph.EndpointPair<V>> edgeSet()
Graph
The graph implementation may maintain a particular set ordering (e.g. via
LinkedHashSet
) for deterministic iteration, but this is not required. It is
the responsibility of callers who rely on this behavior to only use graph implementations
which support it.
public int degreeOf(V vertex)
Graph
A degree of a vertex in an undirected graph is the number of edges touching that vertex. Edges with same source and target vertices (self-loops) are counted twice.
In directed graphs this method returns the sum of the "in degree" and the "out degree".
public Set<com.google.common.graph.EndpointPair<V>> edgesOf(V vertex)
Graph
public int inDegreeOf(V vertex)
Graph
The "in degree" of a vertex in a directed graph is the number of inward directed edges from that vertex. See http://mathworld.wolfram.com/Indegree.html.
In the case of undirected graphs this method returns the number of edges touching the vertex. Edges with same source and target vertices (self-loops) are counted twice.
inDegreeOf
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
vertex
- vertex whose degree is to be calculated.public Set<com.google.common.graph.EndpointPair<V>> incomingEdgesOf(V vertex)
Graph
In the case of undirected graphs this method returns all edges touching the vertex, thus, some of the returned edges may have their source and target vertices in the opposite order.
incomingEdgesOf
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
vertex
- the vertex for which the list of incoming edges to be returned.public int outDegreeOf(V vertex)
Graph
The "out degree" of a vertex in a directed graph is the number of outward directed edges from that vertex. See http://mathworld.wolfram.com/Outdegree.html.
In the case of undirected graphs this method returns the number of edges touching the vertex. Edges with same source and target vertices (self-loops) are counted twice.
outDegreeOf
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
vertex
- vertex whose degree is to be calculated.public Set<com.google.common.graph.EndpointPair<V>> outgoingEdgesOf(V vertex)
Graph
In the case of undirected graphs this method returns all edges touching the vertex, thus, some of the returned edges may have their source and target vertices in the opposite order.
outgoingEdgesOf
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
vertex
- the vertex for which the list of outgoing edges to be returned.public double getEdgeWeight(com.google.common.graph.EndpointPair<V> e)
Graph
Graph.DEFAULT_EDGE_WEIGHT
), allowing weighted-graph algorithms to apply to them when
meaningful.getEdgeWeight
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
e
- edge of interestpublic Set<com.google.common.graph.EndpointPair<V>> getAllEdges(V sourceVertex, V targetVertex)
Graph
null
, returns
null
. If both vertices exist but no edges found, returns an empty set.
In undirected graphs, some of the returned edges may have their source and target vertices in the opposite order. In simple graphs the returned set is either singleton set or empty set.
getAllEdges
in interface Graph<V,com.google.common.graph.EndpointPair<V>>
sourceVertex
- source vertex of the edge.targetVertex
- target vertex of the edge.Copyright © 2018. All rights reserved.