package org.seqcode.gsebricks.verbs;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
/* Holds a set of expanders and calls each of them when execute() is called. The result
contains the results of all the sub-expanders in an arbitrary order. Duplicates
are removed from the results
*/
public class SetOfExpanders<A,B> implements Expander<A,B> {
private Set<Expander<A,B>> expanders;
public SetOfExpanders(Set<Expander<A,B>> initial) {
expanders = new HashSet<Expander<A,B>>();
expanders.addAll(initial);
}
public SetOfExpanders() {
expanders = new HashSet<Expander<A,B>>();
}
public SetOfExpanders(Expander<A,B> initial) {
expanders = new HashSet<Expander<A,B>>();
expanders.add(initial);
}
public Iterator<B> execute(A a) {
HashSet<B> results = new HashSet<B>();
for (Expander<A,B> e : expanders) {
Iterator<B> iter = e.execute(a);
while (iter.hasNext()) {
results.add(iter.next());
}
}
return results.iterator();
}
}