1 marinov  1.1.2.1 // SetHClass.java, created Wed Nov  4 17:21:09 1998 by marinov
 2 cananian 1.1.2.3 // Copyright (C) 1998 Darko Marinov <marinov@lcs.mit.edu>
 3 cananian 1.1.2.3 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 marinov  1.1.2.1 package harpoon.Analysis.TypeInference;
 5 marinov  1.1.2.1 
 6 cananian 1.1.2.5 import harpoon.ClassFile.HClass;
 7 marinov  1.1.2.1 
 8 cananian 1.1.2.5 import java.util.Collections;
 9 marinov  1.1.2.1 import java.util.Enumeration;
10 cananian 1.1.2.5 import java.util.HashSet;
11 cananian 1.1.2.5 import java.util.Iterator;
12 cananian 1.1.2.5 import java.util.Set;
13 marinov  1.1.2.1 /**
14 marinov  1.1.2.1  * <code>SetHClass</code> represents concrete type.
15 marinov  1.1.2.1  * Right now it is just a <code>Set</code> of <code>HClass</code>es,
16 marinov  1.1.2.1  * but optimized ways of representing cone of classes
17 marinov  1.1.2.1  * (i.e. class and all its subclasses) can be considered.
18 marinov  1.1.2.1  *
19 marinov  1.1.2.1  * @author  Darko Marinov <marinov@lcs.mit.edu>
20 cananian 1.2      * @version $Id: SetHClass.java,v 1.2 2002/02/25 21:00:38 cananian Exp $
21 marinov  1.1.2.1  */
22 marinov  1.1.2.1 
23 pnkfelix 1.1.2.2 public class SetHClass extends HashSet {
24 marinov  1.1.2.1     public SetHClass() { }
25 cananian 1.1.2.5     public SetHClass(HClass c) { add(c); }
26 cananian 1.1.2.5     public SetHClass(SetHClass s) { super(s); }
27 marinov  1.1.2.1     /** finds the union of this set and the parameter and returns true 
28 marinov  1.1.2.1      *  if some elements were added. 
29 marinov  1.1.2.1      */
30 cananian 1.1.2.5     boolean union(SetHClass s) { return addAll(s); }
31 cananian 1.1.2.5 
32 marinov  1.1.2.1     SetHClass getComponentType() {
33 marinov  1.1.2.1         SetHClass s = new SetHClass();
34 cananian 1.1.2.5         for (Iterator i=iterator(); i.hasNext(); ) {
35 cananian 1.1.2.5             HClass c = ((HClass)i.next()).getComponentType();
36 cananian 1.1.2.5             if (c!=null) s.add(c);
37 marinov  1.1.2.1         }
38 marinov  1.1.2.1         return s;
39 marinov  1.1.2.1     }
40 marinov  1.1.2.1     SetHClass copy() {
41 cananian 1.1.2.5         return new SetHClass(this);
42 marinov  1.1.2.1     }
43 cananian 1.1.2.5     Enumeration elements() { return Collections.enumeration(this); }
44 cananian 1.2     }