/**
* <copyright>
* </copyright>
*
* $Id$
*/
package net.sf.orcc.graph;
import net.sf.orcc.util.Adaptable;
import java.util.List;
import net.sf.orcc.util.Attributable;
import org.eclipse.emf.common.util.EList;
/**
* <!-- begin-user-doc -->This class defines a vertex. A vertex has incoming
* edges and outgoing edges. It also has a list of attributes. The
* predecessor/successor information is actually deduced from the
* incoming/outgoing edges.<!-- end-user-doc -->
*
* <p>
* The following features are supported:
* <ul>
* <li>{@link net.sf.orcc.graph.Vertex#getLabel <em>Label</em>}</li>
* <li>{@link net.sf.orcc.graph.Vertex#getNumber <em>Number</em>}</li>
* <li>{@link net.sf.orcc.graph.Vertex#getIncoming <em>Incoming</em>}</li>
* <li>{@link net.sf.orcc.graph.Vertex#getOutgoing <em>Outgoing</em>}</li>
* <li>{@link net.sf.orcc.graph.Vertex#getConnecting <em>Connecting</em>}</li>
* <li>{@link net.sf.orcc.graph.Vertex#getPredecessors <em>Predecessors</em>}</li>
* <li>{@link net.sf.orcc.graph.Vertex#getSuccessors <em>Successors</em>}</li>
* <li>{@link net.sf.orcc.graph.Vertex#getNeighbors <em>Neighbors</em>}</li>
* </ul>
* </p>
*
* @see net.sf.orcc.graph.GraphPackage#getVertex()
* @model
* @generated
*/
public interface Vertex extends Attributable, Adaptable {
/**
* Returns the graph in which this vertex is contained, or <code>null</code>
* if it is not contained in a graph. This is equivalent to
* <code>(Graph) eContainer()</code>.
*
* @return the graph that contains this vertex
*/
Graph getGraph();
/**
* Returns the hierarchy of this vertex as a list of graphs.
*
* @return the hierarchy of this vertex
*/
List<Graph> getHierarchy();
/**
* Returns the value of the '<em><b>Incoming</b></em>' reference list. The
* list contents are of type {@link net.sf.orcc.graph.Edge}. It is
* bidirectional and its opposite is '
* {@link net.sf.orcc.graph.Edge#getTarget <em>Target</em>}'. <!--
* begin-user-doc --><!-- end-user-doc -->
*
* @return the value of the '<em>Incoming</em>' reference list.
* @see net.sf.orcc.graph.GraphPackage#getVertex_Incoming()
* @see net.sf.orcc.graph.Edge#getTarget
* @model opposite="target"
* @generated
*/
EList<Edge> getIncoming();
/**
* Returns the value of the '<em><b>Label</b></em>' attribute. <!--
* begin-user-doc --><!-- end-user-doc -->
*
* @return the value of the '<em>Label</em>' attribute.
* @see #setLabel(String)
* @see net.sf.orcc.graph.GraphPackage#getVertex_Label()
* @model
* @generated
*/
String getLabel();
/**
* Returns the value of the '<em><b>Number</b></em>' attribute. <!--
* begin-user-doc -->Returns the number associated with this vertex. If the
* vertex has not been assigned a number, this returns 0. This field is
* filled by visit algorithms.<!-- end-user-doc -->
*
* @return the value of the '<em>Number</em>' attribute.
* @see #setNumber(int)
* @see net.sf.orcc.graph.GraphPackage#getVertex_Number()
* @model transient="true"
* @generated
*/
int getNumber();
/**
* Returns the value of the '<em><b>Outgoing</b></em>' reference list. The
* list contents are of type {@link net.sf.orcc.graph.Edge}. It is
* bidirectional and its opposite is '
* {@link net.sf.orcc.graph.Edge#getSource <em>Source</em>}'. <!--
* begin-user-doc --><!-- end-user-doc -->
*
* @return the value of the '<em>Outgoing</em>' reference list.
* @see net.sf.orcc.graph.GraphPackage#getVertex_Outgoing()
* @see net.sf.orcc.graph.Edge#getSource
* @model opposite="source"
* @generated
*/
EList<Edge> getOutgoing();
/**
* Returns the value of the '<em><b>Connecting</b></em>' reference list.
* The list contents are of type {@link net.sf.orcc.graph.Edge}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Connecting</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Connecting</em>' reference list.
* @see net.sf.orcc.graph.GraphPackage#getVertex_Connecting()
* @model resolveProxies="false" transient="true" changeable="false" derived="true"
* @generated
*/
EList<Edge> getConnecting();
/**
* Returns the value of the '<em><b>Predecessors</b></em>' reference list.
* The list contents are of type {@link net.sf.orcc.graph.Vertex}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Predecessors</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Predecessors</em>' reference list.
* @see net.sf.orcc.graph.GraphPackage#getVertex_Predecessors()
* @model resolveProxies="false" transient="true" changeable="false" derived="true"
* @generated
*/
EList<Vertex> getPredecessors();
/**
* Returns the value of the '<em><b>Successors</b></em>' reference list.
* The list contents are of type {@link net.sf.orcc.graph.Vertex}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Successors</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Successors</em>' reference list.
* @see net.sf.orcc.graph.GraphPackage#getVertex_Successors()
* @model resolveProxies="false" transient="true" changeable="false" derived="true"
* @generated
*/
EList<Vertex> getSuccessors();
/**
* Returns the value of the '<em><b>Neighbors</b></em>' reference list.
* The list contents are of type {@link net.sf.orcc.graph.Vertex}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Neighboors</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Neighbors</em>' reference list.
* @see net.sf.orcc.graph.GraphPackage#getVertex_Neighbors()
* @model resolveProxies="false" transient="true" changeable="false" derived="true"
* @generated
*/
EList<Vertex> getNeighbors();
/**
* Sets the value of the '{@link net.sf.orcc.graph.Vertex#getLabel <em>Label</em>}' attribute.
* <!-- begin-user-doc --><!-- end-user-doc -->
* @param value the new value of the '<em>Label</em>' attribute.
* @see #getLabel()
* @generated
*/
void setLabel(String value);
/**
* Sets the value of the '{@link net.sf.orcc.graph.Vertex#getNumber <em>Number</em>}' attribute.
* <!-- begin-user-doc --><!-- end-user-doc -->
* @param value the new value of the '<em>Number</em>' attribute.
* @see #getNumber()
* @generated
*/
void setNumber(int value);
}