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>
,GImplicitDirectedGraph<V,E>
public class MutableGDirectedGraphWrapper<V,E extends GEdge<V>> extends java.lang.Object implements GDirectedGraph<V,E>
A class that can wrap aGDirectedGraph
and 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 class
MutableGDirectedGraphWrapper.DummyEdge
-
Constructor Summary
Constructors Constructor Description MutableGDirectedGraphWrapper(GDirectedGraph<V,E> delegate)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description E
addDummyEdge(V start, V end)
V
addDummyVertex(java.lang.String name)
void
addEdge(E e)
Add an edgeboolean
addVertex(V v)
Add a vertexboolean
containsEdge(E e)
Test if the graph contains a given edgeboolean
containsEdge(V from, V to)
Test if the graph contains an edge from one given vertex to anotherboolean
containsVertex(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.E
findEdge(V start, V end)
Locates the edge object for the two verticesint
getEdgeCount()
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 successorsint
getVertexCount()
Count the number of vertices in the graphjava.util.Collection<V>
getVertices()
Retrieve all the verticesboolean
isDummy(E e)
boolean
isDummy(V v)
boolean
isEmpty()
Test if the graph is empty, i.e., contains no vertices or edgesboolean
removeEdge(E e)
Removes an edgevoid
removeEdges(java.lang.Iterable<E> edges)
Removes the given edges from the graphboolean
removeVertex(V v)
Remove a vertexvoid
removeVertices(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:GDirectedGraph
Add a vertex
-
removeVertex
public boolean removeVertex(V v)
Description copied from interface:GDirectedGraph
Remove a vertex- Specified by:
removeVertex
in 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:GDirectedGraph
Removes the given vertices from the graph- Specified by:
removeVertices
in 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:GDirectedGraph
Removes the given edges from the graph- Specified by:
removeEdges
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Parameters:
edges
- the edges to remove
-
addEdge
public void addEdge(E e)
Description copied from interface:GDirectedGraph
Add an edge
-
removeEdge
public boolean removeEdge(E e)
Description copied from interface:GDirectedGraph
Removes an edge- Specified by:
removeEdge
in 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:GDirectedGraph
Retrieve all the vertices- Specified by:
getVertices
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Returns:
- the vertices
-
getEdges
public java.util.Collection<E> getEdges()
Description copied from interface:GDirectedGraph
Retrieve all the edges
-
containsVertex
public boolean containsVertex(V v)
Description copied from interface:GDirectedGraph
Test if the graph contains a given vertex- Specified by:
containsVertex
in 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:GDirectedGraph
Test if the graph contains a given edge- Specified by:
containsEdge
in 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:GDirectedGraph
Test if the graph contains an edge from one given vertex to another- Specified by:
containsEdge
in 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:GDirectedGraph
Locates the edge object for the two vertices
-
isEmpty
public boolean isEmpty()
Description copied from interface:GDirectedGraph
Test if the graph is empty, i.e., contains no vertices or edges
-
getVertexCount
public int getVertexCount()
Description copied from interface:GDirectedGraph
Count the number of vertices in the graph- Specified by:
getVertexCount
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Returns:
- the count
-
getEdgeCount
public int getEdgeCount()
Description copied from interface:GDirectedGraph
Count the number of edges in the graph- Specified by:
getEdgeCount
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Returns:
- the count
-
getInEdges
public java.util.Collection<E> getInEdges(V v)
Description copied from interface:GDirectedGraph
Compute the incident edges that end at the given vertex- Specified by:
getInEdges
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Specified by:
getInEdges
in interfaceGImplicitDirectedGraph<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:GDirectedGraph
Compute the incident edges that start at the given vertex- Specified by:
getOutEdges
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Specified by:
getOutEdges
in interfaceGImplicitDirectedGraph<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:GDirectedGraph
Compute a vertex's predecessorsThe default implementation computes this from the in-edges
- Specified by:
getPredecessors
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Specified by:
getPredecessors
in interfaceGImplicitDirectedGraph<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:GDirectedGraph
Compute a vertex's successorsThe default implementation compute this from the out-edges
- Specified by:
getSuccessors
in interfaceGDirectedGraph<V,E extends GEdge<V>>
- Specified by:
getSuccessors
in interfaceGImplicitDirectedGraph<V,E extends GEdge<V>>
- Parameters:
v
- the source vertex- Returns:
- the successors
-
copy
public GDirectedGraph<V,E> copy()
Description copied from interface:GDirectedGraph
Copy 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:GDirectedGraph
Creates 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.
-
-