edu.rice.cs.plt.collect
Class IndexedInjectiveRelation<T1,T2>

java.lang.Object
  extended by java.util.AbstractCollection<E>
      extended by java.util.AbstractSet<T>
          extended by edu.rice.cs.plt.collect.AbstractPredicateSet<Pair<T1,T2>>
              extended by edu.rice.cs.plt.collect.AbstractRelation<T1,T2>
                  extended by edu.rice.cs.plt.collect.AbstractInjectiveRelation<T1,T2>
                      extended by edu.rice.cs.plt.collect.IndexedInjectiveRelation<T1,T2>
All Implemented Interfaces:
InjectiveRelation<T1,T2>, PredicateSet<Pair<T1,T2>>, Relation<T1,T2>, SizedIterable<Pair<T1,T2>>, Predicate<java.lang.Object>, Predicate2<T1,T2>, java.io.Serializable, java.lang.Iterable<Pair<T1,T2>>, java.util.Collection<Pair<T1,T2>>, java.util.Set<Pair<T1,T2>>

public class IndexedInjectiveRelation<T1,T2>
extends AbstractInjectiveRelation<T1,T2>
implements java.io.Serializable

A hash code-based implementation of the InjectiveRelation interface. By default, a hash-based index is created mapping firsts to sets of seconds; this functionality may be turned off where it is not needed.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class edu.rice.cs.plt.collect.AbstractInjectiveRelation
AbstractInjectiveRelation.InverseInjectiveRelation
 
Nested classes/interfaces inherited from class edu.rice.cs.plt.collect.AbstractRelation
AbstractRelation.InverseRelation
 
Constructor Summary
IndexedInjectiveRelation()
          Index in both directions using HashMaps and HashSets.
IndexedInjectiveRelation(boolean indexFirst)
          Index using HashMaps and HashSets.
IndexedInjectiveRelation(Thunk<java.util.Map<T2,T1>> secondIndexFactory)
          Create an index based on the given factory.
IndexedInjectiveRelation(Thunk<java.util.Map<T2,T1>> secondIndexFactory, Thunk<java.util.Map<T1,PredicateSet<T2>>> firstIndexFactory, Thunk<java.util.Set<T2>> firstIndexEntryFactory)
          Create indices based on the given factories.
 
Method Summary
 boolean add(T1 first, T2 second)
          Add Pair.make(first, second) to the set.
 void clear()
           
 PredicateSet<T1> firstSet()
          The set of firsts.
 LambdaMap<T2,T1> injectionMap()
          A map view of the relation, mapping seconds to firsts.
 boolean isStatic()
          true if this iterable is unchanging.
static
<T1,T2> IndexedInjectiveRelation<T1,T2>
makeHashBased()
          Make an IndexedInjectiveRelation indexed by HashMaps and HashSets.
static
<T1,T2> IndexedInjectiveRelation<T1,T2>
makeLinkedHashBased()
          Make an IndexedInjectiveRelation indexed by LinkedHashMaps and LinkedHashSets.
static
<T1 extends java.lang.Comparable<? super T1>,T2 extends java.lang.Comparable<? super T2>>
IndexedInjectiveRelation<T1,T2>
makeTreeBased()
          Make an IndexedInjectiveRelation indexed by TreeMaps and TreeSets.
 PredicateSet<T2> matchFirst(T1 first)
          The set of seconds corresponding to a specific first.
 boolean remove(T1 first, T2 second)
          Remove Pair.make(first, second) from the set.
 
Methods inherited from class edu.rice.cs.plt.collect.AbstractInjectiveRelation
antecedent, contains, contains, containsSecond, hasFixedSize, inverse, isEmpty, isInfinite, iterator, matchSecond, secondSet, size, size
 
Methods inherited from class edu.rice.cs.plt.collect.AbstractRelation
add, containsFirst, excludeFirsts, excludeSeconds, remove
 
Methods inherited from class java.util.AbstractSet
equals, hashCode, removeAll
 
Methods inherited from class java.util.AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface edu.rice.cs.plt.collect.InjectiveRelation
add
 
Methods inherited from interface edu.rice.cs.plt.collect.Relation
containsFirst, excludeFirsts, excludeSeconds, remove
 
Methods inherited from interface java.util.Set
addAll, containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray
 

Constructor Detail

IndexedInjectiveRelation

public IndexedInjectiveRelation()
Index in both directions using HashMaps and HashSets.


IndexedInjectiveRelation

public IndexedInjectiveRelation(boolean indexFirst)
Index using HashMaps and HashSets. If indexFirst is false, no first-to-second index is created.


IndexedInjectiveRelation

public IndexedInjectiveRelation(Thunk<java.util.Map<T2,T1>> secondIndexFactory,
                                Thunk<java.util.Map<T1,PredicateSet<T2>>> firstIndexFactory,
                                Thunk<java.util.Set<T2>> firstIndexEntryFactory)
Create indices based on the given factories.

Parameters:
secondIndexFactory - Maps seconds to firsts.
firstIndexFactory - Maps firsts to sets of seconds.
firstIndexEntryFactory - Produces sets for the first-to-second index.

IndexedInjectiveRelation

public IndexedInjectiveRelation(Thunk<java.util.Map<T2,T1>> secondIndexFactory)
Create an index based on the given factory. No first-to-second index is created.

Parameters:
secondIndexFactory - Maps seconds to firsts.
Method Detail

isStatic

public boolean isStatic()
Description copied from interface: SizedIterable
true if this iterable is unchanging. This implies that hasFixedSize() is true, and that iterator() will always return the same (either == or equal() and immutable) elements in the same order. ("Immutable" here means that equals() invocations are consistent over time -- if two objects are equal, they will never become inequal, and vice versa.)

Specified by:
isStatic in interface SizedIterable<Pair<T1,T2>>
Specified by:
isStatic in class AbstractInjectiveRelation<T1,T2>

injectionMap

public LambdaMap<T2,T1> injectionMap()
Description copied from interface: InjectiveRelation
A map view of the relation, mapping seconds to firsts. Need not allow mutation, but must reflect subsequent changes.

Specified by:
injectionMap in interface InjectiveRelation<T1,T2>
Specified by:
injectionMap in class AbstractInjectiveRelation<T1,T2>

firstSet

public PredicateSet<T1> firstSet()
Description copied from interface: Relation
The set of firsts. Need not allow mutation, but must reflect subsequent changes.

Specified by:
firstSet in interface Relation<T1,T2>
Specified by:
firstSet in class AbstractInjectiveRelation<T1,T2>

matchFirst

public PredicateSet<T2> matchFirst(T1 first)
Description copied from interface: Relation
The set of seconds corresponding to a specific first. Need not allow mutation, but must reflect subsequent changes.

Specified by:
matchFirst in interface Relation<T1,T2>
Specified by:
matchFirst in class AbstractInjectiveRelation<T1,T2>

add

public boolean add(T1 first,
                   T2 second)
Description copied from interface: Relation
Add Pair.make(first, second) to the set.

Specified by:
add in interface InjectiveRelation<T1,T2>
Specified by:
add in interface Relation<T1,T2>
Overrides:
add in class AbstractRelation<T1,T2>

remove

public boolean remove(T1 first,
                      T2 second)
Description copied from interface: Relation
Remove Pair.make(first, second) from the set.

Specified by:
remove in interface Relation<T1,T2>
Overrides:
remove in class AbstractRelation<T1,T2>

clear

public void clear()
Specified by:
clear in interface java.util.Collection<Pair<T1,T2>>
Specified by:
clear in interface java.util.Set<Pair<T1,T2>>
Overrides:
clear in class java.util.AbstractCollection<Pair<T1,T2>>

makeHashBased

public static <T1,T2> IndexedInjectiveRelation<T1,T2> makeHashBased()
Make an IndexedInjectiveRelation indexed by HashMaps and HashSets.


makeLinkedHashBased

public static <T1,T2> IndexedInjectiveRelation<T1,T2> makeLinkedHashBased()
Make an IndexedInjectiveRelation indexed by LinkedHashMaps and LinkedHashSets.


makeTreeBased

public static <T1 extends java.lang.Comparable<? super T1>,T2 extends java.lang.Comparable<? super T2>> IndexedInjectiveRelation<T1,T2> makeTreeBased()
Make an IndexedInjectiveRelation indexed by TreeMaps and TreeSets.