Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Queue.cs
Go to the documentation of this file.
3
4namespace System.Collections;
5
7[DebuggerTypeProxy(typeof(QueueDebugView))]
8[DebuggerDisplay("Count = {Count}")]
9[TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
11{
12 private sealed class SynchronizedQueue : Queue
13 {
14 private readonly Queue _q;
15
16 private readonly object _root;
17
18 public override bool IsSynchronized => true;
19
20 public override object SyncRoot => _root;
21
22 public override int Count
23 {
24 get
25 {
26 lock (_root)
27 {
28 return _q.Count;
29 }
30 }
31 }
32
34 {
35 _q = q;
37 }
38
39 public override void Clear()
40 {
41 lock (_root)
42 {
43 _q.Clear();
44 }
45 }
46
47 public override object Clone()
48 {
49 lock (_root)
50 {
51 return new SynchronizedQueue((Queue)_q.Clone());
52 }
53 }
54
55 public override bool Contains(object obj)
56 {
57 lock (_root)
58 {
59 return _q.Contains(obj);
60 }
61 }
62
63 public override void CopyTo(Array array, int arrayIndex)
64 {
65 lock (_root)
66 {
68 }
69 }
70
71 public override void Enqueue(object value)
72 {
73 lock (_root)
74 {
76 }
77 }
78
79 public override object Dequeue()
80 {
81 lock (_root)
82 {
83 return _q.Dequeue();
84 }
85 }
86
87 public override IEnumerator GetEnumerator()
88 {
89 lock (_root)
90 {
91 return _q.GetEnumerator();
92 }
93 }
94
95 public override object Peek()
96 {
97 lock (_root)
98 {
99 return _q.Peek();
100 }
101 }
102
103 public override object[] ToArray()
104 {
105 lock (_root)
106 {
107 return _q.ToArray();
108 }
109 }
110
111 public override void TrimToSize()
112 {
113 lock (_root)
114 {
115 _q.TrimToSize();
116 }
117 }
118 }
119
120 private sealed class QueueEnumerator : IEnumerator, ICloneable
121 {
122 private readonly Queue _q;
123
124 private int _index;
125
126 private readonly int _version;
127
128 private object _currentElement;
129
130 public object Current
131 {
132 get
133 {
135 {
136 if (_index == 0)
137 {
139 }
141 }
142 return _currentElement;
143 }
144 }
145
147 {
148 _q = q;
150 _index = 0;
152 if (_q._size == 0)
153 {
154 _index = -1;
155 }
156 }
157
158 public object Clone()
159 {
160 return MemberwiseClone();
161 }
162
163 public bool MoveNext()
164 {
165 if (_version != _q._version)
166 {
168 }
169 if (_index < 0)
170 {
172 return false;
173 }
175 _index++;
176 if (_index == _q._size)
177 {
178 _index = -1;
179 }
180 return true;
181 }
182
183 public void Reset()
184 {
185 if (_version != _q._version)
186 {
188 }
189 if (_q._size == 0)
190 {
191 _index = -1;
192 }
193 else
194 {
195 _index = 0;
196 }
198 }
199 }
200
201 internal sealed class QueueDebugView
202 {
203 private readonly Queue _queue;
204
205 [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
206 public object[] Items => _queue.ToArray();
207
208 public QueueDebugView(Queue queue)
209 {
210 if (queue == null)
211 {
212 throw new ArgumentNullException("queue");
213 }
214 _queue = queue;
215 }
216 }
217
218 private object[] _array;
219
220 private int _head;
221
222 private int _tail;
223
224 private int _size;
225
226 private readonly int _growFactor;
227
228 private int _version;
229
230 public virtual int Count => _size;
231
232 public virtual bool IsSynchronized => false;
233
234 public virtual object SyncRoot => this;
235
236 public Queue()
237 : this(32, 2f)
238 {
239 }
240
241 public Queue(int capacity)
242 : this(capacity, 2f)
243 {
244 }
245
246 public Queue(int capacity, float growFactor)
247 {
248 if (capacity < 0)
249 {
251 }
252 if (!((double)growFactor >= 1.0) || !((double)growFactor <= 10.0))
253 {
255 }
256 _array = new object[capacity];
257 _head = 0;
258 _tail = 0;
259 _size = 0;
260 _growFactor = (int)(growFactor * 100f);
261 }
262
263 public Queue(ICollection col)
264 : this(col?.Count ?? 32)
265 {
266 if (col == null)
267 {
268 throw new ArgumentNullException("col");
269 }
270 IEnumerator enumerator = col.GetEnumerator();
271 while (enumerator.MoveNext())
272 {
273 Enqueue(enumerator.Current);
274 }
275 }
276
277 public virtual object Clone()
278 {
279 Queue queue = new Queue(_size);
280 queue._size = _size;
281 int size = _size;
282 int num = ((_array.Length - _head < size) ? (_array.Length - _head) : size);
283 Array.Copy(_array, _head, queue._array, 0, num);
284 size -= num;
285 if (size > 0)
286 {
287 Array.Copy(_array, 0, queue._array, _array.Length - _head, size);
288 }
289 queue._version = _version;
290 return queue;
291 }
292
293 public virtual void Clear()
294 {
295 if (_size != 0)
296 {
297 if (_head < _tail)
298 {
300 }
301 else
302 {
303 Array.Clear(_array, _head, _array.Length - _head);
304 Array.Clear(_array, 0, _tail);
305 }
306 _size = 0;
307 }
308 _head = 0;
309 _tail = 0;
310 _version++;
311 }
312
313 public virtual void CopyTo(Array array, int index)
314 {
315 if (array == null)
316 {
317 throw new ArgumentNullException("array");
318 }
319 if (array.Rank != 1)
320 {
322 }
323 if (index < 0)
324 {
326 }
327 int length = array.Length;
328 if (length - index < _size)
329 {
331 }
332 int size = _size;
333 if (size != 0)
334 {
335 int num = ((_array.Length - _head < size) ? (_array.Length - _head) : size);
336 Array.Copy(_array, _head, array, index, num);
337 size -= num;
338 if (size > 0)
339 {
340 Array.Copy(_array, 0, array, index + _array.Length - _head, size);
341 }
342 }
343 }
344
345 public virtual void Enqueue(object? obj)
346 {
347 if (_size == _array.Length)
348 {
349 int num = (int)((long)_array.Length * (long)_growFactor / 100);
350 if (num < _array.Length + 4)
351 {
352 num = _array.Length + 4;
353 }
354 SetCapacity(num);
355 }
356 _array[_tail] = obj;
357 _tail = (_tail + 1) % _array.Length;
358 _size++;
359 _version++;
360 }
361
362 public virtual IEnumerator GetEnumerator()
363 {
364 return new QueueEnumerator(this);
365 }
366
367 public virtual object? Dequeue()
368 {
369 if (Count == 0)
370 {
372 }
373 object result = _array[_head];
374 _array[_head] = null;
375 _head = (_head + 1) % _array.Length;
376 _size--;
377 _version++;
378 return result;
379 }
380
381 public virtual object? Peek()
382 {
383 if (Count == 0)
384 {
386 }
387 return _array[_head];
388 }
389
390 public static Queue Synchronized(Queue queue)
391 {
392 if (queue == null)
393 {
394 throw new ArgumentNullException("queue");
395 }
396 return new SynchronizedQueue(queue);
397 }
398
399 public virtual bool Contains(object? obj)
400 {
401 int num = _head;
402 int size = _size;
403 while (size-- > 0)
404 {
405 if (obj == null)
406 {
407 if (_array[num] == null)
408 {
409 return true;
410 }
411 }
412 else if (_array[num] != null && _array[num].Equals(obj))
413 {
414 return true;
415 }
416 num = (num + 1) % _array.Length;
417 }
418 return false;
419 }
420
421 internal object GetElement(int i)
422 {
423 return _array[(_head + i) % _array.Length];
424 }
425
426 public virtual object?[] ToArray()
427 {
428 if (_size == 0)
429 {
430 return Array.Empty<object>();
431 }
432 object[] array = new object[_size];
433 if (_head < _tail)
434 {
436 }
437 else
438 {
439 Array.Copy(_array, _head, array, 0, _array.Length - _head);
440 Array.Copy(_array, 0, array, _array.Length - _head, _tail);
441 }
442 return array;
443 }
444
445 private void SetCapacity(int capacity)
446 {
447 object[] array = new object[capacity];
448 if (_size > 0)
449 {
450 if (_head < _tail)
451 {
453 }
454 else
455 {
456 Array.Copy(_array, _head, array, 0, _array.Length - _head);
457 Array.Copy(_array, 0, array, _array.Length - _head, _tail);
458 }
459 }
460 _array = array;
461 _head = 0;
462 _tail = ((_size != capacity) ? _size : 0);
463 _version++;
464 }
465
466 public virtual void TrimToSize()
467 {
469 }
470}
static unsafe void Clear(Array array)
Definition Array.cs:755
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
override bool Contains(object obj)
Definition Queue.cs:55
override IEnumerator GetEnumerator()
Definition Queue.cs:87
override void CopyTo(Array array, int arrayIndex)
Definition Queue.cs:63
override void Enqueue(object value)
Definition Queue.cs:71
virtual ? object Peek()
Definition Queue.cs:381
void SetCapacity(int capacity)
Definition Queue.cs:445
Queue(int capacity, float growFactor)
Definition Queue.cs:246
virtual object SyncRoot
Definition Queue.cs:234
virtual IEnumerator GetEnumerator()
Definition Queue.cs:362
virtual void Clear()
Definition Queue.cs:293
virtual void CopyTo(Array array, int index)
Definition Queue.cs:313
virtual object Clone()
Definition Queue.cs:277
virtual bool IsSynchronized
Definition Queue.cs:232
virtual ? object[] ToArray()
Definition Queue.cs:426
virtual void TrimToSize()
Definition Queue.cs:466
virtual int Count
Definition Queue.cs:230
Queue(ICollection col)
Definition Queue.cs:263
object GetElement(int i)
Definition Queue.cs:421
virtual void Enqueue(object? obj)
Definition Queue.cs:345
virtual bool Contains(object? obj)
Definition Queue.cs:399
static Queue Synchronized(Queue queue)
Definition Queue.cs:390
readonly int _growFactor
Definition Queue.cs:226
virtual ? object Dequeue()
Definition Queue.cs:367
Queue(int capacity)
Definition Queue.cs:241
static string ArgumentOutOfRange_Index
Definition SR.cs:30
static string InvalidOperation_EnumNotStarted
Definition SR.cs:46
static string InvalidOperation_EmptyQueue
Definition SR.cs:38
static string InvalidOperation_EnumEnded
Definition SR.cs:42
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string InvalidOperation_EnumFailedVersion
Definition SR.cs:44
static string Arg_RankMultiDimNotSupported
Definition SR.cs:18
static string Argument_InvalidOffLen
Definition SR.cs:22
static string ArgumentOutOfRange_QueueGrowFactor
Definition SR.cs:36
static string ArgumentOutOfRange_NeedNonNegNum
Definition SR.cs:32
Definition SR.cs:7