Main Page   Packages   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

CodeIndexManagerAlloc.java

00001 package edu.ksu.cis.bandera.bofa;
00002 
00003 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00004  * Bandera, a Java(TM) analysis and transformation toolkit           *
00005  * Copyright (C) 1998, 1999                                          *
00006  * John Hatcliff (hatcliff@cis.ksu.edu)
00007  * All rights reserved.                                              *
00008  *                                                                   *
00009  * This work was done as a project in the SAnToS Laboratory,         *
00010  * Department of Computing and Information Sciences, Kansas State    *
00011  * University, USA (http://www.cis.ksu.edu/santos).                  *
00012  * It is understood that any modification not identified as such is  *
00013  * not covered by the preceding statement.                           *
00014  *                                                                   *
00015  * This work is free software; you can redistribute it and/or        *
00016  * modify it under the terms of the GNU Library General Public       *
00017  * License as published by the Free Software Foundation; either      *
00018  * version 2 of the License, or (at your option) any later version.  *
00019  *                                                                   *
00020  * This work is distributed in the hope that it will be useful,      *
00021  * but WITHOUT ANY WARRANTY; without even the implied warranty of    *
00022  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *
00023  * Library General Public License for more details.                  *
00024  *                                                                   *
00025  * You should have received a copy of the GNU Library General Public *
00026  * License along with this toolkit; if not, write to the             *
00027  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,      *
00028  * Boston, MA  02111-1307, USA.                                      *
00029  *                                                                   *
00030  * Java is a trademark of Sun Microsystems, Inc.                     *
00031  *                                                                   *
00032  * To submit a bug report, send a comment, or get the latest news on *
00033  * this project and other SAnToS projects, please visit the web-site *
00034  *                http://www.cis.ksu.edu/santos                      *
00035  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
00036 
00037 import ca.mcgill.sable.util.*;
00038 import ca.mcgill.sable.soot.*;
00039 import ca.mcgill.sable.soot.jimple.Value;
00040 
00041 /*
00042  * CodeIndexManagerAlloc.java
00043  * $Id: CodeIndexManagerAlloc.java,v 1.1.1.1 2002/01/24 03:42:07 pserver Exp $
00044  */
00045 
00046 /**
00047  * This class generates an index to partition object creation sites.
00048  *
00049  * @author <A HREF="http://www.cis.ksu.edu/~hatcliff">John Hatcliff</A>
00050  * @author 
00051  * <a href="http://www.cis.ksu.edu/~rvprasad">Venkatesh Prasad Ranganath</a> 
00052  *
00053  * @version $Name:  $($Revision: 1.1.1.1 $)
00054  */
00055 public class CodeIndexManagerAlloc implements CodeIndexManager
00056 {
00057     /**
00058      * Maps the <code>Value</code> object to a index.
00059      */
00060     Map positionMap;
00061 
00062     /**
00063      * An implementation of Index for tracking code.
00064      */
00065     class CodeIndexAlloc extends Index
00066     {
00067         /** 
00068          * The <code>Value</code> object associated with this object.
00069          */
00070         private Value position;
00071         
00072         /**
00073          * Constructor of the class.
00074          *
00075          * @param position <code>Value</code> object associated with this object.
00076         */ 
00077         CodeIndexAlloc(Value position)
00078         {
00079             this.position = position;
00080         }
00081         
00082         /**
00083          * Returns the corresponding Value object.
00084          *
00085          * @return The corresponding Value object.
00086          */
00087         public Value getPosition()
00088         {
00089             return position;
00090         }
00091     }
00092 
00093     /** 
00094      * Constructor for the class.
00095      */
00096     public CodeIndexManagerAlloc()
00097     {
00098         positionMap = new HashMap();
00099     }
00100     /**
00101      * Resets the data structures inside the manager.
00102      *
00103      */
00104     public void reset() 
00105     {
00106         positionMap.clear();
00107     }
00108     /**
00109      * Provides the index corresponding to the given position.  If an index does
00110      * not exist then a new one is created.
00111      *
00112      * @param position The <code>Value</code> for which the Index is requested.
00113      * @return The <code>Index</code> corresponding to the given Value object.
00114      */
00115     public Index select(Value position)
00116     {
00117         Index codeIndex;
00118         Value p = position; 
00119         
00120         if (positionMap.containsKey(p)) {
00121             // if position is already registered, return the associated 
00122             // index object.
00123             codeIndex = (Index) positionMap.get(p);
00124         } else {
00125             // if position is not registered, then register it
00126             codeIndex = new CodeIndexAlloc(position);
00127             positionMap.put(p,codeIndex);
00128         }
00129         return codeIndex;
00130     }
00131 }

Generated at Thu Feb 7 06:42:39 2002 for Bandera by doxygen1.2.10 written by Dimitri van Heesch, © 1997-2001