Skip to content

Commit ddb3b2d

Browse files
Adding SortedListThreadSafe object
1 parent bdc4bdf commit ddb3b2d

1 file changed

Lines changed: 293 additions & 0 deletions

File tree

Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
using System.Collections.Generic;
2+
using System.Threading;
3+
4+
namespace ThunderDesign.Net_PCL.Threading.Collections
5+
{
6+
public class SortedListThreadSafe<TKey, TValue> : SortedList<TKey, TValue>
7+
{
8+
#region constructors
9+
public SortedListThreadSafe() : base() { }
10+
11+
public SortedListThreadSafe(IComparer<TKey> comparer) : base(comparer) { }
12+
13+
public SortedListThreadSafe(IDictionary<TKey, TValue> dictionary) : base(dictionary) { }
14+
15+
public SortedListThreadSafe(IDictionary<TKey, TValue> dictionary, IComparer<TKey> comparer) : base(dictionary, comparer) { }
16+
17+
public SortedListThreadSafe(int capacity) : base(capacity) { }
18+
19+
public SortedListThreadSafe(int capacity, IComparer<TKey> comparer) : base(comparer) { }
20+
#endregion
21+
22+
#region properties
23+
public new int Capacity
24+
{
25+
get
26+
{
27+
_ReaderWriterLockSlim.EnterReadLock();
28+
try
29+
{
30+
return base.Capacity;
31+
}
32+
finally
33+
{
34+
_ReaderWriterLockSlim.ExitReadLock();
35+
}
36+
}
37+
set
38+
{
39+
_ReaderWriterLockSlim.EnterWriteLock();
40+
try
41+
{
42+
base.Capacity = value;
43+
}
44+
finally
45+
{
46+
_ReaderWriterLockSlim.ExitWriteLock();
47+
}
48+
}
49+
}
50+
51+
public new IComparer<TKey> Comparer
52+
{
53+
get
54+
{
55+
_ReaderWriterLockSlim.EnterReadLock();
56+
try
57+
{
58+
return base.Comparer;
59+
}
60+
finally
61+
{
62+
_ReaderWriterLockSlim.ExitReadLock();
63+
}
64+
}
65+
}
66+
67+
public new int Count
68+
{
69+
get
70+
{
71+
_ReaderWriterLockSlim.EnterReadLock();
72+
try
73+
{
74+
return base.Count;
75+
}
76+
finally
77+
{
78+
_ReaderWriterLockSlim.ExitReadLock();
79+
}
80+
}
81+
}
82+
83+
public new TValue this[TKey key]
84+
{
85+
get
86+
{
87+
_ReaderWriterLockSlim.EnterReadLock();
88+
try
89+
{
90+
return base[key];
91+
}
92+
finally
93+
{
94+
_ReaderWriterLockSlim.ExitReadLock();
95+
}
96+
}
97+
set
98+
{
99+
_ReaderWriterLockSlim.EnterWriteLock();
100+
try
101+
{
102+
base[key] = value;
103+
}
104+
finally
105+
{
106+
_ReaderWriterLockSlim.ExitWriteLock();
107+
}
108+
}
109+
}
110+
111+
public new IList<TKey> Keys
112+
{
113+
get
114+
{
115+
_ReaderWriterLockSlim.EnterReadLock();
116+
try
117+
{
118+
return base.Keys;
119+
}
120+
finally
121+
{
122+
_ReaderWriterLockSlim.ExitReadLock();
123+
}
124+
}
125+
}
126+
127+
public new IList<TValue> Values
128+
{
129+
get
130+
{
131+
_ReaderWriterLockSlim.EnterReadLock();
132+
try
133+
{
134+
return base.Values;
135+
}
136+
finally
137+
{
138+
_ReaderWriterLockSlim.ExitReadLock();
139+
}
140+
}
141+
}
142+
#endregion
143+
144+
#region methods
145+
public new void Add(TKey key, TValue value)
146+
{
147+
_ReaderWriterLockSlim.EnterWriteLock();
148+
try
149+
{
150+
base.Add(key, value);
151+
}
152+
finally
153+
{
154+
_ReaderWriterLockSlim.ExitWriteLock();
155+
}
156+
}
157+
158+
public new void Clear()
159+
{
160+
_ReaderWriterLockSlim.EnterWriteLock();
161+
try
162+
{
163+
base.Clear();
164+
}
165+
finally
166+
{
167+
_ReaderWriterLockSlim.ExitWriteLock();
168+
}
169+
}
170+
171+
public new bool ContainsKey(TKey key)
172+
{
173+
_ReaderWriterLockSlim.EnterReadLock();
174+
try
175+
{
176+
return base.ContainsKey(key);
177+
}
178+
finally
179+
{
180+
_ReaderWriterLockSlim.ExitReadLock();
181+
}
182+
}
183+
184+
public new bool ContainsValue(TValue value)
185+
{
186+
_ReaderWriterLockSlim.EnterReadLock();
187+
try
188+
{
189+
return base.ContainsValue(value);
190+
}
191+
finally
192+
{
193+
_ReaderWriterLockSlim.ExitReadLock();
194+
}
195+
}
196+
197+
public new IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
198+
{
199+
_ReaderWriterLockSlim.EnterReadLock();
200+
try
201+
{
202+
return base.GetEnumerator();
203+
}
204+
finally
205+
{
206+
_ReaderWriterLockSlim.ExitReadLock();
207+
}
208+
}
209+
210+
public new int IndexOfKey(TKey key)
211+
{
212+
_ReaderWriterLockSlim.EnterReadLock();
213+
try
214+
{
215+
return base.IndexOfKey(key);
216+
}
217+
finally
218+
{
219+
_ReaderWriterLockSlim.ExitReadLock();
220+
}
221+
}
222+
223+
public new int IndexOfValue(TValue value)
224+
{
225+
_ReaderWriterLockSlim.EnterReadLock();
226+
try
227+
{
228+
return base.IndexOfValue(value);
229+
}
230+
finally
231+
{
232+
_ReaderWriterLockSlim.ExitReadLock();
233+
}
234+
}
235+
236+
public new bool Remove(TKey key)
237+
{
238+
_ReaderWriterLockSlim.EnterWriteLock();
239+
try
240+
{
241+
return base.Remove(key);
242+
}
243+
finally
244+
{
245+
_ReaderWriterLockSlim.ExitWriteLock();
246+
}
247+
}
248+
249+
public new void RemoveAt(int index)
250+
{
251+
_ReaderWriterLockSlim.EnterWriteLock();
252+
try
253+
{
254+
base.RemoveAt(index);
255+
}
256+
finally
257+
{
258+
_ReaderWriterLockSlim.ExitWriteLock();
259+
}
260+
}
261+
262+
public new void TrimExcess()
263+
{
264+
_ReaderWriterLockSlim.EnterWriteLock();
265+
try
266+
{
267+
base.TrimExcess();
268+
}
269+
finally
270+
{
271+
_ReaderWriterLockSlim.ExitWriteLock();
272+
}
273+
}
274+
275+
public new bool TryGetValue(TKey key, out TValue value)
276+
{
277+
_ReaderWriterLockSlim.EnterReadLock();
278+
try
279+
{
280+
return base.TryGetValue(key, out value);
281+
}
282+
finally
283+
{
284+
_ReaderWriterLockSlim.ExitReadLock();
285+
}
286+
}
287+
#endregion
288+
289+
#region variables
290+
protected static readonly ReaderWriterLockSlim _ReaderWriterLockSlim = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
291+
#endregion
292+
}
293+
}

0 commit comments

Comments
 (0)