com.ibm.wala.emf.wrappers
Class EObjectGraphImpl

java.lang.Object
  extended by com.ibm.wala.emf.wrappers.EObjectGraphImpl
All Implemented Interfaces:
EObjectGraph, EdgeManager<org.eclipse.emf.ecore.EObject>, Graph<org.eclipse.emf.ecore.EObject>, NodeManager<org.eclipse.emf.ecore.EObject>, NumberedEdgeManager<org.eclipse.emf.ecore.EObject>, NumberedGraph<org.eclipse.emf.ecore.EObject>, NumberedNodeManager<org.eclipse.emf.ecore.EObject>, java.lang.Iterable<org.eclipse.emf.ecore.EObject>
Direct Known Subclasses:
ECallGraphWrapper, EInterfaceHierarchyWrapper, EObjectTree

public class EObjectGraphImpl
extends java.lang.Object
implements EObjectGraph

An in-memory representation of a graph of EObjects. This class is often more convenient for client-side programming than the "raw" EMF-generated graph implementation.


Constructor Summary
EObjectGraphImpl()
           
 
Method Summary
 void addEdge(org.eclipse.emf.ecore.EObject src, org.eclipse.emf.ecore.EObject dst)
           
 void addNode(org.eclipse.emf.ecore.EObject n)
          add a node to this graph
 boolean containsNode(org.eclipse.emf.ecore.EObject N)
           
 boolean equals(java.lang.Object obj)
           
 org.eclipse.emf.ecore.EObject export()
           
static EObjectGraph fromEMF(EGraph g)
           
 int getMaxNumber()
           
 org.eclipse.emf.ecore.EObject getNode(int number)
           
 int getNumber(org.eclipse.emf.ecore.EObject N)
           
 int getNumberOfNodes()
           
 int getPredNodeCount(org.eclipse.emf.ecore.EObject N)
          Return the number of immediate predecessor nodes of this Node in the Graph.
 IntSet getPredNodeNumbers(org.eclipse.emf.ecore.EObject node)
           
 java.util.Iterator<? extends org.eclipse.emf.ecore.EObject> getPredNodes(org.eclipse.emf.ecore.EObject N)
          Return an Iterator over the immediate predecessor nodes of this Node in the Graph.
 int getSuccNodeCount(org.eclipse.emf.ecore.EObject N)
          Return the number of immediate successor nodes of this Node in the Graph
 IntSet getSuccNodeNumbers(org.eclipse.emf.ecore.EObject node)
           
 java.util.Iterator<? extends org.eclipse.emf.ecore.EObject> getSuccNodes(org.eclipse.emf.ecore.EObject N)
          Return an Iterator over the immediate successor nodes of this Node in the Graph
 boolean hasEdge(org.eclipse.emf.ecore.EObject src, org.eclipse.emf.ecore.EObject dst)
           
 int hashCode()
           
 java.util.Iterator<org.eclipse.emf.ecore.EObject> iterateNodes(IntSet s)
           
 java.util.Iterator<org.eclipse.emf.ecore.EObject> iterator()
           
 void removeAllIncidentEdges(org.eclipse.emf.ecore.EObject node)
           
 void removeEdge(org.eclipse.emf.ecore.EObject src, org.eclipse.emf.ecore.EObject dst)
           
 void removeIncomingEdges(org.eclipse.emf.ecore.EObject node)
           
 void removeNode(org.eclipse.emf.ecore.EObject n)
          remove a node from this graph
 void removeNodeAndEdges(org.eclipse.emf.ecore.EObject N)
          remove a node and all its incident edges
 void removeOutgoingEdges(org.eclipse.emf.ecore.EObject node)
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

EObjectGraphImpl

public EObjectGraphImpl()
Method Detail

addEdge

public void addEdge(org.eclipse.emf.ecore.EObject src,
                    org.eclipse.emf.ecore.EObject dst)
             throws java.lang.IllegalArgumentException
Specified by:
addEdge in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Throws:
java.lang.IllegalArgumentException

removeEdge

public void removeEdge(org.eclipse.emf.ecore.EObject src,
                       org.eclipse.emf.ecore.EObject dst)
                throws java.lang.IllegalArgumentException
Specified by:
removeEdge in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Throws:
java.lang.IllegalArgumentException

addNode

public void addNode(org.eclipse.emf.ecore.EObject n)
Description copied from interface: NodeManager
add a node to this graph

Specified by:
addNode in interface NodeManager<org.eclipse.emf.ecore.EObject>

containsNode

public boolean containsNode(org.eclipse.emf.ecore.EObject N)
Specified by:
containsNode in interface NodeManager<org.eclipse.emf.ecore.EObject>
Returns:
true iff the graph contains the specified node

equals

public boolean equals(java.lang.Object obj)
Overrides:
equals in class java.lang.Object

getNumberOfNodes

public int getNumberOfNodes()
Specified by:
getNumberOfNodes in interface NodeManager<org.eclipse.emf.ecore.EObject>
Returns:
the number of nodes in this graph

getPredNodeCount

public int getPredNodeCount(org.eclipse.emf.ecore.EObject N)
                     throws java.lang.IllegalArgumentException
Description copied from interface: EdgeManager
Return the number of immediate predecessor nodes of this Node in the Graph.

Specified by:
getPredNodeCount in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Returns:
the number of immediate predecessor Nodes of this Node in the Graph.
Throws:
java.lang.IllegalArgumentException

getPredNodes

public java.util.Iterator<? extends org.eclipse.emf.ecore.EObject> getPredNodes(org.eclipse.emf.ecore.EObject N)
                                                                         throws java.lang.IllegalArgumentException
Description copied from interface: EdgeManager
Return an Iterator over the immediate predecessor nodes of this Node in the Graph. This method never returns null.

Specified by:
getPredNodes in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Returns:
an Iterator over the immediate predecessor nodes of this Node.
Throws:
java.lang.IllegalArgumentException

getSuccNodeCount

public int getSuccNodeCount(org.eclipse.emf.ecore.EObject N)
                     throws java.lang.IllegalArgumentException
Description copied from interface: EdgeManager
Return the number of immediate successor nodes of this Node in the Graph

Specified by:
getSuccNodeCount in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Returns:
the number of immediate successor Nodes of this Node in the Graph.
Throws:
java.lang.IllegalArgumentException

getSuccNodes

public java.util.Iterator<? extends org.eclipse.emf.ecore.EObject> getSuccNodes(org.eclipse.emf.ecore.EObject N)
                                                                         throws java.lang.IllegalArgumentException
Description copied from interface: EdgeManager
Return an Iterator over the immediate successor nodes of this Node in the Graph

This method never returns null.

Specified by:
getSuccNodes in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Returns:
an Iterator over the immediate successor Nodes of this Node.
Throws:
java.lang.IllegalArgumentException

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

iterator

public java.util.Iterator<org.eclipse.emf.ecore.EObject> iterator()
Specified by:
iterator in interface NodeManager<org.eclipse.emf.ecore.EObject>
Specified by:
iterator in interface java.lang.Iterable<org.eclipse.emf.ecore.EObject>
Returns:
an Iterator of the nodes in this graph

removeAllIncidentEdges

public void removeAllIncidentEdges(org.eclipse.emf.ecore.EObject node)
                            throws java.lang.IllegalArgumentException
Specified by:
removeAllIncidentEdges in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Throws:
java.lang.IllegalArgumentException

removeNode

public void removeNode(org.eclipse.emf.ecore.EObject n)
Description copied from interface: NodeManager
remove a node from this graph

Specified by:
removeNode in interface NodeManager<org.eclipse.emf.ecore.EObject>

removeNodeAndEdges

public void removeNodeAndEdges(org.eclipse.emf.ecore.EObject N)
                        throws java.lang.IllegalArgumentException
Description copied from interface: Graph
remove a node and all its incident edges

Specified by:
removeNodeAndEdges in interface Graph<org.eclipse.emf.ecore.EObject>
Throws:
java.lang.IllegalArgumentException

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

removeIncomingEdges

public void removeIncomingEdges(org.eclipse.emf.ecore.EObject node)
                         throws java.lang.IllegalArgumentException
Specified by:
removeIncomingEdges in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Throws:
java.lang.IllegalArgumentException

removeOutgoingEdges

public void removeOutgoingEdges(org.eclipse.emf.ecore.EObject node)
                         throws java.lang.IllegalArgumentException
Specified by:
removeOutgoingEdges in interface EdgeManager<org.eclipse.emf.ecore.EObject>
Parameters:
node -
Throws:
java.lang.IllegalArgumentException

getMaxNumber

public int getMaxNumber()
Specified by:
getMaxNumber in interface NumberedNodeManager<org.eclipse.emf.ecore.EObject>

getNode

public org.eclipse.emf.ecore.EObject getNode(int number)
Specified by:
getNode in interface NumberedNodeManager<org.eclipse.emf.ecore.EObject>

getNumber

public int getNumber(org.eclipse.emf.ecore.EObject N)
Specified by:
getNumber in interface NumberedNodeManager<org.eclipse.emf.ecore.EObject>

iterateNodes

public java.util.Iterator<org.eclipse.emf.ecore.EObject> iterateNodes(IntSet s)
Specified by:
iterateNodes in interface NumberedNodeManager<org.eclipse.emf.ecore.EObject>
Returns:
iterator of nodes with the numbers in set s

fromEMF

public static EObjectGraph fromEMF(EGraph g)
Parameters:
g - an EMF implementation of a graph
Returns:
an EObjectGraph with the same nodes and edges of g
Throws:
java.lang.IllegalArgumentException - if g is null

export

public org.eclipse.emf.ecore.EObject export()
Returns:
an EGraph representing the contents of this EObjectGraph

hasEdge

public boolean hasEdge(org.eclipse.emf.ecore.EObject src,
                       org.eclipse.emf.ecore.EObject dst)
Specified by:
hasEdge in interface EdgeManager<org.eclipse.emf.ecore.EObject>

getSuccNodeNumbers

public IntSet getSuccNodeNumbers(org.eclipse.emf.ecore.EObject node)
                          throws java.lang.IllegalArgumentException
Specified by:
getSuccNodeNumbers in interface NumberedEdgeManager<org.eclipse.emf.ecore.EObject>
Returns:
the numbers identifying the immediate successors of node
Throws:
java.lang.IllegalArgumentException

getPredNodeNumbers

public IntSet getPredNodeNumbers(org.eclipse.emf.ecore.EObject node)
                          throws java.lang.IllegalArgumentException
Specified by:
getPredNodeNumbers in interface NumberedEdgeManager<org.eclipse.emf.ecore.EObject>
Returns:
the numbers identifying the immediate predecessors of node
Throws:
java.lang.IllegalArgumentException