diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs
index d330e5f7..d950bada 100644
--- a/SabreTools.DatTools/Splitter.cs
+++ b/SabreTools.DatTools/Splitter.cs
@@ -622,17 +622,47 @@ namespace SabreTools.DatTools
// Create each of the respective output DATs
InternalStopwatch watch = new($"Splitting DAT by size");
- DatFile lessThan = Parser.CreateDatFile((DatHeader)datFile.Header.Clone(), datFile.Modifiers);
+ // Initialize the outputs
+ SplitBySizeInit(datFile, radix, out DatFile lessThan, out DatFile greaterThan);
+
+ // Now populate each of the DAT objects in turn
+ SplitBySizeImpl(datFile, radix, lessThan, greaterThan);
+ SplitBySizeDBImpl(datFile, radix, lessThan, greaterThan);
+
+ // Then return both DatFiles
+ watch.Stop();
+ return (lessThan, greaterThan);
+ }
+
+ ///
+ /// Initialize splitting by size
+ ///
+ /// Current DatFile object to split
+ /// Size to use as the radix between the outputs
+ /// DatFile representing items less than
+ /// DatFile representing items greater than or equal to
+ private static void SplitBySizeInit(DatFile datFile, long radix, out DatFile lessThan, out DatFile greaterThan)
+ {
+ lessThan = Parser.CreateDatFile((DatHeader)datFile.Header.Clone(), datFile.Modifiers);
lessThan.Header.SetFieldValue(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})");
lessThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})");
lessThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})");
- DatFile greaterThan = Parser.CreateDatFile((DatHeader)datFile.Header.Clone(), datFile.Modifiers);
+ greaterThan = Parser.CreateDatFile((DatHeader)datFile.Header.Clone(), datFile.Modifiers);
greaterThan.Header.SetFieldValue(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})");
greaterThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})");
greaterThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})");
+ }
- // Now populate each of the DAT objects in turn
+ ///
+ /// Split a DAT by size of Rom
+ ///
+ /// Current DatFile object to split
+ /// Size to use as the radix between the outputs
+ /// DatFile representing items less than
+ /// DatFile representing items greater than or equal to
+ private static void SplitBySizeImpl(DatFile datFile, long radix, DatFile lessThan, DatFile greaterThan)
+ {
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
@@ -671,33 +701,17 @@ namespace SabreTools.DatTools
#else
}
#endif
-
- // Then return both DatFiles
- watch.Stop();
- return (lessThan, greaterThan);
}
///
/// Split a DAT by size of Rom
///
/// Current DatFile object to split
- /// Long value representing the split point
- /// Less Than and Greater Than DatFiles
- public static (DatFile lessThan, DatFile greaterThan) SplitBySizeDB(DatFile datFile, long radix)
+ /// Size to use as the radix between the outputs
+ /// DatFile representing items less than
+ /// DatFile representing items greater than or equal to
+ private static void SplitBySizeDBImpl(DatFile datFile, long radix, DatFile lessThan, DatFile greaterThan)
{
- // Create each of the respective output DATs
- var watch = new InternalStopwatch($"Splitting DAT by size");
-
- DatFile lessThan = Parser.CreateDatFile((DatHeader)datFile.Header.Clone(), datFile.Modifiers);
- lessThan.Header.SetFieldValue(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})");
- lessThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})");
- lessThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})");
-
- DatFile greaterThan = Parser.CreateDatFile((DatHeader)datFile.Header.Clone(), datFile.Modifiers);
- greaterThan.Header.SetFieldValue(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})");
- greaterThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})");
- greaterThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})");
-
// Get all current items, machines, and mappings
var datItems = datFile.ItemsDB.GetItems();
var machines = datFile.GetMachinesDB();
@@ -756,18 +770,19 @@ namespace SabreTools.DatTools
#else
}
#endif
-
- // Then return both DatFiles
- watch.Stop();
- return (lessThan, greaterThan);
}
+ #endregion
+
+ #region Total Size
+
///
/// Split a DAT by size of Rom
///
/// Current DatFile object to split
/// Long value representing the total size to split at
/// Less Than and Greater Than DatFiles
+ /// TODO: Create DB version of this method
public static List SplitByTotalSize(DatFile datFile, long chunkSize)
{
// If the size is invalid, just return
diff --git a/SabreTools/Features/Split.cs b/SabreTools/Features/Split.cs
index cee91373..d96d588e 100644
--- a/SabreTools/Features/Split.cs
+++ b/SabreTools/Features/Split.cs
@@ -144,7 +144,6 @@ namespace SabreTools.Features
#endif
{
(DatFile lessThan, DatFile greaterThan) = DatTools.Splitter.SplitBySize(internalDat, GetInt64(features, RadixInt64Value));
- //(DatFile lessThan, DatFile greaterThan) = DatTools.Splitter.SplitBySizeDB(internalDat, GetInt64(features, RadixInt64Value));
var watch = new InternalStopwatch("Outputting size-split DATs");