public CompositeSet(Set a, Set b, Func<Set, Set, object, bool> compositor) { A = a; B = b; if (compositor == null) throw new ArgumentNullException("compositor"); this.compositor = compositor; }
public static Set Subtraction(Set a, Set b) { return new CompositeSet(a, b, (s1, s2, item) => s1.Contains(item) && !s2.Contains(item)); }
public static Set Union(Set a, Set b) { return new CompositeSet(a, b, (s1, s2, item) => s1.Contains(item) || s2.Contains(item)); }
public static Set Intersection(Set a, Set b) { return new CompositeSet(a, b, (s1, s2, item) => s1.Contains(item) && s2.Contains(item)); }