Add notes, numeric helper

This commit is contained in:
Matt Nadareski
2023-08-11 14:30:31 -04:00
parent 33342c6929
commit 90c8fdd0a9
16 changed files with 215 additions and 118 deletions

View File

@@ -0,0 +1,123 @@
using System;
namespace SabreTools.Core.Tools
{
public static class NumberHelper
{
#region Constants
#region Byte (1000-based) size comparisons
private const long KiloByte = 1000;
private readonly static long MegaByte = (long)Math.Pow(KiloByte, 2);
private readonly static long GigaByte = (long)Math.Pow(KiloByte, 3);
private readonly static long TeraByte = (long)Math.Pow(KiloByte, 4);
private readonly static long PetaByte = (long)Math.Pow(KiloByte, 5);
private readonly static long ExaByte = (long)Math.Pow(KiloByte, 6);
private readonly static long ZettaByte = (long)Math.Pow(KiloByte, 7);
private readonly static long YottaByte = (long)Math.Pow(KiloByte, 8);
#endregion
#region Byte (1024-based) size comparisons
private const long KibiByte = 1024;
private readonly static long MibiByte = (long)Math.Pow(KibiByte, 2);
private readonly static long GibiByte = (long)Math.Pow(KibiByte, 3);
private readonly static long TibiByte = (long)Math.Pow(KibiByte, 4);
private readonly static long PibiByte = (long)Math.Pow(KibiByte, 5);
private readonly static long ExiByte = (long)Math.Pow(KibiByte, 6);
private readonly static long ZittiByte = (long)Math.Pow(KibiByte, 7);
private readonly static long YittiByte = (long)Math.Pow(KibiByte, 8);
#endregion
#endregion
/// <summary>
/// Convert a string to an Int64
/// </summary>
public static double? ConvertToDouble(string? numeric)
{
// If we don't have a valid string, we can't do anything
if (string.IsNullOrWhiteSpace(numeric))
return null;
if (!double.TryParse(numeric, out double doubleValue))
return null;
return doubleValue;
}
/// <summary>
/// Convert a string to an Int64
/// </summary>
public static long? ConvertToInt64(string? numeric)
{
// If we don't have a valid string, we can't do anything
if (string.IsNullOrWhiteSpace(numeric))
return null;
// Normalize the string for easier comparison
numeric = numeric.ToLowerInvariant();
// Get the multiplication modifier and trim characters
long multiplier = DetermineMultiplier(numeric);
numeric = numeric.TrimEnd(new char[] { 'k', 'm', 'g', 't', 'p', 'e', 'z', 'y', 'i', 'b', ' ' });
// Parse the numeric string, if possible
long value;
if (numeric.StartsWith("0x"))
value = Convert.ToInt64(numeric, 16);
else if (long.TryParse(numeric, out long longValue))
value = longValue;
else
return null;
// Apply the multiplier and return
return value * multiplier;
}
/// <summary>
/// Determine the multiplier from a numeric string
/// </summary>
private static long DetermineMultiplier(string numeric)
{
long multiplier = 1;
if (numeric.EndsWith("k") || numeric.EndsWith("kb"))
multiplier = KiloByte;
else if (numeric.EndsWith("ki") || numeric.EndsWith("kib"))
multiplier = KibiByte;
else if (numeric.EndsWith("m") || numeric.EndsWith("mb"))
multiplier = MegaByte;
else if (numeric.EndsWith("mi") || numeric.EndsWith("mib"))
multiplier = MibiByte;
else if (numeric.EndsWith("g") || numeric.EndsWith("gb"))
multiplier = GigaByte;
else if (numeric.EndsWith("gi") || numeric.EndsWith("gib"))
multiplier = GibiByte;
else if (numeric.EndsWith("t") || numeric.EndsWith("tb"))
multiplier = TeraByte;
else if (numeric.EndsWith("ti") || numeric.EndsWith("tib"))
multiplier = TibiByte;
else if (numeric.EndsWith("p") || numeric.EndsWith("pb"))
multiplier = PetaByte;
else if (numeric.EndsWith("pi") || numeric.EndsWith("pib"))
multiplier = PibiByte;
else if (numeric.EndsWith("e") || numeric.EndsWith("eb"))
multiplier = ExaByte;
else if (numeric.EndsWith("ei") || numeric.EndsWith("eib"))
multiplier = ExiByte;
else if (numeric.EndsWith("z") || numeric.EndsWith("zb"))
multiplier = ZettaByte;
else if (numeric.EndsWith("zi") || numeric.EndsWith("zib"))
multiplier = ZittiByte;
else if (numeric.EndsWith("y") || numeric.EndsWith("yb"))
multiplier = YottaByte;
else if (numeric.EndsWith("yi") || numeric.EndsWith("yib"))
multiplier = YittiByte;
return multiplier;
}
}
}

View File

@@ -62,43 +62,6 @@ namespace SabreTools.Core.Tools
}
}
/// <summary>
/// Get a sanitized double from an input string
/// </summary>
/// <param name="input">String to get value from</param>
/// <returns>Value as a double?, if possible</returns>
public static double? CleanDouble(string input)
{
double? value = null;
if (input != null)
{
if (Double.TryParse(input, out double doubleValue))
value = doubleValue;
}
return value;
}
/// <summary>
/// Get a sanitized size from an input string
/// </summary>
/// <param name="input">String to get value from</param>
/// <returns>Size as a long?, if possible</returns>
public static long? CleanLong(string input)
{
long? size = null;
if (input != null && input.Contains("0x"))
size = Convert.ToInt64(input, 16);
else if (input != null)
{
if (Int64.TryParse(input, out long longSize))
size = longSize;
}
return size;
}
/// <summary>
/// Convert .NET DateTime to MS-DOS date format
/// </summary>

View File

@@ -107,7 +107,7 @@ namespace SabreTools.DatFiles.Formats
ArchiveDotOrgSource = file.Source,
//BitTorrentMagnetHash = file.BitTorrentMagnetHash, // TODO: Add to internal model
Date = file.LastModifiedTime?.ToString(),
Size = Utilities.CleanLong(file.Size),
Size = NumberHelper.ConvertToInt64(file.Size),
MD5 = file.MD5,
CRC = file.CRC32,
SHA1 = file.SHA1,

View File

@@ -247,7 +247,7 @@ namespace SabreTools.DatFiles.Formats
var item = new Rom
{
Name = rom.Name,
Size = Utilities.CleanLong(rom.Size),
Size = NumberHelper.ConvertToInt64(rom.Size),
CRC = rom.CRC,
MD5 = rom.MD5,
SHA1 = rom.SHA1,
@@ -414,7 +414,7 @@ namespace SabreTools.DatFiles.Formats
ChipType = chip.Type?.AsChipType() ?? ChipType.NULL,
Name = chip.Name,
//Flags = chip.Flags, // TODO: Add to internal model
Clock = Utilities.CleanLong(chip.Clock),
Clock = NumberHelper.ConvertToInt64(chip.Clock),
Source = new Source
{
@@ -449,11 +449,11 @@ namespace SabreTools.DatFiles.Formats
var item = new Display
{
DisplayType = video.Screen?.AsDisplayType() ?? DisplayType.NULL,
Width = Utilities.CleanLong(video.X),
Height = Utilities.CleanLong(video.Y),
Width = NumberHelper.ConvertToInt64(video.X),
Height = NumberHelper.ConvertToInt64(video.Y),
//AspectX = video.AspectX, // TODO: Add to internal model or find mapping
//AspectY = video.AspectY, // TODO: Add to internal model or find mapping
Refresh = Utilities.CleanDouble(video.Freq),
Refresh = NumberHelper.ConvertToDouble(video.Freq),
Source = new Source
{
@@ -495,7 +495,7 @@ namespace SabreTools.DatFiles.Formats
containsItems = true;
var item = new Sound
{
Channels = Utilities.CleanLong(sound.Channels),
Channels = NumberHelper.ConvertToInt64(sound.Channels),
Source = new Source
{
@@ -526,16 +526,16 @@ namespace SabreTools.DatFiles.Formats
containsItems = true;
var item = new Input
{
Players = Utilities.CleanLong(input.Players),
Players = NumberHelper.ConvertToInt64(input.Players),
//Control = input.Control, // TODO: Add to internal model or find mapping
Controls = new List<Control>
{
new Control
{
Buttons = Utilities.CleanLong(input.Buttons),
Buttons = NumberHelper.ConvertToInt64(input.Buttons),
},
},
Coins = Utilities.CleanLong(input.Coins),
Coins = NumberHelper.ConvertToInt64(input.Coins),
Tilt = input.Tilt?.AsYesNo(),
Service = input.Service?.AsYesNo(),

View File

@@ -142,7 +142,7 @@ namespace SabreTools.DatFiles.Formats
var item = new Rom
{
Name = rom.Name,
Size = Utilities.CleanLong(rom.Size),
Size = NumberHelper.ConvertToInt64(rom.Size),
CRC = rom.CRC,
Date = rom.Date,

View File

@@ -101,7 +101,7 @@ namespace SabreTools.DatFiles.Formats
var rom = new Rom()
{
Name = name,
Size = Utilities.CleanLong(row.Size),
Size = NumberHelper.ConvertToInt64(row.Size),
CRC = row.CRC32,
MD5 = row.MD5,
SHA1 = row.SHA1,

View File

@@ -144,7 +144,7 @@ namespace SabreTools.DatFiles.Formats
var rom = new Rom
{
Name = row.Name,
Size = Utilities.CleanLong(row.Size),
Size = NumberHelper.ConvertToInt64(row.Size),
CRC = row.CRC,
SHA1 = row.SHA1,
ItemStatus = ItemStatus.None,
@@ -221,7 +221,7 @@ namespace SabreTools.DatFiles.Formats
var rom = new Rom
{
Name = row.Name,
Size = Utilities.CleanLong(row.Size),
Size = NumberHelper.ConvertToInt64(row.Size),
CRC = row.CRC,
SHA1 = row.SHA1,
ItemStatus = ItemStatus.BadDump,
@@ -245,7 +245,7 @@ namespace SabreTools.DatFiles.Formats
var rom = new Rom
{
Name = row.Name,
Size = Utilities.CleanLong(row.Size),
Size = NumberHelper.ConvertToInt64(row.Size),
CRC = null,
SHA1 = null,
ItemStatus = ItemStatus.Nodump,

View File

@@ -214,7 +214,7 @@ namespace SabreTools.DatFiles.Formats
{
Name = rom.Name,
Bios = rom.Bios,
Size = Utilities.CleanLong(rom.Size),
Size = NumberHelper.ConvertToInt64(rom.Size),
CRC = rom.CRC,
SHA1 = rom.SHA1,
MergeTag = rom.Merge,
@@ -371,7 +371,7 @@ namespace SabreTools.DatFiles.Formats
Tag = chip.Tag,
ChipType = chip.Type.AsChipType(),
//SoundOnly = chip.SoundOnly, // TODO: Add to internal model
Clock = Utilities.CleanLong(chip.Clock),
Clock = NumberHelper.ConvertToInt64(chip.Clock),
Source = new Source
{
@@ -407,18 +407,18 @@ namespace SabreTools.DatFiles.Formats
{
Tag = display.Tag,
DisplayType = display.Type.AsDisplayType(),
Rotate = Utilities.CleanLong(display.Rotate),
Rotate = NumberHelper.ConvertToInt64(display.Rotate),
FlipX = display.FlipX.AsYesNo(),
Width = Utilities.CleanLong(display.Width),
Height = Utilities.CleanLong(display.Height),
Refresh = Utilities.CleanDouble(display.Refresh),
PixClock = Utilities.CleanLong(display.PixClock),
HTotal = Utilities.CleanLong(display.HTotal),
HBEnd = Utilities.CleanLong(display.HBEnd),
HBStart = Utilities.CleanLong(display.HBStart),
VTotal = Utilities.CleanLong(display.VTotal),
VBEnd = Utilities.CleanLong(display.VBEnd),
VBStart = Utilities.CleanLong(display.VBStart),
Width = NumberHelper.ConvertToInt64(display.Width),
Height = NumberHelper.ConvertToInt64(display.Height),
Refresh = NumberHelper.ConvertToDouble(display.Refresh),
PixClock = NumberHelper.ConvertToInt64(display.PixClock),
HTotal = NumberHelper.ConvertToInt64(display.HTotal),
HBEnd = NumberHelper.ConvertToInt64(display.HBEnd),
HBStart = NumberHelper.ConvertToInt64(display.HBStart),
VTotal = NumberHelper.ConvertToInt64(display.VTotal),
VBEnd = NumberHelper.ConvertToInt64(display.VBEnd),
VBStart = NumberHelper.ConvertToInt64(display.VBStart),
Source = new Source
{
@@ -453,11 +453,11 @@ namespace SabreTools.DatFiles.Formats
var item = new Display
{
DisplayType = video.Screen?.AsDisplayType() ?? DisplayType.NULL,
Width = Utilities.CleanLong(video.Width),
Height = Utilities.CleanLong(video.Height),
Width = NumberHelper.ConvertToInt64(video.Width),
Height = NumberHelper.ConvertToInt64(video.Height),
//AspectX = video.AspectX, // TODO: Add to internal model or find mapping
//AspectY = video.AspectY, // TODO: Add to internal model or find mapping
Refresh = Utilities.CleanDouble(video.Refresh),
Refresh = NumberHelper.ConvertToDouble(video.Refresh),
Source = new Source
{
@@ -499,7 +499,7 @@ namespace SabreTools.DatFiles.Formats
containsItems = true;
var item = new Sound
{
Channels = Utilities.CleanLong(sound.Channels),
Channels = NumberHelper.ConvertToInt64(sound.Channels),
Source = new Source
{
@@ -532,10 +532,10 @@ namespace SabreTools.DatFiles.Formats
{
Service = input.Service.AsYesNo(),
Tilt = input.Tilt.AsYesNo(),
Players = Utilities.CleanLong(input.Players),
Players = NumberHelper.ConvertToInt64(input.Players),
//ControlAttr = input.ControlAttr, // TODO: Add to internal model
//Buttons = input.Buttons, // TODO: Add to internal model
Coins = Utilities.CleanLong(input.Coins),
Coins = NumberHelper.ConvertToInt64(input.Coins),
Source = new Source
{
@@ -550,13 +550,13 @@ namespace SabreTools.DatFiles.Formats
var controlItem = new Control
{
ControlType = control.Type.AsControlType(),
Player = Utilities.CleanLong(control.Player),
Buttons = Utilities.CleanLong(control.Buttons),
RequiredButtons = Utilities.CleanLong(control.ReqButtons),
Minimum = Utilities.CleanLong(control.Minimum),
Maximum = Utilities.CleanLong(control.Maximum),
Sensitivity = Utilities.CleanLong(control.Sensitivity),
KeyDelta = Utilities.CleanLong(control.KeyDelta),
Player = NumberHelper.ConvertToInt64(control.Player),
Buttons = NumberHelper.ConvertToInt64(control.Buttons),
RequiredButtons = NumberHelper.ConvertToInt64(control.ReqButtons),
Minimum = NumberHelper.ConvertToInt64(control.Minimum),
Maximum = NumberHelper.ConvertToInt64(control.Maximum),
Sensitivity = NumberHelper.ConvertToInt64(control.Sensitivity),
KeyDelta = NumberHelper.ConvertToInt64(control.KeyDelta),
Reverse = control.Reverse.AsYesNo(),
Ways = control.Ways,
Ways2 = control.Ways2,
@@ -621,7 +621,7 @@ namespace SabreTools.DatFiles.Formats
var locationItem = new Location
{
Name = diplocation.Name,
Number = Utilities.CleanLong(diplocation.Number),
Number = NumberHelper.ConvertToInt64(diplocation.Number),
Inverted = diplocation.Inverted.AsYesNo(),
};
locations.Add(locationItem);
@@ -712,7 +712,7 @@ namespace SabreTools.DatFiles.Formats
var locationItem = new Location
{
Name = confLocation.Name,
Number = Utilities.CleanLong(confLocation.Number),
Number = NumberHelper.ConvertToInt64(confLocation.Number),
Inverted = confLocation.Inverted.AsYesNo(),
};
locations.Add(locationItem);
@@ -869,7 +869,7 @@ namespace SabreTools.DatFiles.Formats
Status = driver.Status.AsSupportStatus(),
//Color = driver.Color.AsSupportStatus(), // TODO: Add to internal model
//Sound = driver.Sound.AsSupportStatus(), // TODO: Add to internal model
//PaletteSize = Utilities.CleanLong(driver.PaletteSize), // TODO: Add to internal model
//PaletteSize = NumberHelper.ConvertToInt64(driver.PaletteSize), // TODO: Add to internal model
Emulation = driver.Emulation.AsSupportStatus(),
Cocktail = driver.Cocktail.AsSupportStatus(),
SaveState = driver.SaveState.AsSupported(),
@@ -948,7 +948,7 @@ namespace SabreTools.DatFiles.Formats
DeviceType = device.Type.AsDeviceType(),
Tag = device.Tag,
FixedImage = device.FixedImage,
Mandatory = Utilities.CleanLong(device.Mandatory),
Mandatory = NumberHelper.ConvertToInt64(device.Mandatory),
Interface = device.Interface,
Source = new Source

View File

@@ -388,7 +388,7 @@ namespace SabreTools.DatFiles.Formats
var item = new Rom
{
Name = rom.Name,
Size = Utilities.CleanLong(rom.Size),
Size = NumberHelper.ConvertToInt64(rom.Size),
CRC = rom.CRC,
MD5 = rom.MD5,
SHA1 = rom.SHA1,

View File

@@ -316,7 +316,7 @@ namespace SabreTools.DatFiles.Formats
Comment = game.Comment,
};
long? size = Utilities.CleanLong(game.RomSize);
long? size = NumberHelper.ConvertToInt64(game.RomSize);
if (game.DuplicateID != "0")
machine.CloneOf = game.DuplicateID;

View File

@@ -110,7 +110,7 @@ namespace SabreTools.DatFiles.Formats
var item = new Rom
{
Name = rom.RomName,
Size = Utilities.CleanLong(rom.RomSize),
Size = NumberHelper.ConvertToInt64(rom.RomSize),
CRC = rom.RomCRC,
MergeTag = rom.MergeName,
ItemStatus = ItemStatus.None,

View File

@@ -256,8 +256,8 @@ namespace SabreTools.DatFiles.Formats
var item = new DataArea
{
Name = dataarea.Name,
Size = Utilities.CleanLong(dataarea.Size),
Width = Utilities.CleanLong(dataarea.Width),
Size = NumberHelper.ConvertToInt64(dataarea.Size),
Width = NumberHelper.ConvertToInt64(dataarea.Width),
Endianness = dataarea.Endianness.AsEndianness(),
Source = new Source
@@ -295,7 +295,7 @@ namespace SabreTools.DatFiles.Formats
var item = new Rom
{
Name = rom.Name,
Size = Utilities.CleanLong(rom.Size ?? rom.Length),
Size = NumberHelper.ConvertToInt64(rom.Size ?? rom.Length),
CRC = rom.CRC,
SHA1 = rom.SHA1,
Offset = rom.Offset,

View File

@@ -472,7 +472,7 @@ namespace SabreTools.DatFiles
chip.ChipType = DatItemMappings[DatItemField.ChipType].AsChipType();
if (DatItemMappings!.ContainsKey(DatItemField.Clock))
chip.Clock = Utilities.CleanLong(DatItemMappings[DatItemField.Clock]);
chip.Clock = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Clock]);
if (DatItemMappings!.ContainsKey(DatItemField.Tag))
chip.Tag = DatItemMappings[DatItemField.Tag];
@@ -559,31 +559,31 @@ namespace SabreTools.DatFiles
private void SetFields(Control control)
{
if (DatItemMappings!.ContainsKey(DatItemField.Control_Buttons))
control.Buttons = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Buttons]);
control.Buttons = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Control_Buttons]);
if (DatItemMappings!.ContainsKey(DatItemField.Control_Type))
control.ControlType = DatItemMappings[DatItemField.Control_Type].AsControlType();
if (DatItemMappings!.ContainsKey(DatItemField.Control_KeyDelta))
control.KeyDelta = Utilities.CleanLong(DatItemMappings[DatItemField.Control_KeyDelta]);
control.KeyDelta = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Control_KeyDelta]);
if (DatItemMappings!.ContainsKey(DatItemField.Control_Maximum))
control.Maximum = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Maximum]);
control.Maximum = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Control_Maximum]);
if (DatItemMappings!.ContainsKey(DatItemField.Control_Minimum))
control.Minimum = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Minimum]);
control.Minimum = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Control_Minimum]);
if (DatItemMappings!.ContainsKey(DatItemField.Control_Player))
control.Player = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Player]);
control.Player = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Control_Player]);
if (DatItemMappings!.ContainsKey(DatItemField.Control_RequiredButtons))
control.RequiredButtons = Utilities.CleanLong(DatItemMappings[DatItemField.Control_RequiredButtons]);
control.RequiredButtons = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Control_RequiredButtons]);
if (DatItemMappings!.ContainsKey(DatItemField.Control_Reverse))
control.Reverse = DatItemMappings[DatItemField.Control_Reverse].AsYesNo();
if (DatItemMappings!.ContainsKey(DatItemField.Control_Sensitivity))
control.Sensitivity = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Sensitivity]);
control.Sensitivity = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Control_Sensitivity]);
if (DatItemMappings!.ContainsKey(DatItemField.Control_Ways))
control.Ways = DatItemMappings[DatItemField.Control_Ways];
@@ -608,10 +608,10 @@ namespace SabreTools.DatFiles
dataArea.Name = DatItemMappings[DatItemField.AreaName];
if (DatItemMappings!.ContainsKey(DatItemField.AreaSize))
dataArea.Size = Utilities.CleanLong(DatItemMappings[DatItemField.AreaSize]);
dataArea.Size = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.AreaSize]);
if (DatItemMappings!.ContainsKey(DatItemField.AreaWidth))
dataArea.Width = Utilities.CleanLong(DatItemMappings[DatItemField.AreaWidth]);
dataArea.Width = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.AreaWidth]);
}
/// <summary>
@@ -630,7 +630,7 @@ namespace SabreTools.DatFiles
device.Interface = DatItemMappings[DatItemField.Interface];
if (DatItemMappings!.ContainsKey(DatItemField.Mandatory))
device.Mandatory = Utilities.CleanLong(DatItemMappings[DatItemField.Mandatory]);
device.Mandatory = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Mandatory]);
if (DatItemMappings!.ContainsKey(DatItemField.Tag))
device.Tag = DatItemMappings[DatItemField.Tag];
@@ -752,40 +752,40 @@ namespace SabreTools.DatFiles
display.FlipX = DatItemMappings[DatItemField.FlipX].AsYesNo();
if (DatItemMappings!.ContainsKey(DatItemField.Height))
display.Height = Utilities.CleanLong(DatItemMappings[DatItemField.Height]);
display.Height = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Height]);
if (DatItemMappings!.ContainsKey(DatItemField.HBEnd))
display.HBEnd = Utilities.CleanLong(DatItemMappings[DatItemField.HBEnd]);
display.HBEnd = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.HBEnd]);
if (DatItemMappings!.ContainsKey(DatItemField.HBStart))
display.HBStart = Utilities.CleanLong(DatItemMappings[DatItemField.HBStart]);
display.HBStart = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.HBStart]);
if (DatItemMappings!.ContainsKey(DatItemField.HTotal))
display.HTotal = Utilities.CleanLong(DatItemMappings[DatItemField.HTotal]);
display.HTotal = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.HTotal]);
if (DatItemMappings!.ContainsKey(DatItemField.PixClock))
display.PixClock = Utilities.CleanLong(DatItemMappings[DatItemField.PixClock]);
display.PixClock = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.PixClock]);
if (DatItemMappings!.ContainsKey(DatItemField.Refresh))
display.Refresh = Utilities.CleanDouble(DatItemMappings[DatItemField.Refresh]);
display.Refresh = NumberHelper.ConvertToDouble(DatItemMappings[DatItemField.Refresh]);
if (DatItemMappings!.ContainsKey(DatItemField.Rotate))
display.Rotate = Utilities.CleanLong(DatItemMappings[DatItemField.Rotate]);
display.Rotate = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Rotate]);
if (DatItemMappings!.ContainsKey(DatItemField.Tag))
display.Tag = DatItemMappings[DatItemField.Tag];
if (DatItemMappings!.ContainsKey(DatItemField.VBEnd))
display.VBEnd = Utilities.CleanLong(DatItemMappings[DatItemField.VBEnd]);
display.VBEnd = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.VBEnd]);
if (DatItemMappings!.ContainsKey(DatItemField.VBStart))
display.VBStart = Utilities.CleanLong(DatItemMappings[DatItemField.VBStart]);
display.VBStart = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.VBStart]);
if (DatItemMappings!.ContainsKey(DatItemField.VTotal))
display.VTotal = Utilities.CleanLong(DatItemMappings[DatItemField.VTotal]);
display.VTotal = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.VTotal]);
if (DatItemMappings!.ContainsKey(DatItemField.Width))
display.Width = Utilities.CleanLong(DatItemMappings[DatItemField.Width]);
display.Width = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Width]);
}
/// <summary>
@@ -862,10 +862,10 @@ namespace SabreTools.DatFiles
private void SetFields(Input input)
{
if (DatItemMappings!.ContainsKey(DatItemField.Coins))
input.Coins = Utilities.CleanLong(DatItemMappings[DatItemField.Coins]);
input.Coins = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Coins]);
if (DatItemMappings!.ContainsKey(DatItemField.Players))
input.Players = Utilities.CleanLong(DatItemMappings[DatItemField.Players]);
input.Players = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Players]);
if (DatItemMappings!.ContainsKey(DatItemField.Service))
input.Service = DatItemMappings[DatItemField.Service].AsYesNo();
@@ -908,7 +908,7 @@ namespace SabreTools.DatFiles
location.Name = DatItemMappings[DatItemField.Location_Name];
if (DatItemMappings!.ContainsKey(DatItemField.Location_Number))
location.Number = Utilities.CleanLong(DatItemMappings[DatItemField.Location_Number]);
location.Number = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Location_Number]);
}
/// <summary>
@@ -1099,7 +1099,7 @@ namespace SabreTools.DatFiles
rom.SHA512 = DatItemMappings[DatItemField.SHA512];
if (DatItemMappings!.ContainsKey(DatItemField.Size))
rom.Size = Utilities.CleanLong(DatItemMappings[DatItemField.Size]);
rom.Size = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Size]);
if (DatItemMappings!.ContainsKey(DatItemField.SpamSum))
rom.SpamSum = DatItemMappings[DatItemField.SpamSum];
@@ -1208,7 +1208,7 @@ namespace SabreTools.DatFiles
private void SetFields(Sound sound)
{
if (DatItemMappings!.ContainsKey(DatItemField.Channels))
sound.Channels = Utilities.CleanLong(DatItemMappings[DatItemField.Channels]);
sound.Channels = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Channels]);
}
}
}

View File

@@ -84,7 +84,10 @@ namespace SabreTools.Filter
/// <summary>
/// Determines if a value matches exactly
/// </summary>
/// <remarks>TODO: Add regex matching to this method</remarks>
/// <remarks>
/// TODO: Add regex matching to this method
/// TODO: Add logic to convert SI suffixes and hex
/// </remarks>
private bool MatchesEqual(DictionaryBase dictionaryBase)
{
if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -97,7 +100,10 @@ namespace SabreTools.Filter
/// <summary>
/// Determines if a value does not match exactly
/// </summary>
/// <remarks>TODO: Add regex matching to this method</remarks>
/// <remarks>
/// TODO: Add regex matching to this method
/// TODO: Add logic to convert SI suffixes and hex
/// </remarks>
private bool MatchesNotEqual(DictionaryBase dictionaryBase)
{
if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -110,6 +116,7 @@ namespace SabreTools.Filter
/// <summary>
/// Determines if a value is strictly greater than
/// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesGreaterThan(DictionaryBase dictionaryBase)
{
if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -139,6 +146,7 @@ namespace SabreTools.Filter
/// <summary>
/// Determines if a value is greater than or equal
/// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesGreaterThanOrEqual(DictionaryBase dictionaryBase)
{
if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -168,6 +176,7 @@ namespace SabreTools.Filter
/// <summary>
/// Determines if a value is strictly less than
/// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesLessThan(DictionaryBase dictionaryBase)
{
if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -197,6 +206,7 @@ namespace SabreTools.Filter
/// <summary>
/// Determines if a value is less than or equal
/// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesLessThanOrEqual(DictionaryBase dictionaryBase)
{
if (!dictionaryBase.ContainsKey(this.Key[1]))

View File

@@ -62,6 +62,7 @@ namespace SabreTools.Models.Internal
/// <summary>
/// Read a key as a long, returning null on error
/// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
public long? ReadLong(string key)
{
if (!ValidateKey(key))

View File

@@ -16,7 +16,7 @@ namespace SabreTools.Test.Core
[InlineData(" 12345 ", 12345L)]
public void CleanLongTest(string input, long? expected)
{
long? actual = Utilities.CleanLong(input);
long? actual = NumberHelper.ConvertToInt64(input);
Assert.Equal(expected, actual);
}