From d9a50d0c9ef9c4a0331ca86c110cfc7b4fc0db24 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 16 Apr 2026 22:16:03 -0400 Subject: [PATCH] Add removal helper method --- SabreTools.Metadata.DatFiles/ItemDatabase.cs | 60 +++++++------------- 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/SabreTools.Metadata.DatFiles/ItemDatabase.cs b/SabreTools.Metadata.DatFiles/ItemDatabase.cs index f1db5f95..c4c7c8b2 100644 --- a/SabreTools.Metadata.DatFiles/ItemDatabase.cs +++ b/SabreTools.Metadata.DatFiles/ItemDatabase.cs @@ -140,6 +140,26 @@ namespace SabreTools.Metadata.DatFiles #endif } + /// + /// Remove all values that match a function + /// + public void RemoveAll(Func func) + { +#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER + Parallel.For(0, Indexes.Length, i => +#else + for (int i = 0; i < Indexes.Length; i++) +#endif + { + if (func(_table[i])) + Remove(i); +#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER + }); +#else + } +#endif + } + /// /// Set an indexed value directly /// @@ -411,20 +431,7 @@ namespace SabreTools.Metadata.DatFiles /// /// Remove all items marked for removal /// - public void ClearMarked() - { - long[] itemIndexes = _items.Indexes; - foreach (long itemIndex in itemIndexes) - { - if (!_items.TryGet(itemIndex, out var datItem) || datItem is null) - continue; - - if (!datItem.RemoveFlag) - continue; - - RemoveItem(itemIndex); - } - } + public void ClearMarked() => _items.RemoveAll(d => d.RemoveFlag); /// /// Get a item based on the index @@ -550,30 +557,7 @@ namespace SabreTools.Metadata.DatFiles if (!_machines.TryRemove(machineIndex, out _)) return false; - // Get the current list of item indicies - long[] itemIndexes = _items.Indexes; - -#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER - Parallel.For(0, itemIndexes.Length, i => -#else - for (int i = 0; i < itemIndexes.Length; i++) -#endif - { - var datItem = GetItem(i); - if (datItem is null || datItem.MachineIndex != machineIndex) -#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER - return; -#else - continue; -#endif - - RemoveItem(i); -#if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER - }); -#else - } -#endif - + _items.RemoveAll(d => d.MachineIndex == machineIndex); return true; }