Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 2008 Ben Bellamy 
   * 
   * All rights reserved.
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
 package soot.jimple.toolkits.typing.fast;
 
 import java.util.*;
 import soot.*;

Author(s):
Ben Bellamy
 
 public class Typing
 {
 	private HashMap<LocalTypemap;
 	
 	public Typing(Collection<Localvs)
 	{
 		this. = new HashMap<LocalType>();
 		for ( Local v : vs )
 			this..put(v, BottomType.v());
 	}
 	
 	public Typing(Typing tg)
 	{
 		this. = new HashMap<LocalType>(tg.map);
 	}
 	
 	public Type get(Local v) { return this..get(v); }
 	
 	public Type set(Local vType t) { return this..put(vt); }
 	
 	public String toString()
 	{
 		StringBuffer sb = new StringBuffer();
 		sb.append('{');
 		for ( Local v : this..keySet() )
 		{
 			sb.append(v);
 			sb.append(':');
 			sb.append(this.get(v));
 			sb.append(',');
 		}
 		sb.append('}');
 		return sb.toString();
 	}
 	
 	public static void minimize(List<TypingtgsIHierarchy h)
 	{
 		for ( ListIterator<Typingi = tgs.listIterator(); i.hasNext(); )
 		{
 			Typing tgi = i.next();
 			for ( ListIterator<Typingj = tgs.listIterator(); j.hasNext(); )
 			{
 				Typing tgj = j.next();
 				if ( tgi != tgj && compare(tgitgjh) == 1 )
 				{
 					i.remove();
 					break;
 				}
 			}
 		}
 	}
 	
 	public static int compare(Typing aTyping bIHierarchy h)
 	{
 		int r = 0;
 		for ( Local v : a.map.keySet() )
 		{
 			Type ta = a.get(v), tb = b.get(v);
 			
 			int cmp;
 			if ( TypeResolver.typesEqual(tatb) )
 				cmp = 0;
 			if ( h.ancestor(tatb) )
 				cmp = 1;
 			else if ( h.ancestor(tbta) )
 				cmp = -1;
 			else
 				return -2;
 			
 			if ( (cmp == 1 && r == -1) || (cmp == -1 && r == 1) )
 				return 2;
			if ( r == 0 )
				r = cmp;
		}
		return r;
	}
New to GrepCode? Check out our FAQ X