1 salcianu 1.1.2.1 // PALoad.java, created Mon Feb 7 15:24:14 2000 by salcianu 2 cananian 1.1.2.7 // Copyright (C) 2000 Alexandru SALCIANU <salcianu@retezat.lcs.mit.edu> 3 salcianu 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 salcianu 1.1.2.1 package harpoon.Analysis.PointerAnalysis; 5 salcianu 1.1.2.1 6 salcianu 1.1.2.2 import java.util.Set; 7 salcianu 1.1.2.5 import java.util.Map; 8 salcianu 1.1.2.5 9 salcianu 1.1.2.2 10 salcianu 1.1.2.1 /** 11 salcianu 1.1.2.1 * <code>PALoad</code> models a LD action. 12 salcianu 1.1.2.1 * A <code>PALoad</code> object represents the loading of the 13 salcianu 1.1.2.1 * outside reference <code>n1--f-->n2</code>. 14 salcianu 1.1.2.1 * 15 cananian 1.1.2.7 * @author Alexandru SALCIANU <salcianu@retezat.lcs.mit.edu> 16 cananian 1.2 * @version $Id: PALoad.java,v 1.2 2002/02/25 20:58:40 cananian Exp $ 17 salcianu 1.1.2.1 */ 18 salcianu 1.1.2.6 class PALoad implements java.io.Serializable { 19 salcianu 1.1.2.1 20 salcianu 1.1.2.1 /** The start node of the outside edges. */ 21 salcianu 1.1.2.1 PANode n1; 22 salcianu 1.1.2.1 /** The field that is read. */ 23 salcianu 1.1.2.1 String f; 24 salcianu 1.1.2.1 /** The end node of the outside edge. */ 25 salcianu 1.1.2.1 PANode n2; 26 salcianu 1.1.2.1 /** The thread that did it. */ 27 salcianu 1.1.2.1 PANode nt; 28 salcianu 1.1.2.1 29 salcianu 1.1.2.1 /** Creates a <code>PALoad</code>. */ 30 salcianu 1.1.2.1 public PALoad(PANode n1, String f, PANode n2, PANode nt){ 31 salcianu 1.1.2.1 this.n1 = n1; 32 salcianu 1.1.2.1 this.f = f; 33 salcianu 1.1.2.1 this.n2 = n2; 34 salcianu 1.1.2.1 this.nt = nt; 35 salcianu 1.1.2.1 } 36 salcianu 1.1.2.5 37 salcianu 1.1.2.5 /* Specializes <code>this</code> <code>PALoad</code> according 38 salcianu 1.1.2.5 to <code>map</code>, a mapping from <code>PANode<code> to 39 salcianu 1.1.2.5 <code>PANode</code>. Each node which is not explicitly mapped is 40 salcianu 1.1.2.5 considered to be mapped to itself. */ 41 salcianu 1.1.2.5 public final PALoad specialize(Map map){ 42 salcianu 1.1.2.5 PANode n1p = PANode.translate(n1, map); 43 salcianu 1.1.2.5 PANode n2p = PANode.translate(n2, map); 44 salcianu 1.1.2.5 PANode ntp = PANode.translate(nt, map); 45 salcianu 1.1.2.5 if((n1p == n1) && (n2p == n2) && (ntp == nt)) return this; 46 salcianu 1.1.2.5 return new PALoad(n1p, f, n2p, ntp); 47 salcianu 1.1.2.5 } 48 salcianu 1.1.2.1 49 salcianu 1.1.2.1 /** Checks the equality of two <code>PALoad</code> objects. */ 50 salcianu 1.1.2.1 public boolean equals(Object o){ 51 salcianu 1.1.2.1 PALoad load2 = (PALoad) o; 52 salcianu 1.1.2.1 return 53 salcianu 1.1.2.1 (n1 == load2.n1) && (n2 == load2.n2) && 54 salcianu 1.1.2.1 f.equals(load2.f) && (nt == load2.nt); 55 salcianu 1.1.2.1 } 56 salcianu 1.1.2.1 57 salcianu 1.1.2.1 public int hashCode(){ 58 salcianu 1.1.2.1 return n2.hashCode(); 59 salcianu 1.1.2.1 } 60 salcianu 1.1.2.1 61 salcianu 1.1.2.1 /** Pretty-printer for debug purposes. */ 62 salcianu 1.1.2.1 public String toString(){ 63 salcianu 1.1.2.1 return "< ld , " + n1 + " , " + f + " , " + n2 + 64 salcianu 1.1.2.1 ((nt!=ActionRepository.THIS_THREAD)? (" , " + nt) : "") + 65 salcianu 1.1.2.1 " >"; 66 salcianu 1.1.2.2 } 67 salcianu 1.1.2.2 68 salcianu 1.1.2.3 /** Checks whether <code>this</code> load contains only remaining nodes. 69 salcianu 1.1.2.3 This method is designed to be used by <code>keepTheEssential</code>. 70 salcianu 1.1.2.3 Warning: <code>isGood</code> is NOT the negation of 71 salcianu 1.1.2.4 <code>isBad</code>. */ 72 salcianu 1.1.2.3 boolean isGood(Set remaining_nodes){ 73 salcianu 1.1.2.3 return 74 salcianu 1.1.2.3 remaining_nodes.contains(n1) && remaining_nodes.contains(n2) && 75 salcianu 1.1.2.3 remaining_nodes.contains(nt); 76 salcianu 1.1.2.3 } 77 salcianu 1.1.2.3 78 salcianu 1.1.2.2 /** Checks whether <code>this</code> load contains at least one 79 salcianu 1.1.2.2 <i>bad node</i>. This method is designed to help us identifying 80 salcianu 1.1.2.2 the loads that are eliminated when some nodes are removed. */ 81 salcianu 1.1.2.3 boolean isBad(Set bad_nodes){ 82 salcianu 1.1.2.2 return 83 salcianu 1.1.2.2 bad_nodes.contains(n1) || bad_nodes.contains(n2) || 84 salcianu 1.1.2.2 bad_nodes.contains(nt); 85 salcianu 1.1.2.1 } 86 salcianu 1.1.2.1 87 salcianu 1.1.2.1 } 88 cananian 1.2