1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Collections.Concurrent;
-
- namespace Aitex.Core.Util
- {
- public class FixSizeQueue<T>
- {
- public int FixedSize { get; private set; }
- public int Count {
- get
- {
- lock (_locker)
- {
- return _innerQueue.Count;
- }
- }
- }
- private Queue<T> _innerQueue;
- private object _locker = new object();
- public FixSizeQueue(int size)
- {
- FixedSize = size;
- _innerQueue = new Queue<T>();
- }
- public void Enqueue(T obj)
- {
- lock (_locker)
- {
- _innerQueue.Enqueue(obj);
- }
- }
- public bool TryDequeue(out T obj)
- {
- lock (_locker)
- {
- obj = default (T);
- if (_innerQueue.Count > 0)
- {
- obj = _innerQueue.Dequeue();
- return true;
- }
- return false;
- }
- }
- public List<T> ToList()
- {
- lock (_locker)
- {
- return _innerQueue.ToList();
- }
- }
- public void Clear()
- {
- lock (_locker)
- {
- _innerQueue.Clear();
- }
- }
- public T ElementAt(int index)
- {
- lock (_locker)
- {
- return _innerQueue.ElementAt(index);
- }
- }
- public bool IsEmpty()
- {
- lock (_locker)
- {
- return _innerQueue.Count==0;
- }
- }
- }
- }
|