diff --git a/ICD.Common.Utils/Collections/PriorityQueue.cs b/ICD.Common.Utils/Collections/PriorityQueue.cs index c0abdc0..2601c13 100644 --- a/ICD.Common.Utils/Collections/PriorityQueue.cs +++ b/ICD.Common.Utils/Collections/PriorityQueue.cs @@ -87,14 +87,31 @@ namespace ICD.Common.Utils.Collections [PublicAPI] public T Dequeue() { + T output; + if (TryDequeue(out output)) + return output; + + throw new InvalidOperationException("The queue is empty."); + } + + /// + /// Attempts to dequeue an item from the queue. + /// + /// + /// + [PublicAPI] + public bool TryDequeue(out T output) + { + output = default(T); + KeyValuePair> kvp; if (!m_PriorityToQueue.TryFirst(out kvp)) - throw new InvalidOperationException("The queue is empty."); + return false; int priority = kvp.Key; List queue = kvp.Value; - T output = queue[0]; + output = queue[0]; queue.RemoveAt(0); if (queue.Count == 0) @@ -102,7 +119,7 @@ namespace ICD.Common.Utils.Collections m_Count--; - return output; + return true; } ///