mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Make size split call both implementations
This commit is contained in:
@@ -622,17 +622,47 @@ namespace SabreTools.DatTools
|
|||||||
// Create each of the respective output DATs
|
// Create each of the respective output DATs
|
||||||
InternalStopwatch watch = new($"Splitting DAT by size");
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initialize splitting by size
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datFile">Current DatFile object to split</param>
|
||||||
|
/// <param name="radix">Size to use as the radix between the outputs</param>
|
||||||
|
/// <param name="lessThan">DatFile representing items less than <paramref name="radix"/></param>
|
||||||
|
/// <param name="greaterThan">DatFile representing items greater than or equal to <paramref name="radix"/></param>
|
||||||
|
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<string?>(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})");
|
lessThan.Header.SetFieldValue<string?>(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})");
|
||||||
lessThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})");
|
lessThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})");
|
||||||
lessThan.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})");
|
lessThan.Header.SetFieldValue<string?>(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<string?>(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})");
|
greaterThan.Header.SetFieldValue<string?>(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})");
|
||||||
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})");
|
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})");
|
||||||
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})");
|
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})");
|
||||||
|
}
|
||||||
|
|
||||||
// Now populate each of the DAT objects in turn
|
/// <summary>
|
||||||
|
/// Split a DAT by size of Rom
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datFile">Current DatFile object to split</param>
|
||||||
|
/// <param name="radix">Size to use as the radix between the outputs</param>
|
||||||
|
/// <param name="lessThan">DatFile representing items less than <paramref name="radix"/></param>
|
||||||
|
/// <param name="greaterThan">DatFile representing items greater than or equal to <paramref name="radix"/></param>
|
||||||
|
private static void SplitBySizeImpl(DatFile datFile, long radix, DatFile lessThan, DatFile greaterThan)
|
||||||
|
{
|
||||||
#if NET452_OR_GREATER || NETCOREAPP
|
#if NET452_OR_GREATER || NETCOREAPP
|
||||||
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
|
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
|
||||||
#elif NET40_OR_GREATER
|
#elif NET40_OR_GREATER
|
||||||
@@ -671,33 +701,17 @@ namespace SabreTools.DatTools
|
|||||||
#else
|
#else
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Then return both DatFiles
|
|
||||||
watch.Stop();
|
|
||||||
return (lessThan, greaterThan);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Split a DAT by size of Rom
|
/// Split a DAT by size of Rom
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="datFile">Current DatFile object to split</param>
|
/// <param name="datFile">Current DatFile object to split</param>
|
||||||
/// <param name="radix">Long value representing the split point</param>
|
/// <param name="radix">Size to use as the radix between the outputs</param>
|
||||||
/// <returns>Less Than and Greater Than DatFiles</returns>
|
/// <param name="lessThan">DatFile representing items less than <paramref name="radix"/></param>
|
||||||
public static (DatFile lessThan, DatFile greaterThan) SplitBySizeDB(DatFile datFile, long radix)
|
/// <param name="greaterThan">DatFile representing items greater than or equal to <paramref name="radix"/></param>
|
||||||
|
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<string?>(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})");
|
|
||||||
lessThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})");
|
|
||||||
lessThan.Header.SetFieldValue<string?>(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<string?>(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})");
|
|
||||||
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})");
|
|
||||||
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})");
|
|
||||||
|
|
||||||
// Get all current items, machines, and mappings
|
// Get all current items, machines, and mappings
|
||||||
var datItems = datFile.ItemsDB.GetItems();
|
var datItems = datFile.ItemsDB.GetItems();
|
||||||
var machines = datFile.GetMachinesDB();
|
var machines = datFile.GetMachinesDB();
|
||||||
@@ -756,18 +770,19 @@ namespace SabreTools.DatTools
|
|||||||
#else
|
#else
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Then return both DatFiles
|
|
||||||
watch.Stop();
|
|
||||||
return (lessThan, greaterThan);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Total Size
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Split a DAT by size of Rom
|
/// Split a DAT by size of Rom
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="datFile">Current DatFile object to split</param>
|
/// <param name="datFile">Current DatFile object to split</param>
|
||||||
/// <param name="chunkSize">Long value representing the total size to split at</param>
|
/// <param name="chunkSize">Long value representing the total size to split at</param>
|
||||||
/// <returns>Less Than and Greater Than DatFiles</returns>
|
/// <returns>Less Than and Greater Than DatFiles</returns>
|
||||||
|
/// TODO: Create DB version of this method
|
||||||
public static List<DatFile> SplitByTotalSize(DatFile datFile, long chunkSize)
|
public static List<DatFile> SplitByTotalSize(DatFile datFile, long chunkSize)
|
||||||
{
|
{
|
||||||
// If the size is invalid, just return
|
// If the size is invalid, just return
|
||||||
|
|||||||
@@ -144,7 +144,6 @@ namespace SabreTools.Features
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
(DatFile lessThan, DatFile greaterThan) = DatTools.Splitter.SplitBySize(internalDat, GetInt64(features, RadixInt64Value));
|
(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");
|
var watch = new InternalStopwatch("Outputting size-split DATs");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user