main
 1namespace jive
 2{
 3  public class FilteredVisitor<T> : Visitor<T>
 4  {
 5    readonly Specification<T> condition;
 6    readonly Visitor<T> visitor;
 7
 8    public FilteredVisitor(Specification<T> condition, Visitor<T> visitor)
 9    {
10      this.condition = condition;
11      this.visitor = visitor;
12    }
13
14    public void visit(T item_to_visit)
15    {
16      if (condition.is_satisfied_by(item_to_visit)) visitor.visit(item_to_visit);
17    }
18  }
19}