diff --git a/SabreTools.Library/DatItems/Enums.cs b/SabreTools.Library/DatItems/Enums.cs
index 68dfb071..9500ae94 100644
--- a/SabreTools.Library/DatItems/Enums.cs
+++ b/SabreTools.Library/DatItems/Enums.cs
@@ -61,7 +61,6 @@ namespace SabreTools.Library.DatItems
///
NULL = 0,
- // TODO: (big|little) "little"
Big = 1 << 0,
Little = 1 << 1,
}
diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs
index 9ae7197d..78e7a374 100644
--- a/SabreTools.Library/Filtering/Filter.cs
+++ b/SabreTools.Library/Filtering/Filter.cs
@@ -342,73 +342,43 @@ namespace SabreTools.Library.Filtering
#region Common
case Field.Machine_Name:
- if (negate)
- Machine_Name.NegativeSet.Add(value);
- else
- Machine_Name.PositiveSet.Add(value);
+ SetStringFilter(Machine_Name, value, negate);
break;
case Field.Machine_Comment:
- if (negate)
- Machine_Comment.NegativeSet.Add(value);
- else
- Machine_Comment.PositiveSet.Add(value);
+ SetStringFilter(Machine_Comment, value, negate);
break;
case Field.Machine_Description:
- if (negate)
- Machine_Description.NegativeSet.Add(value);
- else
- Machine_Description.PositiveSet.Add(value);
+ SetStringFilter(Machine_Description, value, negate);
break;
case Field.Machine_Year:
- if (negate)
- Machine_Year.NegativeSet.Add(value);
- else
- Machine_Year.PositiveSet.Add(value);
+ SetStringFilter(Machine_Year, value, negate);
break;
case Field.Machine_Manufacturer:
- if (negate)
- Machine_Manufacturer.NegativeSet.Add(value);
- else
- Machine_Manufacturer.PositiveSet.Add(value);
+ SetStringFilter(Machine_Manufacturer, value, negate);
break;
case Field.Machine_Publisher:
- if (negate)
- Machine_Publisher.NegativeSet.Add(value);
- else
- Machine_Publisher.PositiveSet.Add(value);
+ SetStringFilter(Machine_Publisher, value, negate);
break;
case Field.Machine_Category:
- if (negate)
- Machine_Category.NegativeSet.Add(value);
- else
- Machine_Category.PositiveSet.Add(value);
+ SetStringFilter(Machine_Category, value, negate);
break;
case Field.Machine_RomOf:
- if (negate)
- Machine_RomOf.NegativeSet.Add(value);
- else
- Machine_RomOf.PositiveSet.Add(value);
+ SetStringFilter(Machine_RomOf, value, negate);
break;
case Field.Machine_CloneOf:
- if (negate)
- Machine_CloneOf.NegativeSet.Add(value);
- else
- Machine_CloneOf.PositiveSet.Add(value);
+ SetStringFilter(Machine_CloneOf, value, negate);
break;
case Field.Machine_SampleOf:
- if (negate)
- Machine_SampleOf.NegativeSet.Add(value);
- else
- Machine_SampleOf.PositiveSet.Add(value);
+ SetStringFilter(Machine_SampleOf, value, negate);
break;
case Field.Machine_Type:
@@ -423,52 +393,31 @@ namespace SabreTools.Library.Filtering
#region AttractMode
case Field.Machine_Players:
- if (negate)
- Machine_Players.NegativeSet.Add(value);
- else
- Machine_Players.PositiveSet.Add(value);
+ SetStringFilter(Machine_Players, value, negate);
break;
case Field.Machine_Rotation:
- if (negate)
- Machine_Rotation.NegativeSet.Add(value);
- else
- Machine_Rotation.PositiveSet.Add(value);
+ SetStringFilter(Machine_Rotation, value, negate);
break;
case Field.Machine_Control:
- if (negate)
- Machine_Control.NegativeSet.Add(value);
- else
- Machine_Control.PositiveSet.Add(value);
+ SetStringFilter(Machine_Control, value, negate);
break;
case Field.Machine_Status:
- if (negate)
- Machine_Status.NegativeSet.Add(value);
- else
- Machine_Status.PositiveSet.Add(value);
+ SetStringFilter(Machine_Status, value, negate);
break;
case Field.Machine_DisplayCount:
- if (negate)
- Machine_DisplayCount.NegativeSet.Add(value);
- else
- Machine_DisplayCount.PositiveSet.Add(value);
+ SetStringFilter(Machine_DisplayCount, value, negate);
break;
case Field.Machine_DisplayType:
- if (negate)
- Machine_DisplayType.NegativeSet.Add(value);
- else
- Machine_DisplayType.PositiveSet.Add(value);
+ SetStringFilter(Machine_DisplayType, value, negate);
break;
case Field.Machine_Buttons:
- if (negate)
- Machine_Buttons.NegativeSet.Add(value);
- else
- Machine_Buttons.PositiveSet.Add(value);
+ SetStringFilter(Machine_Buttons, value, negate);
break;
#endregion
@@ -476,10 +425,7 @@ namespace SabreTools.Library.Filtering
#region ListXML
case Field.Machine_SourceFile:
- if (negate)
- Machine_SourceFile.NegativeSet.Add(value);
- else
- Machine_SourceFile.PositiveSet.Add(value);
+ SetStringFilter(Machine_SourceFile, value, negate);
break;
case Field.Machine_Runnable:
@@ -494,17 +440,11 @@ namespace SabreTools.Library.Filtering
#region Logiqx
case Field.Machine_Board:
- if (negate)
- Machine_Board.NegativeSet.Add(value);
- else
- Machine_Board.PositiveSet.Add(value);
+ SetStringFilter(Machine_Board, value, negate);
break;
case Field.Machine_RebuildTo:
- if (negate)
- Machine_RebuildTo.NegativeSet.Add(value);
- else
- Machine_RebuildTo.PositiveSet.Add(value);
+ SetStringFilter(Machine_RebuildTo, value, negate);
break;
#endregion
@@ -512,66 +452,39 @@ namespace SabreTools.Library.Filtering
#region Logiqx EmuArc
case Field.Machine_TitleID:
- if (negate)
- Machine_TitleID.NegativeSet.Add(value);
- else
- Machine_TitleID.PositiveSet.Add(value);
+ SetStringFilter(Machine_TitleID, value, negate);
break;
case Field.Machine_Developer:
- if (negate)
- Machine_Developer.NegativeSet.Add(value);
- else
- Machine_Developer.PositiveSet.Add(value);
+ SetStringFilter(Machine_Developer, value, negate);
break;
case Field.Machine_Genre:
- if (negate)
- Machine_Genre.NegativeSet.Add(value);
- else
- Machine_Genre.PositiveSet.Add(value);
+ SetStringFilter(Machine_Genre, value, negate);
break;
case Field.Machine_Subgenre:
- if (negate)
- Machine_Subgenre.NegativeSet.Add(value);
- else
- Machine_Subgenre.PositiveSet.Add(value);
+ SetStringFilter(Machine_Subgenre, value, negate);
break;
case Field.Machine_Ratings:
- if (negate)
- Machine_Ratings.NegativeSet.Add(value);
- else
- Machine_Ratings.PositiveSet.Add(value);
+ SetStringFilter(Machine_Ratings, value, negate);
break;
case Field.Machine_Score:
- if (negate)
- Machine_Score.NegativeSet.Add(value);
- else
- Machine_Score.PositiveSet.Add(value);
+ SetStringFilter(Machine_Score, value, negate);
break;
case Field.Machine_Enabled:
- if (negate)
- Machine_Enabled.NegativeSet.Add(value);
- else
- Machine_Enabled.PositiveSet.Add(value);
+ SetStringFilter(Machine_Enabled, value, negate);
break;
case Field.Machine_CRC:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- Machine_CRC.Neutral = false;
- else
- Machine_CRC.Neutral = true;
+ SetBooleanFilter(Machine_CRC, value, negate);
break;
case Field.Machine_RelatedTo:
- if (negate)
- Machine_RelatedTo.NegativeSet.Add(value);
- else
- Machine_RelatedTo.PositiveSet.Add(value);
+ SetStringFilter(Machine_RelatedTo, value, negate);
break;
#endregion
@@ -579,24 +492,15 @@ namespace SabreTools.Library.Filtering
#region OpenMSX
case Field.Machine_GenMSXID:
- if (negate)
- Machine_GenMSXID.NegativeSet.Add(value);
- else
- Machine_GenMSXID.PositiveSet.Add(value);
+ SetStringFilter(Machine_GenMSXID, value, negate);
break;
case Field.Machine_System:
- if (negate)
- Machine_System.NegativeSet.Add(value);
- else
- Machine_System.PositiveSet.Add(value);
+ SetStringFilter(Machine_System, value, negate);
break;
case Field.Machine_Country:
- if (negate)
- Machine_Country.NegativeSet.Add(value);
- else
- Machine_Country.PositiveSet.Add(value);
+ SetStringFilter(Machine_Country, value, negate);
break;
#endregion
@@ -622,10 +526,7 @@ namespace SabreTools.Library.Filtering
if (value.AsItemType() == null)
return;
- if (negate)
- DatItem_Type.NegativeSet.Add(value);
- else
- DatItem_Type.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Type, value, negate);
break;
#endregion
@@ -636,148 +537,61 @@ namespace SabreTools.Library.Filtering
// Rom
case Field.DatItem_Name:
- if (negate)
- DatItem_Name.NegativeSet.Add(value);
- else
- DatItem_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Name, value, negate);
break;
case Field.DatItem_Bios:
- if (negate)
- DatItem_Bios.NegativeSet.Add(value);
- else
- DatItem_Bios.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Bios, value, negate);
break;
case Field.DatItem_Size:
- bool? sizeOperation = null;
- if (value.StartsWith(">"))
- sizeOperation = true;
- else if (value.StartsWith("<"))
- sizeOperation = false;
- else if (value.StartsWith("="))
- sizeOperation = null;
-
- string sizeString = value.TrimStart('>', '<', '=');
- if (!Int64.TryParse(sizeString, out long size))
- return;
-
- // Equal
- if (sizeOperation == null && !negate)
- {
- DatItem_Size.Neutral = size;
- }
-
- // Not Equal
- else if (sizeOperation == null && negate)
- {
- DatItem_Size.Negative = size - 1;
- DatItem_Size.Positive = size + 1;
- }
-
- // Greater Than or Equal
- else if (sizeOperation == true && !negate)
- {
- DatItem_Size.Positive = size;
- }
-
- // Strictly Less Than
- else if (sizeOperation == true && negate)
- {
- DatItem_Size.Negative = size - 1;
- }
-
- // Less Than or Equal
- else if (sizeOperation == false && !negate)
- {
- DatItem_Size.Negative = size;
- }
-
- // Strictly Greater Than
- else if (sizeOperation == false && negate)
- {
- DatItem_Size.Positive = size + 1;
- }
-
+ SetLongFilter(DatItem_Size, value, negate);
break;
case Field.DatItem_CRC:
- if (negate)
- DatItem_CRC.NegativeSet.Add(value);
- else
- DatItem_CRC.PositiveSet.Add(value);
+ SetStringFilter(DatItem_CRC, value, negate);
break;
case Field.DatItem_MD5:
- if (negate)
- DatItem_MD5.NegativeSet.Add(value);
- else
- DatItem_MD5.PositiveSet.Add(value);
+ SetStringFilter(DatItem_MD5, value, negate);
break;
#if NET_FRAMEWORK
case Field.DatItem_RIPEMD160:
- if (negate)
- DatItem_RIPEMD160.NegativeSet.Add(value);
- else
- DatItem_RIPEMD160.PositiveSet.Add(value);
+ SetStringFilter(DatItem_RIPEMD160, value, negate);
break;
#endif
case Field.DatItem_SHA1:
- if (negate)
- DatItem_SHA1.NegativeSet.Add(value);
- else
- DatItem_SHA1.PositiveSet.Add(value);
+ SetStringFilter(DatItem_SHA1, value, negate);
break;
case Field.DatItem_SHA256:
- if (negate)
- DatItem_SHA256.NegativeSet.Add(value);
- else
- DatItem_SHA256.PositiveSet.Add(value);
+ SetStringFilter(DatItem_SHA256, value, negate);
break;
case Field.DatItem_SHA384:
- if (negate)
- DatItem_SHA384.NegativeSet.Add(value);
- else
- DatItem_SHA384.PositiveSet.Add(value);
+ SetStringFilter(DatItem_SHA384, value, negate);
break;
case Field.DatItem_SHA512:
- if (negate)
- DatItem_SHA512.NegativeSet.Add(value);
- else
- DatItem_SHA512.PositiveSet.Add(value);
+ SetStringFilter(DatItem_SHA512, value, negate);
break;
case Field.DatItem_Merge:
- if (negate)
- DatItem_Merge.NegativeSet.Add(value);
- else
- DatItem_Merge.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Merge, value, negate);
break;
case Field.DatItem_Region:
- if (negate)
- DatItem_Region.NegativeSet.Add(value);
- else
- DatItem_Region.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Region, value, negate);
break;
case Field.DatItem_Offset:
- if (negate)
- DatItem_Offset.NegativeSet.Add(value);
- else
- DatItem_Offset.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Offset, value, negate);
break;
case Field.DatItem_Date:
- if (negate)
- DatItem_Date.NegativeSet.Add(value);
- else
- DatItem_Date.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Date, value, negate);
break;
case Field.DatItem_Status:
@@ -788,40 +602,25 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_Optional:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Optional.Neutral = false;
- else
- DatItem_Optional.Neutral = true;
+ SetBooleanFilter(DatItem_Optional, value, negate);
break;
case Field.DatItem_Inverted:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Inverted.Neutral = false;
- else
- DatItem_Inverted.Neutral = true;
+ SetBooleanFilter(DatItem_Inverted, value, negate);
break;
// Rom (AttractMode)
case Field.DatItem_AltName:
- if (negate)
- DatItem_AltName.NegativeSet.Add(value);
- else
- DatItem_AltName.PositiveSet.Add(value);
+ SetStringFilter(DatItem_AltName, value, negate);
break;
case Field.DatItem_AltTitle:
- if (negate)
- DatItem_AltTitle.NegativeSet.Add(value);
- else
- DatItem_AltTitle.PositiveSet.Add(value);
+ SetStringFilter(DatItem_AltTitle, value, negate);
break;
// Rom (OpenMSX)
case Field.DatItem_Original:
- if (negate)
- DatItem_Original.NegativeSet.Add(value);
- else
- DatItem_Original.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Original, value, negate);
break;
case Field.DatItem_OpenMSXSubType:
@@ -832,91 +631,28 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_OpenMSXType:
- if (negate)
- DatItem_OpenMSXType.NegativeSet.Add(value);
- else
- DatItem_OpenMSXType.PositiveSet.Add(value);
+ SetStringFilter(DatItem_OpenMSXType, value, negate);
break;
case Field.DatItem_Remark:
- if (negate)
- DatItem_Remark.NegativeSet.Add(value);
- else
- DatItem_Remark.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Remark, value, negate);
break;
case Field.DatItem_Boot:
- if (negate)
- DatItem_Boot.NegativeSet.Add(value);
- else
- DatItem_Boot.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Boot, value, negate);
break;
// Rom (SoftwareList)
case Field.DatItem_AreaName:
- if (negate)
- DatItem_AreaName.NegativeSet.Add(value);
- else
- DatItem_AreaName.PositiveSet.Add(value);
+ SetStringFilter(DatItem_AreaName, value, negate);
break;
case Field.DatItem_AreaSize:
- bool? asOperation = null;
- if (value.StartsWith(">"))
- asOperation = true;
- else if (value.StartsWith("<"))
- asOperation = false;
- else if (value.StartsWith("="))
- asOperation = null;
-
- string areasizeString = value.TrimStart('>', '<', '=');
- if (!Int64.TryParse(areasizeString, out long areasize))
- return;
-
- // Equal
- if (asOperation == null && !negate)
- {
- DatItem_AreaSize.Neutral = areasize;
- }
-
- // Not Equal
- else if (asOperation == null && negate)
- {
- DatItem_AreaSize.Negative = areasize - 1;
- DatItem_AreaSize.Positive = areasize + 1;
- }
-
- // Greater Than or Equal
- else if (asOperation == true && !negate)
- {
- DatItem_AreaSize.Positive = areasize;
- }
-
- // Strictly Less Than
- else if (asOperation == true && negate)
- {
- DatItem_AreaSize.Negative = areasize - 1;
- }
-
- // Less Than or Equal
- else if (asOperation == false && !negate)
- {
- DatItem_AreaSize.Negative = areasize;
- }
-
- // Strictly Greater Than
- else if (asOperation == false && negate)
- {
- DatItem_AreaSize.Positive = areasize + 1;
- }
-
+ SetOptionalLongFilter(DatItem_AreaSize, value, negate);
break;
case Field.DatItem_AreaWidth:
- if (negate)
- DatItem_AreaWidth.NegativeSet.Add(value);
- else
- DatItem_AreaWidth.PositiveSet.Add(value);
+ SetStringFilter(DatItem_AreaWidth, value, negate);
break;
case Field.DatItem_AreaEndianness:
@@ -934,53 +670,32 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_Part_Name:
- if (negate)
- DatItem_Part_Name.NegativeSet.Add(value);
- else
- DatItem_Part_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Part_Name, value, negate);
break;
case Field.DatItem_Part_Interface:
- if (negate)
- DatItem_Part_Interface.NegativeSet.Add(value);
- else
- DatItem_Part_Interface.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Part_Interface, value, negate);
break;
case Field.DatItem_Part_Feature_Name:
- if (negate)
- DatItem_Part_Feature_Name.NegativeSet.Add(value);
- else
- DatItem_Part_Feature_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Part_Feature_Name, value, negate);
break;
case Field.DatItem_Part_Feature_Value:
- if (negate)
- DatItem_Part_Feature_Value.NegativeSet.Add(value);
- else
- DatItem_Part_Feature_Value.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Part_Feature_Value, value, negate);
break;
case Field.DatItem_Value:
- if (negate)
- DatItem_Value.NegativeSet.Add(value);
- else
- DatItem_Value.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Value, value, negate);
break;
// Disk
case Field.DatItem_Index:
- if (negate)
- DatItem_Index.NegativeSet.Add(value);
- else
- DatItem_Index.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Index, value, negate);
break;
case Field.DatItem_Writable:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Writable.Neutral = false;
- else
- DatItem_Writable.Neutral = true;
+ SetBooleanFilter(DatItem_Writable, value, negate);
break;
#endregion
@@ -989,34 +704,22 @@ namespace SabreTools.Library.Filtering
// Adjuster
case Field.DatItem_Default:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Default.Neutral = false;
- else
- DatItem_Default.Neutral = true;
+ SetBooleanFilter(DatItem_Default, value, negate);
break;
// Analog
case Field.DatItem_Analog_Mask:
- if (negate)
- DatItem_Analog_Mask.NegativeSet.Add(value);
- else
- DatItem_Analog_Mask.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Analog_Mask, value, negate);
break;
// BiosSet
case Field.DatItem_Description:
- if (negate)
- DatItem_Description.NegativeSet.Add(value);
- else
- DatItem_Description.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Description, value, negate);
break;
// Chip
case Field.DatItem_Tag:
- if (negate)
- DatItem_Tag.NegativeSet.Add(value);
- else
- DatItem_Tag.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Tag, value, negate);
break;
case Field.DatItem_ChipType:
@@ -1027,18 +730,12 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_Clock:
- if (negate)
- DatItem_Clock.NegativeSet.Add(value);
- else
- DatItem_Clock.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Clock, value, negate);
break;
// Condition
case Field.DatItem_Mask:
- if (negate)
- DatItem_Mask.NegativeSet.Add(value);
- else
- DatItem_Mask.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Mask, value, negate);
break;
case Field.DatItem_Relation:
@@ -1049,17 +746,11 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_Condition_Tag:
- if (negate)
- DatItem_Condition_Tag.NegativeSet.Add(value);
- else
- DatItem_Condition_Tag.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Condition_Tag, value, negate);
break;
case Field.DatItem_Condition_Mask:
- if (negate)
- DatItem_Condition_Mask.NegativeSet.Add(value);
- else
- DatItem_Condition_Mask.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Condition_Mask, value, negate);
break;
case Field.DatItem_Condition_Relation:
@@ -1070,124 +761,73 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_Condition_Value:
- if (negate)
- DatItem_Condition_Value.NegativeSet.Add(value);
- else
- DatItem_Condition_Value.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Condition_Value, value, negate);
break;
// Control
case Field.DatItem_Control_Type:
- if (negate)
- DatItem_Control_Type.NegativeSet.Add(value);
- else
- DatItem_Control_Type.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Type, value, negate);
break;
case Field.DatItem_Control_Player:
- if (negate)
- DatItem_Control_Player.NegativeSet.Add(value);
- else
- DatItem_Control_Player.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Player, value, negate);
break;
case Field.DatItem_Control_Buttons:
- if (negate)
- DatItem_Control_Buttons.NegativeSet.Add(value);
- else
- DatItem_Control_Buttons.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Buttons, value, negate);
break;
case Field.DatItem_Control_RegButtons:
- if (negate)
- DatItem_Control_RegButtons.NegativeSet.Add(value);
- else
- DatItem_Control_RegButtons.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_RegButtons, value, negate);
break;
case Field.DatItem_Control_Minimum:
- if (negate)
- DatItem_Control_Minimum.NegativeSet.Add(value);
- else
- DatItem_Control_Minimum.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Minimum, value, negate);
break;
case Field.DatItem_Control_Maximum:
- if (negate)
- DatItem_Control_Maximum.NegativeSet.Add(value);
- else
- DatItem_Control_Maximum.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Maximum, value, negate);
break;
case Field.DatItem_Control_Sensitivity:
- if (negate)
- DatItem_Control_Sensitivity.NegativeSet.Add(value);
- else
- DatItem_Control_Sensitivity.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Sensitivity, value, negate);
break;
case Field.DatItem_Control_KeyDelta:
- if (negate)
- DatItem_Control_KeyDelta.NegativeSet.Add(value);
- else
- DatItem_Control_KeyDelta.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_KeyDelta, value, negate);
break;
case Field.DatItem_Control_Reverse:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Control_Reverse.Neutral = false;
- else
- DatItem_Control_Reverse.Neutral = true;
+ SetBooleanFilter(DatItem_Control_Reverse, value, negate);
break;
case Field.DatItem_Control_Ways:
- if (negate)
- DatItem_Control_Ways.NegativeSet.Add(value);
- else
- DatItem_Control_Ways.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Ways, value, negate);
break;
case Field.DatItem_Control_Ways2:
- if (negate)
- DatItem_Control_Ways2.NegativeSet.Add(value);
- else
- DatItem_Control_Ways2.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Ways2, value, negate);
break;
case Field.DatItem_Control_Ways3:
- if (negate)
- DatItem_Control_Ways3.NegativeSet.Add(value);
- else
- DatItem_Control_Ways3.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Control_Ways3, value, negate);
break;
// Device
case Field.DatItem_DeviceType:
- if (negate)
- DatItem_DeviceType.NegativeSet.Add(value);
- else
- DatItem_DeviceType.PositiveSet.Add(value);
+ SetStringFilter(DatItem_DeviceType, value, negate);
break;
case Field.DatItem_FixedImage:
- if (negate)
- DatItem_FixedImage.NegativeSet.Add(value);
- else
- DatItem_FixedImage.PositiveSet.Add(value);
+ SetStringFilter(DatItem_FixedImage, value, negate);
break;
case Field.DatItem_Mandatory:
- if (negate)
- DatItem_Mandatory.NegativeSet.Add(value);
- else
- DatItem_Mandatory.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Mandatory, value, negate);
break;
case Field.DatItem_Interface:
- if (negate)
- DatItem_Interface.NegativeSet.Add(value);
- else
- DatItem_Interface.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Interface, value, negate);
break;
// Display
@@ -1199,87 +839,51 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_Rotate:
- if (negate)
- DatItem_Rotate.NegativeSet.Add(value);
- else
- DatItem_Rotate.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Rotate, value, negate);
break;
case Field.DatItem_FlipX:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_FlipX.Neutral = false;
- else
- DatItem_FlipX.Neutral = true;
+ SetBooleanFilter(DatItem_FlipX, value, negate);
break;
case Field.DatItem_Width:
- if (negate)
- DatItem_Width.NegativeSet.Add(value);
- else
- DatItem_Width.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Width, value, negate);
break;
case Field.DatItem_Height:
- if (negate)
- DatItem_Height.NegativeSet.Add(value);
- else
- DatItem_Height.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Height, value, negate);
break;
case Field.DatItem_Refresh:
- if (negate)
- DatItem_Refresh.NegativeSet.Add(value);
- else
- DatItem_Refresh.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Refresh, value, negate);
break;
case Field.DatItem_PixClock:
- if (negate)
- DatItem_PixClock.NegativeSet.Add(value);
- else
- DatItem_PixClock.PositiveSet.Add(value);
+ SetStringFilter(DatItem_PixClock, value, negate);
break;
case Field.DatItem_HTotal:
- if (negate)
- DatItem_HTotal.NegativeSet.Add(value);
- else
- DatItem_HTotal.PositiveSet.Add(value);
+ SetStringFilter(DatItem_HTotal, value, negate);
break;
case Field.DatItem_HBEnd:
- if (negate)
- DatItem_HBEnd.NegativeSet.Add(value);
- else
- DatItem_HBEnd.PositiveSet.Add(value);
+ SetStringFilter(DatItem_HBEnd, value, negate);
break;
case Field.DatItem_HBStart:
- if (negate)
- DatItem_HBStart.NegativeSet.Add(value);
- else
- DatItem_HBStart.PositiveSet.Add(value);
+ SetStringFilter(DatItem_HBStart, value, negate);
break;
case Field.DatItem_VTotal:
- if (negate)
- DatItem_VTotal.NegativeSet.Add(value);
- else
- DatItem_VTotal.PositiveSet.Add(value);
+ SetStringFilter(DatItem_VTotal, value, negate);
break;
case Field.DatItem_VBEnd:
- if (negate)
- DatItem_VBEnd.NegativeSet.Add(value);
- else
- DatItem_VBEnd.PositiveSet.Add(value);
+ SetStringFilter(DatItem_VBEnd, value, negate);
break;
case Field.DatItem_VBStart:
- if (negate)
- DatItem_VBStart.NegativeSet.Add(value);
- else
- DatItem_VBStart.PositiveSet.Add(value);
+ SetStringFilter(DatItem_VBStart, value, negate);
break;
// Driver
@@ -1313,10 +917,7 @@ namespace SabreTools.Library.Filtering
// Extension
case Field.DatItem_Extension_Name:
- if (negate)
- DatItem_Extension_Name.NegativeSet.Add(value);
- else
- DatItem_Extension_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Extension_Name, value, negate);
break;
// Feature
@@ -1343,218 +944,77 @@ namespace SabreTools.Library.Filtering
// Input
case Field.DatItem_Service:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Service.Neutral = false;
- else
- DatItem_Service.Neutral = true;
+ SetBooleanFilter(DatItem_Service, value, negate);
break;
case Field.DatItem_Tilt:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Tilt.Neutral = false;
- else
- DatItem_Tilt.Neutral = true;
+ SetBooleanFilter(DatItem_Tilt, value, negate);
break;
case Field.DatItem_Players:
- bool? playersOperation = null;
- if (value.StartsWith(">"))
- playersOperation = true;
- else if (value.StartsWith("<"))
- playersOperation = false;
- else if (value.StartsWith("="))
- playersOperation = null;
-
- string playersString = value.TrimStart('>', '<', '=');
- if (!Int64.TryParse(playersString, out long players))
- return;
-
- // Equal
- if (playersOperation == null && !negate)
- {
- DatItem_Players.Neutral = players;
- }
-
- // Not Equal
- else if (playersOperation == null && negate)
- {
- DatItem_Players.Negative = players - 1;
- DatItem_Players.Positive = players + 1;
- }
-
- // Greater Than or Equal
- else if (playersOperation == true && !negate)
- {
- DatItem_Players.Positive = players;
- }
-
- // Strictly Less Than
- else if (playersOperation == true && negate)
- {
- DatItem_Players.Negative = players - 1;
- }
-
- // Less Than or Equal
- else if (playersOperation == false && !negate)
- {
- DatItem_Players.Negative = players;
- }
-
- // Strictly Greater Than
- else if (playersOperation == false && negate)
- {
- DatItem_Players.Positive = players + 1;
- }
-
+ SetOptionalLongFilter(DatItem_Players, value, negate);
break;
case Field.DatItem_Coins:
- bool? coinsOperation = null;
- if (value.StartsWith(">"))
- coinsOperation = true;
- else if (value.StartsWith("<"))
- coinsOperation = false;
- else if (value.StartsWith("="))
- coinsOperation = null;
-
- string coinsString = value.TrimStart('>', '<', '=');
- if (!Int64.TryParse(coinsString, out long coins))
- return;
-
- // Equal
- if (coinsOperation == null && !negate)
- {
- DatItem_Coins.Neutral = coins;
- }
-
- // Not Equal
- else if (coinsOperation == null && negate)
- {
- DatItem_Coins.Negative = coins - 1;
- DatItem_Coins.Positive = coins + 1;
- }
-
- // Greater Than or Equal
- else if (coinsOperation == true && !negate)
- {
- DatItem_Coins.Positive = coins;
- }
-
- // Strictly Less Than
- else if (coinsOperation == true && negate)
- {
- DatItem_Coins.Negative = coins - 1;
- }
-
- // Less Than or Equal
- else if (coinsOperation == false && !negate)
- {
- DatItem_Coins.Negative = coins;
- }
-
- // Strictly Greater Than
- else if (coinsOperation == false && negate)
- {
- DatItem_Coins.Positive = coins + 1;
- }
-
+ SetOptionalLongFilter(DatItem_Coins, value, negate);
break;
// Instance
case Field.DatItem_Instance_Name:
- if (negate)
- DatItem_Instance_Name.NegativeSet.Add(value);
- else
- DatItem_Instance_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Instance_Name, value, negate);
break;
case Field.DatItem_Instance_BriefName:
- if (negate)
- DatItem_Instance_BriefName.NegativeSet.Add(value);
- else
- DatItem_Instance_BriefName.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Instance_BriefName, value, negate);
break;
// Location
case Field.DatItem_Location_Name:
- if (negate)
- DatItem_Location_Name.NegativeSet.Add(value);
- else
- DatItem_Location_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Location_Name, value, negate);
break;
case Field.DatItem_Location_Number:
- if (negate)
- DatItem_Location_Number.NegativeSet.Add(value);
- else
- DatItem_Location_Number.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Location_Number, value, negate);
break;
case Field.DatItem_Location_Inverted:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Location_Inverted.Neutral = false;
- else
- DatItem_Location_Inverted.Neutral = true;
+ SetBooleanFilter(DatItem_Location_Inverted, value, negate);
break;
// RamOption
case Field.DatItem_Content:
- if (negate)
- DatItem_Content.NegativeSet.Add(value);
- else
- DatItem_Content.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Content, value, negate);
break;
// Release
case Field.DatItem_Language:
- if (negate)
- DatItem_Language.NegativeSet.Add(value);
- else
- DatItem_Language.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Language, value, negate);
break;
// Setting
case Field.DatItem_Setting_Name:
- if (negate)
- DatItem_Setting_Name.NegativeSet.Add(value);
- else
- DatItem_Setting_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Setting_Name, value, negate);
break;
case Field.DatItem_Setting_Value:
- if (negate)
- DatItem_Setting_Value.NegativeSet.Add(value);
- else
- DatItem_Setting_Value.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Setting_Value, value, negate);
break;
case Field.DatItem_Setting_Default:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_Setting_Default.Neutral = false;
- else
- DatItem_Setting_Default.Neutral = true;
+ SetBooleanFilter(DatItem_Setting_Default, value, negate);
break;
// SlotOption
case Field.DatItem_SlotOption_Name:
- if (negate)
- DatItem_SlotOption_Name.NegativeSet.Add(value);
- else
- DatItem_SlotOption_Name.PositiveSet.Add(value);
+ SetStringFilter(DatItem_SlotOption_Name, value, negate);
break;
case Field.DatItem_SlotOption_DeviceName:
- if (negate)
- DatItem_SlotOption_DeviceName.NegativeSet.Add(value);
- else
- DatItem_SlotOption_DeviceName.PositiveSet.Add(value);
+ SetStringFilter(DatItem_SlotOption_DeviceName, value, negate);
break;
case Field.DatItem_SlotOption_Default:
- if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
- DatItem_SlotOption_Default.Neutral = false;
- else
- DatItem_SlotOption_Default.Neutral = true;
+ SetBooleanFilter(DatItem_SlotOption_Default, value, negate);
break;
// SoftwareList
@@ -1566,63 +1026,12 @@ namespace SabreTools.Library.Filtering
break;
case Field.DatItem_Filter:
- if (negate)
- DatItem_Filter.NegativeSet.Add(value);
- else
- DatItem_Filter.PositiveSet.Add(value);
+ SetStringFilter(DatItem_Filter, value, negate);
break;
// Sound
case Field.DatItem_Channels:
- bool? channelsOperation = null;
- if (value.StartsWith(">"))
- channelsOperation = true;
- else if (value.StartsWith("<"))
- channelsOperation = false;
- else if (value.StartsWith("="))
- channelsOperation = null;
-
- string channelsString = value.TrimStart('>', '<', '=');
- if (!Int64.TryParse(channelsString, out long channels))
- return;
-
- // Equal
- if (channelsOperation == null && !negate)
- {
- DatItem_Channels.Neutral = channels;
- }
-
- // Not Equal
- else if (channelsOperation == null && negate)
- {
- DatItem_Channels.Negative = channels - 1;
- DatItem_Channels.Positive = channels + 1;
- }
-
- // Greater Than or Equal
- else if (channelsOperation == true && !negate)
- {
- DatItem_Channels.Positive = channels;
- }
-
- // Strictly Less Than
- else if (channelsOperation == true && negate)
- {
- DatItem_Channels.Negative = channels - 1;
- }
-
- // Less Than or Equal
- else if (channelsOperation == false && !negate)
- {
- DatItem_Channels.Negative = channels;
- }
-
- // Strictly Greater Than
- else if (channelsOperation == false && negate)
- {
- DatItem_Channels.Positive = channels + 1;
- }
-
+ SetOptionalLongFilter(DatItem_Channels, value, negate);
break;
#endregion
@@ -1633,6 +1042,151 @@ namespace SabreTools.Library.Filtering
}
}
+ ///
+ /// Set a bool? filter
+ ///
+ /// FilterItem to populate
+ /// String value to add
+ /// True to set negative filter, false otherwise
+ private void SetBooleanFilter(FilterItem filterItem, string value, bool negate)
+ {
+ if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
+ filterItem.Neutral = false;
+ else
+ filterItem.Neutral = true;
+ }
+
+ ///
+ /// Set a long filter
+ ///
+ /// FilterItem to populate
+ /// String value to add
+ /// True to set negative filter, false otherwise
+ /// TODO: Can anything using this go with SetOptionalLongFilter instead?
+ private void SetLongFilter(FilterItem filterItem, string value, bool negate)
+ {
+ bool? operation = null;
+ if (value.StartsWith(">"))
+ operation = true;
+ else if (value.StartsWith("<"))
+ operation = false;
+ else if (value.StartsWith("="))
+ operation = null;
+
+ string valueString = value.TrimStart('>', '<', '=');
+ if (!Int64.TryParse(valueString, out long valueLong))
+ return;
+
+ // Equal
+ if (operation == null && !negate)
+ {
+ filterItem.Neutral = valueLong;
+ }
+
+ // Not Equal
+ else if (operation == null && negate)
+ {
+ filterItem.Negative = valueLong - 1;
+ filterItem.Positive = valueLong + 1;
+ }
+
+ // Greater Than or Equal
+ else if (operation == true && !negate)
+ {
+ filterItem.Positive = valueLong;
+ }
+
+ // Strictly Less Than
+ else if (operation == true && negate)
+ {
+ filterItem.Negative = valueLong - 1;
+ }
+
+ // Less Than or Equal
+ else if (operation == false && !negate)
+ {
+ filterItem.Negative = valueLong;
+ }
+
+ // Strictly Greater Than
+ else if (operation == false && negate)
+ {
+ filterItem.Positive = valueLong + 1;
+ }
+ }
+
+ ///
+ /// Set a long? filter
+ ///
+ /// FilterItem to populate
+ /// String value to add
+ /// True to set negative filter, false otherwise
+ private void SetOptionalLongFilter(FilterItem filterItem, string value, bool negate)
+ {
+ bool? operation = null;
+ if (value.StartsWith(">"))
+ operation = true;
+ else if (value.StartsWith("<"))
+ operation = false;
+ else if (value.StartsWith("="))
+ operation = null;
+
+ string valueString = value.TrimStart('>', '<', '=');
+ if (!Int64.TryParse(valueString, out long valueLong))
+ return;
+
+ // Equal
+ if (operation == null && !negate)
+ {
+ filterItem.Neutral = valueLong;
+ }
+
+ // Not Equal
+ else if (operation == null && negate)
+ {
+ filterItem.Negative = valueLong - 1;
+ filterItem.Positive = valueLong + 1;
+ }
+
+ // Greater Than or Equal
+ else if (operation == true && !negate)
+ {
+ filterItem.Positive = valueLong;
+ }
+
+ // Strictly Less Than
+ else if (operation == true && negate)
+ {
+ filterItem.Negative = valueLong - 1;
+ }
+
+ // Less Than or Equal
+ else if (operation == false && !negate)
+ {
+ filterItem.Negative = valueLong;
+ }
+
+ // Strictly Greater Than
+ else if (operation == false && negate)
+ {
+ filterItem.Positive = valueLong + 1;
+ }
+ }
+
+ ///
+ /// Set a string filter
+ ///
+ /// FilterItem to populate
+ /// String value to add
+ /// True to set negative filter, false otherwise
+ private void SetStringFilter(FilterItem filterItem, string value, bool negate)
+ {
+ if (negate)
+ filterItem.NegativeSet.Add(value);
+ else
+ filterItem.PositiveSet.Add(value);
+ }
+
#endregion
#endregion // Instance Methods