1 cananian 1.1.2.1 // CFGraphable.java, created Mon Nov 29 23:34:03 1999 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1 package harpoon.IR.Properties;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 import harpoon.ClassFile.HCodeEdge;
 7 cananian 1.4     import harpoon.ClassFile.HCodeElement;
 8 cananian 1.5     import harpoon.Util.Collections.Graph;
 9 cananian 1.1.2.1 
10 cananian 1.6     import java.util.List;
11 cananian 1.1.2.1 /**
12 cananian 1.1.2.1  * <code>CFGraphable</code> defines an interface for intermediate 
13 cananian 1.1.2.1  * representations that are inherently interconnected in a directed
14 cananian 1.1.2.1  * control-flow graphs.
15 cananian 1.1.2.1  * 
16 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
17 cananian 1.6      * @version $Id: CFGraphable.java,v 1.6 2004/02/07 21:28:54 cananian Exp $
18 cananian 1.1.2.3  * @see harpoon.IR.Properties.CFGrapher
19 cananian 1.1.2.3  * @see harpoon.IR.Properties.CFGrapher#DEFAULT
20 cananian 1.1.2.1  */
21 cananian 1.4     public interface CFGraphable<CFG extends CFGraphable<CFG,E>,
22 cananian 1.4                                  E extends CFGEdge<CFG,E>>
23 cananian 1.5         extends harpoon.ClassFile.HCodeElement, Graph.Node<CFG,E> {       
24 cananian 1.1.2.1     /** Returns an array of all the edges to and from this 
25 cananian 1.1.2.1      *  <code>CFGraphable</code>. */
26 cananian 1.2.2.1     public E[] edges();
27 cananian 1.1.2.1     /** Returns an array of all the edges entering this
28 cananian 1.1.2.1      *  <code>CFGraphable</code>. */
29 cananian 1.2.2.1     public E[] pred();
30 cananian 1.1.2.1     /** Returns an array of all the edges leaving this
31 cananian 1.1.2.1      *  <code>CFGraphable</code>. */
32 cananian 1.2.2.1     public E[] succ();
33 cananian 1.1.2.1 
34 cananian 1.1.2.1     // JDK 1.2 collections API: [CSA, 15-Jun-1999]
35 cananian 1.6         /** Returns a <code>List</code> of all the edges to and from
36 cananian 1.1.2.1      *  this <code>HCodeElement</code>. */
37 cananian 1.6         public List<E> edgeC();
38 cananian 1.6         /** Returns a <code>List</code> of all the edges to
39 cananian 1.1.2.1         this <code>HCodeElement</code>. 
40 duncan   1.1.2.2         Each <code>CFGEdge</code> returned is guaranteed to return 
41 cananian 1.1.2.1         <code>this</code> in response to a call to <code>to()</code>;
42 cananian 1.1.2.1         the actual predecessor will be returned from
43 cananian 1.1.2.1         <code>from()</code>.  
44 cananian 1.1.2.1      */
45 cananian 1.6         public List<E> predC();
46 cananian 1.6         /** Returns a <code>List</code> of all the edges from
47 cananian 1.1.2.1         this <code>HCodeElement</code>. 
48 duncan   1.1.2.2         Each <code>CFGEdge</code> returned is guaranteed to return
49 cananian 1.1.2.1         <code>this</code> in response to a call to
50 cananian 1.1.2.1         <code>from()</code>; the actual successor to <code>this</code>
51 cananian 1.1.2.1         will be returned from <code>to()</code>.
52 cananian 1.1.2.1      */
53 cananian 1.6         public List<E> succC();
54 cananian 1.2     }