From 02a991770192337d8be94991f2d17c7ef3d04dba Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 28 Apr 2016 15:00:55 -0700 Subject: [PATCH] Change code to better fit the logic behind the scenes Conversations with Obiwantje cleared up what each part needs to do, allowing me to remove unnecessary pieces and clean up the logic behind each output. --- OfflineMerge/OfflineMerge.cs | 90 +++++++++++++++++++++++------------- 1 file changed, 59 insertions(+), 31 deletions(-) diff --git a/OfflineMerge/OfflineMerge.cs b/OfflineMerge/OfflineMerge.cs index 0b55d9c9..a9a0fff7 100644 --- a/OfflineMerge/OfflineMerge.cs +++ b/OfflineMerge/OfflineMerge.cs @@ -28,38 +28,24 @@ namespace SabreTools { // Instance variables private string _currentAllMerged; - private string _currentAllMissing; - private List _toAdd; - private string _currentWithReplaced; + private string _currentMissingMerged; + private string _currentNewMerged; private bool _fake; private Logger _logger; /// /// Instantiate an OfflineMerge object /// - /// Old-current DAT with merged values - /// Old-current missing DAT with merged values - /// List of new files to merge in - /// New-current DAT with merged values + /// Old-current DAT with merged and deduped values + /// Old-current missing DAT with merged and deduped values + /// New-current DAT with merged and deduped values /// True if all values should be replaced with default 0-byte values, false otherwise /// Logger object for console and file output - public OfflineMerge (string currentAllMerged, string currentAllMissing, string toAdd, string currentWithReplaced, bool fake, Logger logger) + public OfflineMerge (string currentAllMerged, string currentMissingMerged, string currentNewMerged, bool fake, Logger logger) { _currentAllMerged = currentAllMerged.Replace("\"", ""); - _currentAllMissing = currentAllMissing.Replace("\"", ""); - _toAdd = new List(); - if (File.Exists(toAdd.Replace("\"", ""))) - { - _toAdd.Add(toAdd.Replace("\"", "")); - } - else if (Directory.Exists(toAdd.Replace("\"", ""))) - { - foreach (string file in Directory.EnumerateFiles(toAdd, "*", SearchOption.AllDirectories)) - { - _toAdd.Add(file); - } - } - _currentWithReplaced = currentWithReplaced; + _currentMissingMerged = currentMissingMerged.Replace("\"", ""); + _currentNewMerged = currentNewMerged; _fake = fake; _logger = logger; } @@ -71,9 +57,9 @@ namespace SabreTools /// /// Process the supplied inputs and create the three required outputs: - /// (a) Net New - (currentWithReplaced)-(currentAllMerged) - /// (b) New Missing - (a)+(currentAllMissing) - /// (c) Unneeded - (currentAllMerged)-(currentWithReplaced) + /// (a) Net New - (currentNewMerged)-(currentAllMerged) + /// (b) Unneeded - (currentAllMerged)-(currentNewMerged) + /// (c) New Missing - (a)+(currentMissingMerged-(b)) /// /// True if the files were created properly, false otherwise public bool Process() @@ -81,7 +67,7 @@ namespace SabreTools // First get the combination Dictionary of currentWithReplaced and currentAllMerged Dictionary> completeDats = new Dictionary>(); completeDats = RomManipulation.ParseDict(_currentAllMerged, 0, 0, completeDats, _logger); - completeDats = RomManipulation.ParseDict(_currentWithReplaced, 0, 0, completeDats, _logger); + completeDats = RomManipulation.ParseDict(_currentNewMerged, 0, 0, completeDats, _logger); // Now get Net New output dictionary Dictionary> netNew = new Dictionary>(); @@ -89,7 +75,7 @@ namespace SabreTools { if (completeDats[key].Count == 1) { - if (completeDats[key][0].System == _currentWithReplaced) + if (completeDats[key][0].System == _currentNewMerged) { if (netNew.ContainsKey(key)) { @@ -106,10 +92,6 @@ namespace SabreTools } } - // Now create the New Missing dictionary - Dictionary> newMissing = new Dictionary>(netNew); - newMissing = RomManipulation.ParseDict(_currentAllMissing, 0, 0, newMissing, _logger); - // Now create the Unneeded dictionary Dictionary> unneeded = new Dictionary>(); foreach (string key in completeDats.Keys) @@ -133,6 +115,52 @@ namespace SabreTools } } + // Now create the New Missing dictionary + Dictionary> midMissing = new Dictionary>(); + midMissing = RomManipulation.ParseDict(_currentMissingMerged, 0, 0, midMissing, _logger); + foreach (string key in unneeded.Keys) + { + if (midMissing.ContainsKey(key)) + { + midMissing[key].AddRange(unneeded[key]); + } + else + { + midMissing.Add(key, unneeded[key]); + } + } + Dictionary> newMissing = new Dictionary>(); + foreach (string key in midMissing.Keys) + { + if (midMissing[key].Count == 1) + { + if (midMissing[key][0].System == _currentMissingMerged) + { + if (newMissing.ContainsKey(key)) + { + newMissing[key].Add(midMissing[key][0]); + } + else + { + List temp = new List(); + temp.Add(midMissing[key][0]); + newMissing.Add(key, temp); + } + } + } + } + foreach (string key in netNew.Keys) + { + if (midMissing.ContainsKey(key)) + { + midMissing[key].AddRange(netNew[key]); + } + else + { + midMissing.Add(key, netNew[key]); + } + } + return true; } }