Class MutableGDirectedGraphWrapper<V,E extends GEdge<V>>
- java.lang.Object
-
- ghidra.graph.MutableGDirectedGraphWrapper<V,E>
-
- Type Parameters:
V- the vertex typeE- the edge type
- All Implemented Interfaces:
GDirectedGraph<V,E>
public class MutableGDirectedGraphWrapper<V,E extends GEdge<V>> extends java.lang.Object implements GDirectedGraph<V,E>
A class that can wrap aGDirectedGraphand allows for vertex and edge additions without changing the underlying graph.Warning: As mentioned above, this graph is meant for additive operations. In its current form, removal operations will not work. To facilitate removals, this class will have to be updated to track removed vertices and edges, using them to correctly report the state of the graph for methods like
containsVertex(Object)andcontainsEdge(GEdge).Implementation Note: there is some 'magic' in this class to add 'dummy' vertices to the graph. To facilitate this, the mutated graph in this class does not have the V type, but rather is typed on Object. This means that this class can only be used generically, with templated types (like by algorithms and such). Any usage of this class that expects concrete implementations to be returned can trigger ClassCastExceptions.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classMutableGDirectedGraphWrapper.DummyEdge
-
Constructor Summary
Constructors Constructor Description MutableGDirectedGraphWrapper(GDirectedGraph<V,E> delegate)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description EaddDummyEdge(V start, V end)VaddDummyVertex(java.lang.String name)voidaddEdge(E e)Add an edgebooleanaddVertex(V v)Add a vertexbooleancontainsEdge(E e)Test if the graph contains a given edgebooleancontainsEdge(V from, V to)Test if the graph contains an edge from one given vertex to anotherbooleancontainsVertex(V v)Test if the graph contains a given vertexGDirectedGraph<V,E>copy()Copy this graph.GDirectedGraph<V,E>emptyCopy()Creates a new instance of this graph with no vertices or edges.EfindEdge(V start, V end)Locates the edge object for the two verticesintgetEdgeCount()Count the number of edges in the graphjava.util.Collection<E>getEdges()Retrieve all the edgesjava.util.Collection<E>getInEdges(V v)Compute the incident edges that end at the given vertexjava.util.Collection<E>getOutEdges(V v)Compute the incident edges that start at the given vertexjava.util.Collection<V>getPredecessors(V v)Compute a vertex's predecessorsjava.util.Collection<V>getSuccessors(V v)Compute a vertex's successorsintgetVertexCount()Count the number of vertices in the graphjava.util.Collection<V>getVertices()Retrieve all the verticesbooleanisDummy(E e)booleanisDummy(V v)booleanisEmpty()Test if the graph is empty, i.e., contains no vertices or edgesbooleanremoveEdge(E e)Removes an edgevoidremoveEdges(java.lang.Iterable<E> edges)Removes the given edges from the graphbooleanremoveVertex(V v)Remove a vertexvoidremoveVertices(java.lang.Iterable<V> vertices)Removes the given vertices from the graph-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface ghidra.graph.GDirectedGraph
getIncidentEdges
-
-
-
-
Constructor Detail
-
MutableGDirectedGraphWrapper
public MutableGDirectedGraphWrapper(GDirectedGraph<V,E> delegate)
-
-
Method Detail
-
addDummyVertex
public V addDummyVertex(java.lang.String name)
-
isDummy
public boolean isDummy(V v)
-
isDummy
public boolean isDummy(E e)
-
addVertex
public boolean addVertex(V v)
Description copied from interface:GDirectedGraphAdd a vertex
-
removeVertex
public boolean removeVertex(V v)
Description copied from interface:GDirectedGraphRemove a vertex- Specified by:
removeVertexin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
v- the vertex- Returns:
- true
-
removeVertices
public void removeVertices(java.lang.Iterable<V> vertices)
Description copied from interface:GDirectedGraphRemoves the given vertices from the graph- Specified by:
removeVerticesin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
vertices- the vertices to remove
-
removeEdges
public void removeEdges(java.lang.Iterable<E> edges)
Description copied from interface:GDirectedGraphRemoves the given edges from the graph- Specified by:
removeEdgesin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
edges- the edges to remove
-
addEdge
public void addEdge(E e)
Description copied from interface:GDirectedGraphAdd an edge
-
removeEdge
public boolean removeEdge(E e)
Description copied from interface:GDirectedGraphRemoves an edge- Specified by:
removeEdgein interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
e- the edge- Returns:
- true if the graph contained the given edge
-
getVertices
public java.util.Collection<V> getVertices()
Description copied from interface:GDirectedGraphRetrieve all the vertices- Specified by:
getVerticesin interfaceGDirectedGraph<V,E extends GEdge<V>>- Returns:
- the vertices
-
getEdges
public java.util.Collection<E> getEdges()
Description copied from interface:GDirectedGraphRetrieve all the edges
-
containsVertex
public boolean containsVertex(V v)
Description copied from interface:GDirectedGraphTest if the graph contains a given vertex- Specified by:
containsVertexin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
v- the vertex- Returns:
- true if the vertex is in the graph, or false
-
containsEdge
public boolean containsEdge(E e)
Description copied from interface:GDirectedGraphTest if the graph contains a given edge- Specified by:
containsEdgein interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
e- the ege- Returns:
- true if the edge is in the graph, or false
-
containsEdge
public boolean containsEdge(V from, V to)
Description copied from interface:GDirectedGraphTest if the graph contains an edge from one given vertex to another- Specified by:
containsEdgein interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
from- the source vertexto- the destination vertex- Returns:
- true if such an edge exists, or false
-
findEdge
public E findEdge(V start, V end)
Description copied from interface:GDirectedGraphLocates the edge object for the two vertices
-
isEmpty
public boolean isEmpty()
Description copied from interface:GDirectedGraphTest if the graph is empty, i.e., contains no vertices or edges
-
getVertexCount
public int getVertexCount()
Description copied from interface:GDirectedGraphCount the number of vertices in the graph- Specified by:
getVertexCountin interfaceGDirectedGraph<V,E extends GEdge<V>>- Returns:
- the count
-
getEdgeCount
public int getEdgeCount()
Description copied from interface:GDirectedGraphCount the number of edges in the graph- Specified by:
getEdgeCountin interfaceGDirectedGraph<V,E extends GEdge<V>>- Returns:
- the count
-
getInEdges
public java.util.Collection<E> getInEdges(V v)
Description copied from interface:GDirectedGraphCompute the incident edges that end at the given vertex- Specified by:
getInEdgesin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
v- the destination vertex- Returns:
- the in-edges to the given vertex
-
getOutEdges
public java.util.Collection<E> getOutEdges(V v)
Description copied from interface:GDirectedGraphCompute the incident edges that start at the given vertex- Specified by:
getOutEdgesin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
v- the source vertex- Returns:
- the out-edges from the given vertex
-
getPredecessors
public java.util.Collection<V> getPredecessors(V v)
Description copied from interface:GDirectedGraphCompute a vertex's predecessorsThe default implementation computes this from the in-edges
- Specified by:
getPredecessorsin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
v- the destination vertex- Returns:
- the predecessors
-
getSuccessors
public java.util.Collection<V> getSuccessors(V v)
Description copied from interface:GDirectedGraphCompute a vertex's successorsThe default implementation compute this from the out-edges
- Specified by:
getSuccessorsin interfaceGDirectedGraph<V,E extends GEdge<V>>- Parameters:
v- the source vertex- Returns:
- the successors
-
copy
public GDirectedGraph<V,E> copy()
Description copied from interface:GDirectedGraphCopy this graph.Note: the vertices and edges in the copy may be the same instances in the new graph and not themselves copies.
-
emptyCopy
public GDirectedGraph<V,E> emptyCopy()
Description copied from interface:GDirectedGraphCreates a new instance of this graph with no vertices or edges. This is useful when you wish to build a new graph using the same type as this graph.
-
-