From da8947aaa06e720f621ca6b9bc3a90c9e63504ab Mon Sep 17 00:00:00 2001 From: Chris Cameron Date: Thu, 10 May 2018 13:55:57 -0400 Subject: [PATCH] feat: Adding TryDequeue method to PriorityQueue --- ICD.Common.Utils/Collections/PriorityQueue.cs | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) 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; } ///