// ----------------------------------------------------------------------- // // 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; } } }