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     }