diff --git a/SabreTools.DatFiles.Test/DatFileTests.Filtering.cs b/SabreTools.DatFiles.Test/DatFileTests.Filtering.cs index bde2716b..e89310fe 100644 --- a/SabreTools.DatFiles.Test/DatFileTests.Filtering.cs +++ b/SabreTools.DatFiles.Test/DatFileTests.Filtering.cs @@ -8,6 +8,12 @@ namespace SabreTools.DatFiles.Test { public partial class DatFileTests { + #region ExecuteFilters + + // TODO: Add ExecuteFilters tests + + #endregion + #region MachineDescriptionToName [Fact] diff --git a/SabreTools.DatFiles/DatFile.Filtering.cs b/SabreTools.DatFiles/DatFile.Filtering.cs index 44f2908f..33f33e44 100644 --- a/SabreTools.DatFiles/DatFile.Filtering.cs +++ b/SabreTools.DatFiles/DatFile.Filtering.cs @@ -34,8 +34,8 @@ namespace SabreTools.DatFiles /// Preconfigured filter runner to use public void ExecuteFilters(FilterRunner filterRunner) { - Items.ExecuteFilters(filterRunner); - ItemsDB.ExecuteFilters(filterRunner); + ExecuteFiltersImpl(filterRunner); + ExecuteFiltersImplDB(filterRunner); } /// @@ -184,6 +184,99 @@ namespace SabreTools.DatFiles return mapping; } + /// + /// Execute all filters in a filter runner on the items in the dictionary + /// + /// Preconfigured filter runner to use + private void ExecuteFiltersImpl(FilterRunner filterRunner) + { + List keys = [.. Items.Keys]; +#if NET452_OR_GREATER || NETCOREAPP + Parallel.ForEach(keys, Core.Globals.ParallelOptions, key => +#elif NET40_OR_GREATER + Parallel.ForEach(keys, key => +#else + foreach (var key in keys) +#endif + { + ExecuteFilterOnBucket(filterRunner, key); +#if NET40_OR_GREATER || NETCOREAPP + }); +#else + } +#endif + } + + /// + /// Execute all filters in a filter runner on the items in the dictionary + /// + /// Preconfigured filter runner to use + private void ExecuteFiltersImplDB(FilterRunner filterRunner) + { + List keys = [.. ItemsDB.SortedKeys]; +#if NET452_OR_GREATER || NETCOREAPP + Parallel.ForEach(keys, Globals.ParallelOptions, key => +#elif NET40_OR_GREATER + Parallel.ForEach(keys, key => +#else + foreach (var key in keys) +#endif + { + ExecuteFilterOnBucketDB(filterRunner, key); +#if NET40_OR_GREATER || NETCOREAPP + }); +#else + } +#endif + } + + /// + /// Execute all filters in a filter runner on a single bucket + /// + /// Preconfigured filter runner to use + /// Name of the bucket to filter on + private void ExecuteFilterOnBucket(FilterRunner filterRunner, string bucketName) + { + List? items = GetItemsForBucket(bucketName); + if (items == null) + return; + + // Filter all items in the current key + List newItems = []; + foreach (var item in items) + { + if (item.PassesFilter(filterRunner)) + newItems.Add(item); + } + + // Set the value in the key to the new set + Remove(bucketName); + Add(bucketName, newItems); + } + + /// + /// Execute all filters in a filter runner on a single bucket + /// + /// Preconfigured filter runner to use + /// Name of the bucket to filter on + private void ExecuteFilterOnBucketDB(FilterRunner filterRunner, string bucketName) + { + var items = GetItemsForBucketDB(bucketName); + if (items == null) + return; + + // Filter all items in the current key + List newItems = []; + foreach (var item in items) + { + if (item.Value.PassesFilterDB(filterRunner)) + newItems.Add(item.Key); + } + + // Set the value in the key to the new set + ItemsDB._buckets[bucketName] = newItems; + } + /// /// Use game descriptions as names, updating cloneof/romof/sampleof /// diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index 568125c8..0503f9d7 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -8,7 +8,6 @@ using System.Threading.Tasks; #endif using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Core.Filter; using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -827,58 +826,6 @@ namespace SabreTools.DatFiles #endregion - // TODO: All internal, can this be put into a better location? - #region Filtering - - /// - /// Execute all filters in a filter runner on the items in the dictionary - /// - /// Preconfigured filter runner to use - internal void ExecuteFilters(FilterRunner filterRunner) - { - List keys = [.. Keys]; -#if NET452_OR_GREATER || NETCOREAPP - Parallel.ForEach(keys, Core.Globals.ParallelOptions, key => -#elif NET40_OR_GREATER - Parallel.ForEach(keys, key => -#else - foreach (var key in keys) -#endif - { - ExecuteFilterOnBucket(filterRunner, key); -#if NET40_OR_GREATER || NETCOREAPP - }); -#else - } -#endif - } - - /// - /// Execute all filters in a filter runner on a single bucket - /// - /// Preconfigured filter runner to use - /// Name of the bucket to filter on - private void ExecuteFilterOnBucket(FilterRunner filterRunner, string bucketName) - { - List? items = GetItemsForBucket(bucketName); - if (items == null) - return; - - // Filter all items in the current key - List newItems = []; - foreach (var item in items) - { - if (item.PassesFilter(filterRunner)) - newItems.Add(item); - } - - // Set the value in the key to the new set - Remove(bucketName); - Add(bucketName, newItems); - } - - #endregion - #region Statistics /// diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index 5e298119..f4658fa7 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -10,7 +10,6 @@ using System.Threading.Tasks; #endif using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Core.Filter; using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -1206,57 +1205,6 @@ namespace SabreTools.DatFiles #endregion - // TODO: All internal, can this be put into a better location? - #region Filtering - - /// - /// Execute all filters in a filter runner on the items in the dictionary - /// - /// Preconfigured filter runner to use - internal void ExecuteFilters(FilterRunner filterRunner) - { - List keys = [.. SortedKeys]; -#if NET452_OR_GREATER || NETCOREAPP - Parallel.ForEach(keys, Core.Globals.ParallelOptions, key => -#elif NET40_OR_GREATER - Parallel.ForEach(keys, key => -#else - foreach (var key in keys) -#endif - { - ExecuteFilterOnBucket(filterRunner, key); -#if NET40_OR_GREATER || NETCOREAPP - }); -#else - } -#endif - } - - /// - /// Execute all filters in a filter runner on a single bucket - /// - /// Preconfigured filter runner to use - /// Name of the bucket to filter on - private void ExecuteFilterOnBucket(FilterRunner filterRunner, string bucketName) - { - var items = GetItemsForBucket(bucketName); - if (items == null) - return; - - // Filter all items in the current key - List newItems = []; - foreach (var item in items) - { - if (item.Value.PassesFilterDB(filterRunner)) - newItems.Add(item.Key); - } - - // Set the value in the key to the new set - _buckets[bucketName] = newItems; - } - - #endregion - #region Statistics ///