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 }