1 cananian 1.1.2.1 // HCodeAndMaps.java, created Fri Oct  6 12:01:54 2000 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 2000 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.ClassFile;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 import harpoon.Temp.TempMap;
 7 cananian 1.1.2.1 import java.util.Map;
 8 cananian 1.1.2.1 /**
 9 cananian 1.1.2.1  * <code>HCodeAndMaps</code> is a strongly-typed tuple representing
10 cananian 1.1.2.1  * all the derivation information for a cloned <code>HCode</code>.
11 cananian 1.1.2.1  * This includes the mappings from old <code>HCodeElement</code>s
12 cananian 1.1.2.1  * and <code>Temp</code>s to new <code>HCodeElement</code>s and
13 cananian 1.1.2.1  * <code>Temp</code>s as well as the identity of both the old
14 cananian 1.1.2.1  * <code>HCode</code> and newly cloned <code>HCode</code>.
15 cananian 1.1.2.1  * It is intended to make 'clone-then-mutate' operations more
16 cananian 1.1.2.1  * straight-forward to write.
17 cananian 1.1.2.1  * 
18 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
19 cananian 1.4      * @version $Id: HCodeAndMaps.java,v 1.4 2003/07/11 09:41:28 cananian Exp $
20 cananian 1.1.2.1  */
21 cananian 1.4     public class HCodeAndMaps<HCE extends HCodeElement> {
22 cananian 1.3         private final HCode<HCE> hcode, ancestorHCode;
23 cananian 1.3         private final Map<HCE,HCE> elementMap, ancestorElementMap;
24 cananian 1.1.2.2     private final TempMap tempMap, ancestorTempMap;
25 cananian 1.1.2.2     /** constructor. */
26 cananian 1.3         public HCodeAndMaps(HCode<HCE> hcode,
27 cananian 1.3                             Map<HCE,HCE> elementMap,
28 cananian 1.3                             TempMap tempMap,
29 cananian 1.3                             HCode<HCE> ancestorHCode,
30 cananian 1.3                             Map<HCE,HCE> ancestorElementMap,
31 cananian 1.1.2.2                         TempMap ancestorTempMap) {
32 cananian 1.1.2.2         this.hcode=hcode;
33 cananian 1.1.2.2         this.elementMap=elementMap;
34 cananian 1.1.2.2         this.tempMap=tempMap;
35 cananian 1.1.2.2         this.ancestorHCode=ancestorHCode;
36 cananian 1.1.2.2         this.ancestorElementMap=ancestorElementMap;
37 cananian 1.1.2.2         this.ancestorTempMap=ancestorTempMap;
38 cananian 1.1.2.2     }
39 cananian 1.1.2.2 
40 cananian 1.1.2.1     /** Returns the newly-cloned <code>HCode</code>. */
41 cananian 1.3         public HCode<HCE> hcode() { return hcode; }
42 cananian 1.1.2.1     /** An immutable mapping from ancestor <code>HCodeElement</code>s
43 cananian 1.1.2.1      *  to newly-cloned <code>HCodeElement</code>s. */
44 cananian 1.3         public Map<HCE,HCE> elementMap() { return elementMap; }
45 cananian 1.1.2.1     /** An immutable mapping from ancestor <code>Temp</code>s to
46 cananian 1.1.2.1      *  newly-cloned <code>Temp</code>s. */
47 cananian 1.1.2.2     public TempMap tempMap() { return tempMap; }
48 cananian 1.1.2.1 
49 cananian 1.1.2.1     /** Returns the original <code>HCode</code> that the clone returned
50 cananian 1.1.2.1      *  by the <code>hcode()</code> method was copied from. */
51 cananian 1.3         public HCode<HCE> ancestorHCode() { return ancestorHCode; }
52 cananian 1.1.2.1     /** An immutable mapping from newly-cloned <code>HCodeElement</code>s
53 cananian 1.1.2.1      *  to ancestor <code>HCodeElement</code>s. */
54 cananian 1.3         public Map<HCE,HCE> ancestorElementMap() { return ancestorElementMap; }
55 cananian 1.1.2.1     /** An immutable mapping from newly-cloned <code>Temp</code>s to
56 cananian 1.1.2.1      *  ancestor <code>Temp</code>s. */
57 cananian 1.1.2.2     public TempMap ancestorTempMap() { return ancestorTempMap; }
58 cananian 1.2     }