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> /// <summary>
/// Convert .NET DateTime to MS-DOS date format /// Convert .NET DateTime to MS-DOS date format
/// </summary> /// </summary>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -472,7 +472,7 @@ namespace SabreTools.DatFiles
chip.ChipType = DatItemMappings[DatItemField.ChipType].AsChipType(); chip.ChipType = DatItemMappings[DatItemField.ChipType].AsChipType();
if (DatItemMappings!.ContainsKey(DatItemField.Clock)) if (DatItemMappings!.ContainsKey(DatItemField.Clock))
chip.Clock = Utilities.CleanLong(DatItemMappings[DatItemField.Clock]); chip.Clock = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Clock]);
if (DatItemMappings!.ContainsKey(DatItemField.Tag)) if (DatItemMappings!.ContainsKey(DatItemField.Tag))
chip.Tag = DatItemMappings[DatItemField.Tag]; chip.Tag = DatItemMappings[DatItemField.Tag];
@@ -559,31 +559,31 @@ namespace SabreTools.DatFiles
private void SetFields(Control control) private void SetFields(Control control)
{ {
if (DatItemMappings!.ContainsKey(DatItemField.Control_Buttons)) 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)) if (DatItemMappings!.ContainsKey(DatItemField.Control_Type))
control.ControlType = DatItemMappings[DatItemField.Control_Type].AsControlType(); control.ControlType = DatItemMappings[DatItemField.Control_Type].AsControlType();
if (DatItemMappings!.ContainsKey(DatItemField.Control_KeyDelta)) 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)) 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)) 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)) 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)) 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)) if (DatItemMappings!.ContainsKey(DatItemField.Control_Reverse))
control.Reverse = DatItemMappings[DatItemField.Control_Reverse].AsYesNo(); control.Reverse = DatItemMappings[DatItemField.Control_Reverse].AsYesNo();
if (DatItemMappings!.ContainsKey(DatItemField.Control_Sensitivity)) 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)) if (DatItemMappings!.ContainsKey(DatItemField.Control_Ways))
control.Ways = DatItemMappings[DatItemField.Control_Ways]; control.Ways = DatItemMappings[DatItemField.Control_Ways];
@@ -608,10 +608,10 @@ namespace SabreTools.DatFiles
dataArea.Name = DatItemMappings[DatItemField.AreaName]; dataArea.Name = DatItemMappings[DatItemField.AreaName];
if (DatItemMappings!.ContainsKey(DatItemField.AreaSize)) if (DatItemMappings!.ContainsKey(DatItemField.AreaSize))
dataArea.Size = Utilities.CleanLong(DatItemMappings[DatItemField.AreaSize]); dataArea.Size = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.AreaSize]);
if (DatItemMappings!.ContainsKey(DatItemField.AreaWidth)) if (DatItemMappings!.ContainsKey(DatItemField.AreaWidth))
dataArea.Width = Utilities.CleanLong(DatItemMappings[DatItemField.AreaWidth]); dataArea.Width = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.AreaWidth]);
} }
/// <summary> /// <summary>
@@ -630,7 +630,7 @@ namespace SabreTools.DatFiles
device.Interface = DatItemMappings[DatItemField.Interface]; device.Interface = DatItemMappings[DatItemField.Interface];
if (DatItemMappings!.ContainsKey(DatItemField.Mandatory)) if (DatItemMappings!.ContainsKey(DatItemField.Mandatory))
device.Mandatory = Utilities.CleanLong(DatItemMappings[DatItemField.Mandatory]); device.Mandatory = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Mandatory]);
if (DatItemMappings!.ContainsKey(DatItemField.Tag)) if (DatItemMappings!.ContainsKey(DatItemField.Tag))
device.Tag = DatItemMappings[DatItemField.Tag]; device.Tag = DatItemMappings[DatItemField.Tag];
@@ -752,40 +752,40 @@ namespace SabreTools.DatFiles
display.FlipX = DatItemMappings[DatItemField.FlipX].AsYesNo(); display.FlipX = DatItemMappings[DatItemField.FlipX].AsYesNo();
if (DatItemMappings!.ContainsKey(DatItemField.Height)) if (DatItemMappings!.ContainsKey(DatItemField.Height))
display.Height = Utilities.CleanLong(DatItemMappings[DatItemField.Height]); display.Height = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Height]);
if (DatItemMappings!.ContainsKey(DatItemField.HBEnd)) if (DatItemMappings!.ContainsKey(DatItemField.HBEnd))
display.HBEnd = Utilities.CleanLong(DatItemMappings[DatItemField.HBEnd]); display.HBEnd = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.HBEnd]);
if (DatItemMappings!.ContainsKey(DatItemField.HBStart)) if (DatItemMappings!.ContainsKey(DatItemField.HBStart))
display.HBStart = Utilities.CleanLong(DatItemMappings[DatItemField.HBStart]); display.HBStart = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.HBStart]);
if (DatItemMappings!.ContainsKey(DatItemField.HTotal)) if (DatItemMappings!.ContainsKey(DatItemField.HTotal))
display.HTotal = Utilities.CleanLong(DatItemMappings[DatItemField.HTotal]); display.HTotal = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.HTotal]);
if (DatItemMappings!.ContainsKey(DatItemField.PixClock)) if (DatItemMappings!.ContainsKey(DatItemField.PixClock))
display.PixClock = Utilities.CleanLong(DatItemMappings[DatItemField.PixClock]); display.PixClock = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.PixClock]);
if (DatItemMappings!.ContainsKey(DatItemField.Refresh)) if (DatItemMappings!.ContainsKey(DatItemField.Refresh))
display.Refresh = Utilities.CleanDouble(DatItemMappings[DatItemField.Refresh]); display.Refresh = NumberHelper.ConvertToDouble(DatItemMappings[DatItemField.Refresh]);
if (DatItemMappings!.ContainsKey(DatItemField.Rotate)) if (DatItemMappings!.ContainsKey(DatItemField.Rotate))
display.Rotate = Utilities.CleanLong(DatItemMappings[DatItemField.Rotate]); display.Rotate = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Rotate]);
if (DatItemMappings!.ContainsKey(DatItemField.Tag)) if (DatItemMappings!.ContainsKey(DatItemField.Tag))
display.Tag = DatItemMappings[DatItemField.Tag]; display.Tag = DatItemMappings[DatItemField.Tag];
if (DatItemMappings!.ContainsKey(DatItemField.VBEnd)) if (DatItemMappings!.ContainsKey(DatItemField.VBEnd))
display.VBEnd = Utilities.CleanLong(DatItemMappings[DatItemField.VBEnd]); display.VBEnd = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.VBEnd]);
if (DatItemMappings!.ContainsKey(DatItemField.VBStart)) if (DatItemMappings!.ContainsKey(DatItemField.VBStart))
display.VBStart = Utilities.CleanLong(DatItemMappings[DatItemField.VBStart]); display.VBStart = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.VBStart]);
if (DatItemMappings!.ContainsKey(DatItemField.VTotal)) if (DatItemMappings!.ContainsKey(DatItemField.VTotal))
display.VTotal = Utilities.CleanLong(DatItemMappings[DatItemField.VTotal]); display.VTotal = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.VTotal]);
if (DatItemMappings!.ContainsKey(DatItemField.Width)) if (DatItemMappings!.ContainsKey(DatItemField.Width))
display.Width = Utilities.CleanLong(DatItemMappings[DatItemField.Width]); display.Width = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Width]);
} }
/// <summary> /// <summary>
@@ -862,10 +862,10 @@ namespace SabreTools.DatFiles
private void SetFields(Input input) private void SetFields(Input input)
{ {
if (DatItemMappings!.ContainsKey(DatItemField.Coins)) if (DatItemMappings!.ContainsKey(DatItemField.Coins))
input.Coins = Utilities.CleanLong(DatItemMappings[DatItemField.Coins]); input.Coins = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Coins]);
if (DatItemMappings!.ContainsKey(DatItemField.Players)) if (DatItemMappings!.ContainsKey(DatItemField.Players))
input.Players = Utilities.CleanLong(DatItemMappings[DatItemField.Players]); input.Players = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Players]);
if (DatItemMappings!.ContainsKey(DatItemField.Service)) if (DatItemMappings!.ContainsKey(DatItemField.Service))
input.Service = DatItemMappings[DatItemField.Service].AsYesNo(); input.Service = DatItemMappings[DatItemField.Service].AsYesNo();
@@ -908,7 +908,7 @@ namespace SabreTools.DatFiles
location.Name = DatItemMappings[DatItemField.Location_Name]; location.Name = DatItemMappings[DatItemField.Location_Name];
if (DatItemMappings!.ContainsKey(DatItemField.Location_Number)) if (DatItemMappings!.ContainsKey(DatItemField.Location_Number))
location.Number = Utilities.CleanLong(DatItemMappings[DatItemField.Location_Number]); location.Number = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Location_Number]);
} }
/// <summary> /// <summary>
@@ -1099,7 +1099,7 @@ namespace SabreTools.DatFiles
rom.SHA512 = DatItemMappings[DatItemField.SHA512]; rom.SHA512 = DatItemMappings[DatItemField.SHA512];
if (DatItemMappings!.ContainsKey(DatItemField.Size)) if (DatItemMappings!.ContainsKey(DatItemField.Size))
rom.Size = Utilities.CleanLong(DatItemMappings[DatItemField.Size]); rom.Size = NumberHelper.ConvertToInt64(DatItemMappings[DatItemField.Size]);
if (DatItemMappings!.ContainsKey(DatItemField.SpamSum)) if (DatItemMappings!.ContainsKey(DatItemField.SpamSum))
rom.SpamSum = DatItemMappings[DatItemField.SpamSum]; rom.SpamSum = DatItemMappings[DatItemField.SpamSum];
@@ -1208,7 +1208,7 @@ namespace SabreTools.DatFiles
private void SetFields(Sound sound) private void SetFields(Sound sound)
{ {
if (DatItemMappings!.ContainsKey(DatItemField.Channels)) 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> /// <summary>
/// Determines if a value matches exactly /// Determines if a value matches exactly
/// </summary> /// </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) private bool MatchesEqual(DictionaryBase dictionaryBase)
{ {
if (!dictionaryBase.ContainsKey(this.Key[1])) if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -97,7 +100,10 @@ namespace SabreTools.Filter
/// <summary> /// <summary>
/// Determines if a value does not match exactly /// Determines if a value does not match exactly
/// </summary> /// </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) private bool MatchesNotEqual(DictionaryBase dictionaryBase)
{ {
if (!dictionaryBase.ContainsKey(this.Key[1])) if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -110,6 +116,7 @@ namespace SabreTools.Filter
/// <summary> /// <summary>
/// Determines if a value is strictly greater than /// Determines if a value is strictly greater than
/// </summary> /// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesGreaterThan(DictionaryBase dictionaryBase) private bool MatchesGreaterThan(DictionaryBase dictionaryBase)
{ {
if (!dictionaryBase.ContainsKey(this.Key[1])) if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -139,6 +146,7 @@ namespace SabreTools.Filter
/// <summary> /// <summary>
/// Determines if a value is greater than or equal /// Determines if a value is greater than or equal
/// </summary> /// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesGreaterThanOrEqual(DictionaryBase dictionaryBase) private bool MatchesGreaterThanOrEqual(DictionaryBase dictionaryBase)
{ {
if (!dictionaryBase.ContainsKey(this.Key[1])) if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -168,6 +176,7 @@ namespace SabreTools.Filter
/// <summary> /// <summary>
/// Determines if a value is strictly less than /// Determines if a value is strictly less than
/// </summary> /// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesLessThan(DictionaryBase dictionaryBase) private bool MatchesLessThan(DictionaryBase dictionaryBase)
{ {
if (!dictionaryBase.ContainsKey(this.Key[1])) if (!dictionaryBase.ContainsKey(this.Key[1]))
@@ -197,6 +206,7 @@ namespace SabreTools.Filter
/// <summary> /// <summary>
/// Determines if a value is less than or equal /// Determines if a value is less than or equal
/// </summary> /// </summary>
/// <remarks>TODO: Add logic to convert SI suffixes and hex</remarks>
private bool MatchesLessThanOrEqual(DictionaryBase dictionaryBase) private bool MatchesLessThanOrEqual(DictionaryBase dictionaryBase)
{ {
if (!dictionaryBase.ContainsKey(this.Key[1])) if (!dictionaryBase.ContainsKey(this.Key[1]))

View File

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

View File

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