wasSharp – Diff between revs 44 and 54
?pathlinks?
Rev 44 | Rev 54 | |||
---|---|---|---|---|
Line 18... | Line 18... | |||
18 | /////////////////////////////////////////////////////////////////////////// |
18 | /////////////////////////////////////////////////////////////////////////// |
|
19 | /// <summary> |
19 | /// <summary> |
|
20 | /// An implementation of an observable HashSet. |
20 | /// An implementation of an observable HashSet. |
|
21 | /// </summary> |
21 | /// </summary> |
|
22 | /// <typeparam name="T">the object type</typeparam> |
22 | /// <typeparam name="T">the object type</typeparam> |
|
23 | public class ObservableHashSet<T> : ICollection<T>, INotifyCollectionChanged, IEnumerable<T> |
23 | public class ObservableConcurrentHashSet<T> : ICollection<T>, INotifyCollectionChanged, IEnumerable<T> |
|
24 | { |
24 | { |
|
25 | private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
25 | private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
|
26 | private readonly HashSet<T> store = new HashSet<T>(); |
26 | private readonly HashSet<T> store = new HashSet<T>(); |
|
Line 27... | Line 27... | |||
27 | |
27 | |
|
28 | public ObservableHashSet(HashSet<T> set) |
28 | public ObservableConcurrentHashSet(HashSet<T> set) |
|
29 | { |
29 | { |
|
30 | _lock.EnterWriteLock(); |
30 | _lock.EnterWriteLock(); |
|
31 | try |
31 | try |
|
32 | { |
32 | { |
|
Line 36... | Line 36... | |||
36 | { |
36 | { |
|
37 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |
37 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |
|
38 | } |
38 | } |
|
39 | } |
39 | } |
|
Line 40... | Line 40... | |||
40 | |
40 | |
|
41 | public ObservableHashSet() |
41 | public ObservableConcurrentHashSet() |
|
42 | { |
42 | { |
|
Line 43... | Line 43... | |||
43 | } |
43 | } |
|
44 | |
44 | |
|
45 | public ObservableHashSet(T item) |
45 | public ObservableConcurrentHashSet(T item) |
|
46 | { |
46 | { |
|
47 | _lock.EnterWriteLock(); |
47 | _lock.EnterWriteLock(); |
|
48 | try |
48 | try |
|
Line 53... | Line 53... | |||
53 | { |
53 | { |
|
54 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |
54 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |
|
55 | } |
55 | } |
|
56 | } |
56 | } |
|
Line 57... | Line 57... | |||
57 | |
57 | |
|
58 | public ObservableHashSet(ObservableHashSet<T> other) |
58 | public ObservableConcurrentHashSet(ObservableConcurrentHashSet<T> other) |
|
59 | { |
59 | { |
|
60 | _lock.EnterWriteLock(); |
60 | _lock.EnterWriteLock(); |
|
61 | try |
61 | try |
|
62 | { |
62 | { |
|
Line 66... | Line 66... | |||
66 | { |
66 | { |
|
67 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |
67 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |
|
68 | } |
68 | } |
|
69 | } |
69 | } |
|
Line 70... | Line 70... | |||
70 | |
70 | |
|
71 | public ObservableHashSet(IEnumerable<T> list) |
71 | public ObservableConcurrentHashSet(IEnumerable<T> list) |
|
72 | { |
72 | { |
|
73 | _lock.EnterWriteLock(); |
73 | _lock.EnterWriteLock(); |
|
74 | try |
74 | try |
|
75 | { |
75 | { |
|
Line 190... | Line 190... | |||
190 | if (removed) |
190 | if (removed) |
|
191 | OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item)); |
191 | OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item)); |
|
192 | return removed; |
192 | return removed; |
|
193 | } |
193 | } |
|
Line 194... | Line 194... | |||
194 | |
194 | |
|
195 | public int Count => store.Count; |
195 | public int Count => store.Count(); |
|
196 | |
196 | |
|
Line 197... | Line 197... | |||
197 | public bool IsReadOnly => false; |
197 | public bool IsReadOnly => false; |
|
Line 198... | Line 198... | |||
198 | |
198 | |