diff --git a/CHANGELOG.md b/CHANGELOG.md index dea3f57..613590d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed - Rewrote JsonItemWrapper serialization for JsonConvert friendliness +## [11.1.0] - 2020-05-19 +### Added + - ScrollQueue - Added OnItemTrimmed event + - Added DateTimeNullableEventArgs + ## [11.0.0] - 2020-03-20 ### Added - Added Not null tag for ICDUriBuilder Constructor that takes a URI as an argument. diff --git a/ICD.Common.Utils.Tests/Collections/ScrollQueueTest.cs b/ICD.Common.Utils.Tests/Collections/ScrollQueueTest.cs index 2ede379..4613e1a 100644 --- a/ICD.Common.Utils.Tests/Collections/ScrollQueueTest.cs +++ b/ICD.Common.Utils.Tests/Collections/ScrollQueueTest.cs @@ -2,6 +2,7 @@ using ICD.Common.Properties; using NUnit.Framework; using ICD.Common.Utils.Collections; +using ICD.Common.Utils.EventArguments; namespace ICD.Common.Utils.Tests.Collections { @@ -76,5 +77,43 @@ namespace ICD.Common.Utils.Tests.Collections Assert.AreEqual(0, test.Peek()); } + + [Test, UsedImplicitly] + public void OnItemTrimmedTest() + { + ScrollQueue test = new ScrollQueue(3); + + int? removedItem = null; + + test.OnItemTrimmed += (sender, args) => removedItem = args.Data; + + test.Enqueue(1); + test.Enqueue(2); + test.Enqueue(3); + + Assert.IsNull(removedItem, "Raised Early"); + + test.Enqueue(4); + + Assert.True(removedItem.HasValue, "Not Raised"); + if (removedItem.HasValue) + Assert.AreEqual(1, removedItem.Value, "Incorrect Value"); + + removedItem = null; + + test.Enqueue(5); + + Assert.True(removedItem.HasValue, "Not Raised"); + if (removedItem.HasValue) + Assert.AreEqual(2, removedItem.Value, "Incorrect Value"); + + removedItem = null; + + test.MaxSize = 4; + + test.Enqueue(6); + + Assert.False(removedItem.HasValue, "Raised Early"); + } } } \ No newline at end of file diff --git a/ICD.Common.Utils/Collections/ScrollQueue.cs b/ICD.Common.Utils/Collections/ScrollQueue.cs index 087eda4..eb636c5 100644 --- a/ICD.Common.Utils/Collections/ScrollQueue.cs +++ b/ICD.Common.Utils/Collections/ScrollQueue.cs @@ -2,6 +2,8 @@ using System.Collections; using System.Collections.Generic; using ICD.Common.Properties; +using ICD.Common.Utils.EventArguments; +using ICD.Common.Utils.Extensions; namespace ICD.Common.Utils.Collections { @@ -15,6 +17,11 @@ namespace ICD.Common.Utils.Collections private readonly LinkedList m_Collection; private int m_MaxSize; + /// + /// Raised when an item is trimmed from the end of the queue. + /// + public event EventHandler> OnItemTrimmed; + #region Properties /// @@ -141,7 +148,11 @@ namespace ICD.Common.Utils.Collections private void Trim() { while (Count > MaxSize) + { + TContents removed = m_Collection.First.Value; m_Collection.RemoveFirst(); + OnItemTrimmed.Raise(this, new GenericEventArgs(removed)); + } } #endregion diff --git a/ICD.Common.Utils/EventArguments/DateTimeNullableEventArgs.cs b/ICD.Common.Utils/EventArguments/DateTimeNullableEventArgs.cs new file mode 100644 index 0000000..a2519ac --- /dev/null +++ b/ICD.Common.Utils/EventArguments/DateTimeNullableEventArgs.cs @@ -0,0 +1,15 @@ +using System; + +namespace ICD.Common.Utils.EventArguments +{ + public sealed class DateTimeNullableEventArgs : GenericEventArgs + { + /// + /// Constructor. + /// + /// + public DateTimeNullableEventArgs(DateTime? data) : base(data) + { + } + } +} diff --git a/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj b/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj index baad99f..7e27079 100644 --- a/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj +++ b/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj @@ -98,6 +98,7 @@ + diff --git a/ICD.Common.Utils/Properties/AssemblyInfo.cs b/ICD.Common.Utils/Properties/AssemblyInfo.cs index 92044d3..49b916b 100644 --- a/ICD.Common.Utils/Properties/AssemblyInfo.cs +++ b/ICD.Common.Utils/Properties/AssemblyInfo.cs @@ -4,4 +4,4 @@ using System.Reflection; [assembly: AssemblyCompany("ICD Systems")] [assembly: AssemblyProduct("ICD.Common.Utils")] [assembly: AssemblyCopyright("Copyright © ICD Systems 2020")] -[assembly: AssemblyVersion("11.0.0.0")] +[assembly: AssemblyVersion("11.1.0.0")]