diff --git a/RombaSharp/RombaSharp.Helpers.cs b/RombaSharp/RombaSharp.Helpers.cs index 9c7e8f89..b806e419 100644 --- a/RombaSharp/RombaSharp.Helpers.cs +++ b/RombaSharp/RombaSharp.Helpers.cs @@ -629,7 +629,7 @@ namespace RombaSharp // Once we have both, check for any new files List dupehashes = new List(); - List keys = depot.Keys.ToList(); + List keys = depot.Keys; foreach (string key in keys) { List roms = depot[key]; diff --git a/SabreTools.Library/DatFiles/AttractMode.cs b/SabreTools.Library/DatFiles/AttractMode.cs index 2e26f219..6b32976f 100644 --- a/SabreTools.Library/DatFiles/AttractMode.cs +++ b/SabreTools.Library/DatFiles/AttractMode.cs @@ -141,7 +141,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/ClrMamePro.cs b/SabreTools.Library/DatFiles/ClrMamePro.cs index dc81cf66..c641c858 100644 --- a/SabreTools.Library/DatFiles/ClrMamePro.cs +++ b/SabreTools.Library/DatFiles/ClrMamePro.cs @@ -654,7 +654,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index a0a823e2..1aa30ab2 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -1312,7 +1312,7 @@ namespace SabreTools.Library.DatFiles /// Get the keys from the file dictionary /// /// IEnumerable of the keys - public IEnumerable Keys + public List Keys { get { @@ -1324,7 +1324,7 @@ namespace SabreTools.Library.DatFiles lock (_items) { - return _items.Keys; + return _items.Keys.ToList(); } } } @@ -1433,7 +1433,7 @@ namespace SabreTools.Library.DatFiles _sortedBy = bucketBy; // First do the initial sort of all of the roms inplace - List oldkeys = Keys.ToList(); + List oldkeys = Keys; Parallel.ForEach(oldkeys, Globals.ParallelOptions, key => { // Get the unsorted current list @@ -1455,7 +1455,7 @@ namespace SabreTools.Library.DatFiles } // Now go through and sort all of the individual lists - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { // Get the possibly unsorted list @@ -1707,7 +1707,7 @@ namespace SabreTools.Library.DatFiles Parallel.For(0, inputs.Count, Globals.ParallelOptions, i => { // Get the list of keys from the DAT - List keys = datHeaders[i].Keys.ToList(); + List keys = datHeaders[i].Keys; foreach (string key in keys) { // Add everything from the key to the internal DAT @@ -1788,20 +1788,22 @@ namespace SabreTools.Library.DatFiles intDat.BucketBy(SortedBy.CRC, DedupeType.Full); // Then we do a hashwise comparison against the base DAT - List keys = intDat.Keys.ToList(); + List keys = intDat.Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List datItems = intDat[key]; List newDatItems = new List(); foreach (DatItem datItem in datItems) { - List dupes = datItem.GetDuplicates(this); + List dupes = datItem.GetDuplicates(this, sorted: true); + DatItem newDatItem = (DatItem)datItem.Clone(); + if (dupes.Count > 0) { - datItem.Name = dupes[0].Name; + newDatItem.Name = dupes[0].Name; } - newDatItems.Add(datItem); + newDatItems.Add(newDatItem); } // Now add the new list to the key @@ -1895,7 +1897,7 @@ namespace SabreTools.Library.DatFiles intDat.BucketBy(SortedBy.CRC, DedupeType.Full); // Then we do a hashwise comparison against the base DAT - List keys = intDat.Keys.ToList(); + List keys = intDat.Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List datItems = intDat[key]; @@ -1997,7 +1999,7 @@ namespace SabreTools.Library.DatFiles // Now, loop through the dictionary and populate the correct DATs watch.Start("Populating all output DATs"); - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { @@ -2128,7 +2130,7 @@ namespace SabreTools.Library.DatFiles // Now, loop through the dictionary and populate the correct DATs watch.Start("Populating all output DATs"); - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = DatItem.Merge(this[key]); @@ -2226,7 +2228,7 @@ namespace SabreTools.Library.DatFiles // If we're in SuperDAT mode, prefix all games with their respective DATs if (Type == "SuperDAT") { - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key].ToList(); @@ -2352,7 +2354,7 @@ namespace SabreTools.Library.DatFiles SortedDictionary> sorted = new SortedDictionary>(); // Now perform a deep clone on the entire dictionary - List keys = Keys.ToList(); + List keys = Keys; foreach (string key in keys) { // Clone each list of DATs in the dictionary @@ -2414,7 +2416,7 @@ namespace SabreTools.Library.DatFiles try { // Loop over every key in the dictionary - List keys = Keys.ToList(); + List keys = Keys; foreach (string key in keys) { // For every item in the current key @@ -2471,7 +2473,7 @@ namespace SabreTools.Library.DatFiles { // First we want to get a mapping for all games to description ConcurrentDictionary mapping = new ConcurrentDictionary(); - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; @@ -2486,7 +2488,7 @@ namespace SabreTools.Library.DatFiles }); // Now we loop through every item and update accordingly - keys = Keys.ToList(); + keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; @@ -2541,7 +2543,7 @@ namespace SabreTools.Library.DatFiles Globals.Logger.User("Stripping requested hashes"); // Now process all of the roms - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; @@ -2619,7 +2621,7 @@ namespace SabreTools.Library.DatFiles string pattern = @"([0-9]{2}\.[0-9]{2}\.[0-9]{2}-)(.*?-.*?)"; // Now process all of the roms - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; @@ -2766,7 +2768,7 @@ namespace SabreTools.Library.DatFiles /// private void AddRomsFromBios() { - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { // If the game has no items in it, we want to continue @@ -2814,7 +2816,7 @@ namespace SabreTools.Library.DatFiles /// private void AddRomsFromDevices() { - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { // If the game has no devices, we continue @@ -2854,7 +2856,7 @@ namespace SabreTools.Library.DatFiles /// private void AddRomsFromParent() { - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { // If the game has no items in it, we want to continue @@ -2910,7 +2912,7 @@ namespace SabreTools.Library.DatFiles /// private void AddRomsFromChildren() { - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { // Determine if the game has a parent or not @@ -2962,7 +2964,7 @@ namespace SabreTools.Library.DatFiles /// private void RemoveBiosAndDeviceSets() { - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { if (this[game].Count > 0 @@ -2980,7 +2982,7 @@ namespace SabreTools.Library.DatFiles private void RemoveBiosRomsFromChild() { // Loop through the romof tags - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { // If the game has no items in it, we want to continue @@ -3023,7 +3025,7 @@ namespace SabreTools.Library.DatFiles /// private void RemoveRomsFromChild() { - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { // If the game has no items in it, we want to continue @@ -3074,7 +3076,7 @@ namespace SabreTools.Library.DatFiles /// private void RemoveTagsFromChild() { - List games = Keys.ToList(); + List games = Keys; foreach (string game in games) { List items = this[game]; @@ -3963,7 +3965,7 @@ namespace SabreTools.Library.DatFiles BucketBy(SortedBy.SHA1, DedupeType.None); // Then we want to loop through each of the hashes and see if we can rebuild - List hashes = Keys.ToList(); + List hashes = Keys; foreach (string hash in hashes) { // Pre-empt any issues that could arise from string length @@ -4697,7 +4699,7 @@ namespace SabreTools.Library.DatFiles BucketBy(SortedBy.SHA1, DedupeType.None); // Then we want to loop through each of the hashes and see if we can rebuild - List hashes = Keys.ToList(); + List hashes = Keys; foreach (string hash in hashes) { // Pre-empt any issues that could arise from string length @@ -4913,7 +4915,7 @@ namespace SabreTools.Library.DatFiles } // Now separate the roms accordingly - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; @@ -5135,7 +5137,7 @@ namespace SabreTools.Library.DatFiles }; // Now populate each of the DAT objects in turn - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; @@ -5243,7 +5245,7 @@ namespace SabreTools.Library.DatFiles }; // Sort the input keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(SplitByLevelSort); // Then, we loop over the games @@ -5412,7 +5414,7 @@ namespace SabreTools.Library.DatFiles }; // Now populate each of the DAT objects in turn - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; @@ -5637,7 +5639,7 @@ namespace SabreTools.Library.DatFiles } // Loop through and add - List keys = Keys.ToList(); + List keys = Keys; Parallel.ForEach(keys, Globals.ParallelOptions, key => { List items = this[key]; diff --git a/SabreTools.Library/DatFiles/DosCenter.cs b/SabreTools.Library/DatFiles/DosCenter.cs index bf3cf55e..eedc50b2 100644 --- a/SabreTools.Library/DatFiles/DosCenter.cs +++ b/SabreTools.Library/DatFiles/DosCenter.cs @@ -90,7 +90,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/Hashfile.cs b/SabreTools.Library/DatFiles/Hashfile.cs index 9084521e..664ef9a3 100644 --- a/SabreTools.Library/DatFiles/Hashfile.cs +++ b/SabreTools.Library/DatFiles/Hashfile.cs @@ -134,7 +134,7 @@ namespace SabreTools.Library.DatFiles StreamWriter sw = new StreamWriter(fs, new UTF8Encoding(true)); // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/Listroms.cs b/SabreTools.Library/DatFiles/Listroms.cs index dc58fd17..5aeb18be 100644 --- a/SabreTools.Library/DatFiles/Listroms.cs +++ b/SabreTools.Library/DatFiles/Listroms.cs @@ -267,7 +267,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs index eab3d107..e594726b 100644 --- a/SabreTools.Library/DatFiles/Logiqx.cs +++ b/SabreTools.Library/DatFiles/Logiqx.cs @@ -1199,7 +1199,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/Missfile.cs b/SabreTools.Library/DatFiles/Missfile.cs index 74d3d4ba..720f2413 100644 --- a/SabreTools.Library/DatFiles/Missfile.cs +++ b/SabreTools.Library/DatFiles/Missfile.cs @@ -88,7 +88,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index a8212408..92cfdbc1 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -92,7 +92,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/RomCenter.cs b/SabreTools.Library/DatFiles/RomCenter.cs index 7e99e9d5..0d150aa4 100644 --- a/SabreTools.Library/DatFiles/RomCenter.cs +++ b/SabreTools.Library/DatFiles/RomCenter.cs @@ -227,7 +227,7 @@ namespace SabreTools.Library.DatFiles List splitpath = new List(); // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index c1dd3c58..1266b2f2 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -94,7 +94,7 @@ namespace SabreTools.Library.DatFiles List splitpath = new List(); // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 4d9bd367..8d1c4c8d 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -392,7 +392,7 @@ namespace SabreTools.Library.DatFiles WriteHeader(sw, delim); // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index aedc4949..b26eac74 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -94,7 +94,7 @@ namespace SabreTools.Library.DatFiles string lastgame = null; // Get a properly sorted set of keys - List keys = Keys.ToList(); + List keys = Keys; keys.Sort(new NaturalComparer()); foreach (string key in keys) diff --git a/SabreTools.Library/Items/DatItem.cs b/SabreTools.Library/Items/DatItem.cs index 85bfa206..1ed424ba 100644 --- a/SabreTools.Library/Items/DatItem.cs +++ b/SabreTools.Library/Items/DatItem.cs @@ -583,8 +583,9 @@ namespace SabreTools.Library.Items /// /// Dat to match against /// True to remove matched roms from the input, false otherwise (default) + /// True if the DAT is already sorted accordingly, false otherwise (default) /// List of matched DatItem objects - public List GetDuplicates(DatFile datdata, bool remove = false) + public List GetDuplicates(DatFile datdata, bool remove = false, bool sorted = false) { List output = new List(); @@ -595,7 +596,7 @@ namespace SabreTools.Library.Items } // We want to get the proper key for the DatItem - string key = SortAndGetKey(datdata); + string key = SortAndGetKey(datdata, sorted); // If the key doesn't exist, return the empty list if (!datdata.Contains(key))