1 salcianu 1.1.2.1 // CachingLBBConverter.java, created Thu Mar 23 19:27:58 2000 by salcianu 2 cananian 1.1.2.3 // 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.Util.LightBasicBlocks; 5 salcianu 1.1.2.1 6 salcianu 1.1.2.1 import java.util.Map; 7 salcianu 1.1.2.1 import java.util.HashMap; 8 salcianu 1.1.2.1 9 salcianu 1.1.2.1 import harpoon.ClassFile.HMethod; 10 salcianu 1.1.2.1 import harpoon.Util.BasicBlocks.BBConverter; 11 salcianu 1.1.2.1 12 salcianu 1.1.2.1 /** 13 salcianu 1.1.2.1 * <code>CachingLBBConverter</code> adds some caching to the 14 salcianu 1.1.2.1 <code>LBBConverter</code>. 15 salcianu 1.1.2.1 * 16 cananian 1.1.2.3 * @author Alexandru SALCIANU <salcianu@retezat.lcs.mit.edu> 17 cananian 1.2 * @version $Id: CachingLBBConverter.java,v 1.2 2002/02/25 21:09:33 cananian Exp $ 18 salcianu 1.1.2.1 */ 19 salcianu 1.1.2.2 public class CachingLBBConverter extends LBBConverter 20 salcianu 1.1.2.2 implements java.io.Serializable { 21 salcianu 1.1.2.1 22 salcianu 1.1.2.1 private final Map cache; 23 salcianu 1.1.2.1 24 salcianu 1.1.2.1 /** Creates a <code>CachingLBBConverter</code>. */ 25 salcianu 1.1.2.1 public CachingLBBConverter(BBConverter bbconv) { 26 salcianu 1.1.2.1 super(bbconv); 27 salcianu 1.1.2.1 cache = new HashMap(); 28 salcianu 1.1.2.1 } 29 salcianu 1.1.2.1 30 salcianu 1.1.2.1 /** Returns a <code>LighBasicBlock.Factory</code> for the body of 31 salcianu 1.1.2.1 a method. Uses the already precomputed result if one exists. */ 32 salcianu 1.1.2.1 public LightBasicBlock.Factory convert2lbb(HMethod hm){ 33 salcianu 1.1.2.1 LightBasicBlock.Factory lbb = (LightBasicBlock.Factory) cache.get(hm); 34 salcianu 1.1.2.1 if(lbb == null){ 35 salcianu 1.1.2.1 lbb = super.convert2lbb(hm); 36 salcianu 1.1.2.1 cache.put(hm,lbb); 37 salcianu 1.1.2.1 } 38 salcianu 1.1.2.1 return lbb; 39 salcianu 1.1.2.1 } 40 salcianu 1.1.2.1 41 salcianu 1.1.2.1 /** Remove from the internal cache the result for <code>hm</code>. 42 salcianu 1.1.2.1 This is useful if <code>hm</code> was modified and a new 43 salcianu 1.1.2.1 <code>LightBasicBlock</code> view needs to be generated for it. */ 44 salcianu 1.1.2.1 public void clear(HMethod hm){ 45 salcianu 1.1.2.1 cache.remove(hm); 46 salcianu 1.1.2.1 } 47 salcianu 1.1.2.1 48 salcianu 1.1.2.1 /** Completely clears the internal cache. */ 49 salcianu 1.1.2.1 public void clear(){ 50 salcianu 1.1.2.1 cache.clear(); 51 salcianu 1.1.2.1 } 52 salcianu 1.1.2.1 53 cananian 1.2 }