// -----------------------------------------------------------------------
//
// TODO: Update copyright text.
//
// -----------------------------------------------------------------------
namespace OpenTraffic.Collections
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
///
/// TODO: Update summary.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix")]
public class TrafficQueue : IPriorityQueue where TK : IComparable
{
private LinkedList> llist;
public TrafficQueue()
{
llist = new LinkedList>();
}
public KeyValuePair Pop()
{
KeyValuePair kvp = llist.First.Value;
llist.RemoveFirst();
return kvp;
}
public void Clear()
{
llist.Clear();
}
public void Add(TK k, TT t)
{
LinkedListNode> ln = llist.Last;
while (ln != null && ln.Value.Key.CompareTo(k) <= 0)
{
ln = ln.Previous;
}
if (ln == null)
{
llist.AddFirst(new KeyValuePair(k, t));
}
else
{
ln.List.AddAfter(ln, new KeyValuePair(k, t));
}
}
public KeyValuePair Peek()
{
return llist.First.Value;
}
public int Count
{
get { return llist.Count; }
}
public bool ControlInnerState()
{
bool first = true;
KeyValuePair last = new KeyValuePair();
foreach (KeyValuePair kv in llist)
{
if (!first)
{
if (kv.Key.CompareTo(last.Key) > 0) return false;
}
first = false;
last = kv;
}
return true;
}
public override string ToString()
{
string str = "----------------" + System.Environment.NewLine;
foreach (KeyValuePair kv in llist)
{
str += kv.Key.ToString().Substring(0, 4) + ", ";
}
str += "----------------" + System.Environment.NewLine;
return str;
}
}
}