Essa semana mostro uma classe para criar uma FIFO de objetos.

Esse código pode ser usado para qualquer aplicação que você precise de uma FIFO.

[sections] [section title=”C#”]

internal class ClsQueue<T> : ICollection<T>
{
private readonly List<T> _queue = new List<T>();
private readonly int _maximumSize;

public ClsQueue(int maximumSize)
{
if (maximumSize < 0)
throw new ArgumentOutOfRangeException("maximumSize");
_maximumSize = maximumSize;
}

public ClsQueue(IOrderedEnumerable<T> tst)
{
_queue = tst.ToList();
}

public T Dequeue()
{
if (_queue.Count > 0)
{
T value = _queue[0];
_queue.RemoveAt(0);
return value;
}
return default(T);
}

public T Peek()
{
if (_queue.Count > 0)
{
return _queue[0];
}
return default(T);
}

public void Enqueue(T item)
{
if (_queue.Contains(item))
{
_queue.Remove(item);
}
_queue.Add(item);
while (_queue.Count > _maximumSize)
{
Dequeue();
}
}

public int Count
{
get { return _queue.Count; }
}

public bool IsReadOnly
{
get { return false; }
}

public void Add(T item)
{
Enqueue(item);
}

public void Clear()
{
_queue.Clear();
}

public bool Contains(T item)
{
return _queue.Contains(item);
}

public void CopyTo(T[] array, int arrayIndex)
{
foreach (T value in _queue)
{
if (arrayIndex >= array.Length) break;
if (arrayIndex >= 0)
{
array[arrayIndex] = value;
}
arrayIndex++;
}
}

public void CopyFrom(T[] array, int SourceIndex, int DestinationIndex)
{
foreach (T value in array)
{
if (SourceIndex >= array.Length) break;
if (SourceIndex >= 0)
{
_queue[SourceIndex] = array[DestinationIndex++] ;
}
SourceIndex++;
}
}

public bool Remove(T item)
{
if (Equals(item, Peek()))
{
Dequeue();
return true;
}
return false;
}

public IEnumerator<T> GetEnumerator()
{
return _queue.GetEnumerator();
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _queue.GetEnumerator();
}

}

[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[C#] Classe para criação de uma FIFO de Objetos
Tags:                         

Deixe uma resposta

%d blogueiros gostam disto: