harpoon.Analysis.PointerAnalysis
Interface Relation

All Known Implementing Classes:
AbstrRelation, AbstrRelationMapBased, LightRelation, RelationImpl

public interface Relation

Relation is a mathematical relation, accepting one to many and many to one mappings.

It is similar to harpoon.Util.Collections.MultiMap but it is intended to be simpler and better tailored for the implementation of the Pointer Analysis algorithm.

Version:
$Id: Relation.java,v 1.2 2005/08/17 23:34:01 salcianu Exp $
Author:
Alexandru SALCIANU <salcianu@retezat.lcs.mit.edu>

Method Summary
 boolean add(Object key, Object value)
          Adds the pair <key, value> to the relation.
 boolean addAll(Object key, Collection values)
          Adds a relation from key to each element of the set values.
 Object clone()
          Clones this relation.
 boolean contains(Object key, Object value)
          Checks the existence of the relation <key,value>.
 boolean containsKey(Object key)
          Checks the existence of the key key in this relation.
 Relation convert(Map map, Relation result)
          Convert this relation through the mapping map.
 boolean equals(Object o)
          Checks the equality of two relations
 void forAllEntries(RelationEntryVisitor visitor)
          Visits all the entries <key,value> of this relation and calls visitor.visit on each of them.
 Set getValues(Object key)
          Returns the image of key through this relation.
 boolean isEmpty()
          Tests if this relation is empty or not.
 Set keys()
          Returns all the keys appearing in this relation.
 void remove(Object key, Object value)
          Removes the relation between key and value.
 void removeAll(Object key, Collection values)
          Removes the relation between key and any element from values.
 void removeKey(Object key)
          Removes all the relations attached to key.
 void removeKeys(PredicateWrapper predicate)
          Removes all the keys that satisfy predicate.check().
 void removeObjects(PredicateWrapper predicate)
          Removes all the relations involving at least one object that satisfy predicate.check().
 void removeValues(PredicateWrapper predicate)
          Removes all the values that satisfy predicate.check().
 Relation revert(Relation result)
          Revert this relation and store the result into the relation result.
 Relation select(Collection selected_keys)
          Returns the subrelation of this relation that contains only the keys that appear in selected_keys.
 boolean union(Relation rel)
          Combines this relation with relation rel.
 Set values()
          Returns all the values appearing in this relation.
 

Method Detail

add

boolean add(Object key,
            Object value)
Adds the pair <key, value> to the relation. Returns true if the new relation is bigger.


addAll

boolean addAll(Object key,
               Collection values)
Adds a relation from key to each element of the set values. values should not contain duplicated elements. Returns true if the new relation is bigger.


remove

void remove(Object key,
            Object value)
Removes the relation between key and value.


removeAll

void removeAll(Object key,
               Collection values)
Removes the relation between key and any element from values.


removeKey

void removeKey(Object key)
Removes all the relations attached to key.


removeKeys

void removeKeys(PredicateWrapper predicate)
Removes all the keys that satisfy predicate.check().


removeValues

void removeValues(PredicateWrapper predicate)
Removes all the values that satisfy predicate.check().


removeObjects

void removeObjects(PredicateWrapper predicate)
Removes all the relations involving at least one object that satisfy predicate.check().


contains

boolean contains(Object key,
                 Object value)
Checks the existence of the relation <key,value>.


containsKey

boolean containsKey(Object key)
Checks the existence of the key key in this relation.


isEmpty

boolean isEmpty()
Tests if this relation is empty or not.


getValues

Set getValues(Object key)
Returns the image of key through this relation. The returned collection is guarranted not to contain duplicates. Can return null if no value is attached to key. If the result is non-null, additions and removals on the returned collection take effect on the relation.


keys

Set keys()
Returns all the keys appearing in this relation. The result is guaranted not to contain duplicates.


values

Set values()
Returns all the values appearing in this relation.


union

boolean union(Relation rel)
Combines this relation with relation rel. A null parameter is considered to be an empty relation.

Returns:
true iff this relation has changed.

equals

boolean equals(Object o)
Checks the equality of two relations

Overrides:
equals in class Object

select

Relation select(Collection selected_keys)
Returns the subrelation of this relation that contains only the keys that appear in selected_keys.


forAllEntries

void forAllEntries(RelationEntryVisitor visitor)
Visits all the entries <key,value> of this relation and calls visitor.visit on each of them.


clone

Object clone()
Clones this relation.


revert

Relation revert(Relation result)
Revert this relation and store the result into the relation result. <a,b> appears in the reverse relation iff <b,a> appears in this relation. Returns the new relation (ie, result).


convert

Relation convert(Map map,
                 Relation result)
Convert this relation through the mapping map. The converted mapping contains all pairs (a,b) such that there exists c,d such that (c,d) appears in this mapping, and map maps c to a and d to b. If an object is not mapped to anything by map, it will be mapped to itself by default. The result is stored in result. Returns the converted mapping (ie, result).