1 cananian 1.1.2.20 // Data.java, created Wed Sep  8 15:45:19 1999 by cananian
 2 cananian 1.1.2.20 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.4  // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 duncan   1.1.2.1  package harpoon.IR.Tree;
 5 duncan   1.1.2.1  
 6 duncan   1.1.2.1  import harpoon.Backend.Generic.Frame;
 7 duncan   1.1.2.1  import harpoon.ClassFile.HClass;
 8 cananian 1.1.2.22 import harpoon.ClassFile.HCode.PrintCallback;
 9 duncan   1.1.2.1  import harpoon.ClassFile.HData;
10 cananian 1.1.2.20 import harpoon.ClassFile.HDataElement;
11 cananian 1.1.2.20 import harpoon.Temp.TempFactory;
12 pnkfelix 1.1.2.2  
13 duncan   1.1.2.8  import java.util.Iterator;
14 duncan   1.1.2.1  import java.util.List;
15 duncan   1.1.2.1  /**
16 cananian 1.1.2.20  * <code>Data</code> is an abstract implementation of <code>HData</code>
17 cananian 1.1.2.20  * for <code>IR.Tree</code> form.
18 duncan   1.1.2.1   * 
19 cananian 1.1.2.20  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
20 cananian 1.4       * @version $Id: Data.java,v 1.4 2002/08/31 00:24:58 cananian Exp $
21 duncan   1.1.2.1   */
22 cananian 1.1.2.20 public abstract class Data extends harpoon.ClassFile.HData {
23 cananian 1.2.2.1      protected final String desc;
24 cananian 1.2.2.1      protected final Frame frame;
25 cananian 1.2.2.1      protected final TreeFactory tf;
26 cananian 1.1.2.20 
27 cananian 1.4          /** Keep track of modifications to this <code>Data</code> so that the
28 cananian 1.4           *  <code>getElementsI()</code> <code>Iterator</code> can fail-fast. */
29 cananian 1.4          protected int modCount=0;
30 cananian 1.4      
31 cananian 1.1.2.20     /** Create a proper TreeFactory. */
32 cananian 1.1.2.20     protected class TreeFactory extends harpoon.IR.Tree.TreeFactory {
33 cananian 1.1.2.20         private int id=0;
34 cananian 1.1.2.20         TreeFactory() { }
35 cananian 1.1.2.21         /** No temp factory for Data */
36 cananian 1.1.2.21         public TempFactory tempFactory() { return null; }
37 cananian 1.1.2.20         /** Returns the <code>HCode</code> to which all
38 cananian 1.1.2.20          *  <code>HDataElement</code>s generated by this factory belong. */
39 cananian 1.1.2.20         public Data getParent() { return Data.this; }
40 cananian 1.4              /** Indicate that the parent has changed, so that its
41 cananian 1.4               *  fail-fast iterators will work correctly. */
42 cananian 1.4              void incModCount() { Data.this.modCount++; }
43 cananian 1.1.2.20         /** Returns the <code>HClass</code> to which all
44 cananian 1.1.2.20          *  <code>HDataElement</code>s generated by this factory belong. */
45 cananian 1.1.2.20         public Frame getFrame() { return Data.this.frame; } 
46 cananian 1.1.2.20         synchronized int getUniqueID() { return id++; }
47 cananian 1.1.2.20         public String toString() { 
48 cananian 1.1.2.20             return "Data.TreeFactory["+getParent().toString()+"]"; 
49 duncan   1.1.2.1          }
50 cananian 1.1.2.20         public int hashCode() { return Data.this.hashCode(); }
51 duncan   1.1.2.1      }
52 cananian 1.1.2.21     protected Data(String desc, Frame f) {
53 cananian 1.1.2.20         this.desc = desc;
54 cananian 1.1.2.20         this.frame = f;
55 cananian 1.1.2.20         this.tf = new TreeFactory();
56 duncan   1.1.2.1      }
57 cananian 1.1.2.20     public String getDesc() { return desc; }
58 duncan   1.1.2.1  
59 cananian 1.1.2.20     /** Print a human-readable representation of this dataview */
60 cananian 1.1.2.22     public void print(java.io.PrintWriter pw, PrintCallback callback) {
61 cananian 1.1.2.22         Print.print(pw, this, callback);
62 duncan   1.1.2.1      }
63 cananian 1.2      }