main
1using System;
2using System.Collections.Generic;
3using System.Linq;
4
5namespace jive
6{
7 static public class ListExtensions
8 {
9 static public IListConstraint<T> add<T>(this ICollection<T> items, T item)
10 {
11 return new ListConstraint<T>(items, item);
12 }
13
14 static public IListConstraint<T> add_range<T>(this ICollection<T> items, IEnumerable<T> item)
15 {
16 return new ListConstraint<T>(items, item.ToArray());
17 }
18 }
19
20 public class ListConstraint<T> : IListConstraint<T>
21 {
22 readonly ICollection<T> items;
23 readonly T[] items_to_add;
24
25 public ListConstraint(ICollection<T> list_to_constrain, params T[] items_to_add)
26 {
27 items = list_to_constrain;
28 this.items_to_add = items_to_add;
29 items_to_add.each(list_to_constrain.Add);
30 }
31
32 public void unless(Func<T, bool> predicate)
33 {
34 items_to_add.where(predicate).each(x => items.Remove(x));
35 }
36 }
37
38 public interface IListConstraint<T>
39 {
40 void unless(Func<T, bool> predicate);
41 }
42}