soot.jimple.spark.sets
Class PointsToSetInternal

java.lang.Object
  extended by soot.jimple.spark.sets.PointsToSetInternal
All Implemented Interfaces:
EqualsSupportingPointsToSet, PointsToSet
Direct Known Subclasses:
BitPointsToSet, DoublePointsToSet, EmptyPointsToSet, HashPointsToSet, HybridPointsToSet, SharedHybridSet, SharedListSet, SortedArraySet

public abstract class PointsToSetInternal
extends Object
implements PointsToSet, EqualsSupportingPointsToSet

Abstract base class for implementations of points-to sets.

Author:
Ondrej Lhotak

Nested Class Summary
static class PointsToSetInternal.P2SetVisitorDefaultTrue
          A P2SetVisitor with a default return value of true.
static class PointsToSetInternal.P2SetVisitorInt
          A P2SetVisitor with an int value.
 
Field Summary
protected  Type type
           
 
Constructor Summary
PointsToSetInternal(Type type)
           
 
Method Summary
abstract  boolean add(Node n)
          Adds n to this set, returns true if n was not already in this set.
 boolean addAll(PointsToSetInternal other, PointsToSetInternal exclude)
          Adds contents of other minus the contents of exclude into this set; returns true if this set changed.
abstract  boolean contains(Node n)
          Returns true iff the set contains n.
 void flushNew()
          Sets all newly-added nodes to old nodes.
abstract  boolean forall(P2SetVisitor v)
          Calls v's visit method on all nodes in this set.
protected  BitVector getBitMask(PointsToSetInternal other, PAG pag)
           
 PointsToSetInternal getNewSet()
          Returns set of newly-added nodes since last call to flushNew.
 PointsToSetInternal getOldSet()
          Returns set of nodes already present before last call to flushNew.
 Type getType()
           
 boolean hasNonEmptyIntersection(PointsToSet other)
          Returns true if this set shares some objects with other.
 void mergeWith(PointsToSetInternal other)
          Merges other into this set.
 boolean pointsToSetEquals(Object other)
          Returns true if and only if other holds the same alloc nodes as this.
 int pointsToSetHashCode()
          Computes a hash code based on the contents of the points-to set.
 Set<ClassConstant> possibleClassConstants()
          If this points-to set consists entirely of objects of type java.lang.Class of a known class, returns a set of ClassConstant's that are these classes.
 Set<String> possibleStringConstants()
          If this points-to set consists entirely of string constants, returns a set of these constant strings.
 Set<Type> possibleTypes()
          Set of all possible run-time types of objects in the set.
 void setType(Type type)
           
 int size()
           
 String toString()
           
 void unFlushNew()
          Sets all nodes to newly-added nodes.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

type

protected Type type
Constructor Detail

PointsToSetInternal

public PointsToSetInternal(Type type)
Method Detail

addAll

public boolean addAll(PointsToSetInternal other,
                      PointsToSetInternal exclude)
Adds contents of other minus the contents of exclude into this set; returns true if this set changed.


forall

public abstract boolean forall(P2SetVisitor v)
Calls v's visit method on all nodes in this set.


add

public abstract boolean add(Node n)
Adds n to this set, returns true if n was not already in this set.


getNewSet

public PointsToSetInternal getNewSet()
Returns set of newly-added nodes since last call to flushNew.


getOldSet

public PointsToSetInternal getOldSet()
Returns set of nodes already present before last call to flushNew.


flushNew

public void flushNew()
Sets all newly-added nodes to old nodes.


unFlushNew

public void unFlushNew()
Sets all nodes to newly-added nodes.


mergeWith

public void mergeWith(PointsToSetInternal other)
Merges other into this set.


contains

public abstract boolean contains(Node n)
Returns true iff the set contains n.


hasNonEmptyIntersection

public boolean hasNonEmptyIntersection(PointsToSet other)
Description copied from interface: PointsToSet
Returns true if this set shares some objects with other.

Specified by:
hasNonEmptyIntersection in interface PointsToSet

possibleTypes

public Set<Type> possibleTypes()
Description copied from interface: PointsToSet
Set of all possible run-time types of objects in the set.

Specified by:
possibleTypes in interface PointsToSet

getType

public Type getType()

setType

public void setType(Type type)

size

public int size()

toString

public String toString()
Overrides:
toString in class Object

possibleStringConstants

public Set<String> possibleStringConstants()
Description copied from interface: PointsToSet
If this points-to set consists entirely of string constants, returns a set of these constant strings. If this point-to set may contain something other than constant strings, returns null.

Specified by:
possibleStringConstants in interface PointsToSet

possibleClassConstants

public Set<ClassConstant> possibleClassConstants()
Description copied from interface: PointsToSet
If this points-to set consists entirely of objects of type java.lang.Class of a known class, returns a set of ClassConstant's that are these classes. If this point-to set may contain something else, returns null.

Specified by:
possibleClassConstants in interface PointsToSet

getBitMask

protected BitVector getBitMask(PointsToSetInternal other,
                               PAG pag)

pointsToSetHashCode

public int pointsToSetHashCode()
Computes a hash code based on the contents of the points-to set. Note that hashCode() is not overwritten on purpose. This is because Spark relies on comparison by object identity.

Specified by:
pointsToSetHashCode in interface EqualsSupportingPointsToSet

pointsToSetEquals

public boolean pointsToSetEquals(Object other)
Returns true if and only if other holds the same alloc nodes as this. Note that equals() is not overwritten on purpose. This is because Spark relies on comparison by object identity.

Specified by:
pointsToSetEquals in interface EqualsSupportingPointsToSet