summaryrefslogtreecommitdiff
path: root/lib/FilteredVisitor.cs
blob: 2868656c9c5c417f0685177f64c6b0359de7b294 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace jive
{
  public class FilteredVisitor<T> : Visitor<T>
  {
    readonly Specification<T> condition;
    readonly Visitor<T> visitor;

    public FilteredVisitor(Specification<T> condition, Visitor<T> visitor)
    {
      this.condition = condition;
      this.visitor = visitor;
    }

    public void visit(T item_to_visit)
    {
      if (condition.is_satisfied_by(item_to_visit)) visitor.visit(item_to_visit);
    }
  }
}