mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add and use Relation enum
This commit is contained in:
@@ -3545,6 +3545,7 @@ namespace SabreTools.Library.DatFiles
|
||||
.Replace("%size%", size);
|
||||
|
||||
// TODO: Add GameName logic here too?
|
||||
// TODO: Figure out what I meant by the above ^
|
||||
|
||||
return fix;
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ namespace SabreTools.Library.DatFiles
|
||||
{
|
||||
Tag = reader.GetAttribute("tag"),
|
||||
Mask = reader.GetAttribute("mask"),
|
||||
Relation = reader.GetAttribute("relation"),
|
||||
Relation = reader.GetAttribute("relation").AsRelation(),
|
||||
Value = reader.GetAttribute("value"),
|
||||
|
||||
Source = new Source
|
||||
@@ -746,7 +746,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
dipSwitch.Conditions.Add(condition);
|
||||
@@ -820,7 +820,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
dipValue.Conditions.Add(condition);
|
||||
@@ -870,7 +870,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
configuration.Conditions.Add(condition);
|
||||
@@ -944,7 +944,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
confSetting.Conditions.Add(condition);
|
||||
@@ -1037,7 +1037,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
adjuster.Conditions.Add(condition);
|
||||
@@ -1320,7 +1320,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", adjusterCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", adjusterCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", adjusterCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", adjusterCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", adjusterCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
@@ -1352,7 +1352,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", condition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", condition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", condition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", condition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", condition.Value);
|
||||
xtw.WriteEndElement();
|
||||
break;
|
||||
@@ -1371,7 +1371,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", configurationCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", configurationCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", configurationCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", configurationCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", configurationCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
@@ -1451,7 +1451,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", dipSwitchCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", dipSwitchCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", dipSwitchCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", dipSwitchCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", dipSwitchCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
@@ -1482,7 +1482,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", dipValueCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", dipValueCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", dipValueCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", dipValueCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", dipValueCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ namespace SabreTools.Library.DatFiles
|
||||
/// <summary>
|
||||
/// Represents parsing and writing of a Logiqx-derived DAT
|
||||
/// </summary>
|
||||
/// TODO: Add XSD validation for all XML DAT types (maybe?)
|
||||
internal class Logiqx : DatFile
|
||||
{
|
||||
// Private instance variables specific to Logiqx DATs
|
||||
|
||||
@@ -664,7 +664,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
(adjuster as Adjuster).Conditions.Add(condition);
|
||||
@@ -718,7 +718,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
(configuration as Configuration).Conditions.Add(condition);
|
||||
@@ -792,7 +792,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
confSetting.Conditions.Add(condition);
|
||||
@@ -846,7 +846,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
(dipSwitch as DipSwitch).Conditions.Add(condition);
|
||||
@@ -920,7 +920,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var condition = new Condition();
|
||||
condition.Tag = reader.GetAttribute("tag");
|
||||
condition.Mask = reader.GetAttribute("mask");
|
||||
condition.Relation = reader.GetAttribute("relation");
|
||||
condition.Relation = reader.GetAttribute("relation").AsRelation();
|
||||
condition.Value = reader.GetAttribute("value");
|
||||
|
||||
dipValue.Conditions.Add(condition);
|
||||
@@ -1221,7 +1221,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", adjusterCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", adjusterCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", adjusterCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", adjusterCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", adjusterCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
@@ -1264,7 +1264,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteAttributeString("type", "condition");
|
||||
xtw.WriteOptionalAttributeString("tag", condition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", condition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", condition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", condition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", condition.Value);
|
||||
xtw.WriteEndElement();
|
||||
break;
|
||||
@@ -1284,7 +1284,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", configurationCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", configurationCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", configurationCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", configurationCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", configurationCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
@@ -1367,7 +1367,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", dipSwitchCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", dipSwitchCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", dipSwitchCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", dipSwitchCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", dipSwitchCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
@@ -1398,7 +1398,7 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteStartElement("condition");
|
||||
xtw.WriteOptionalAttributeString("tag", dipValueCondition.Tag);
|
||||
xtw.WriteOptionalAttributeString("mask", dipValueCondition.Mask);
|
||||
xtw.WriteOptionalAttributeString("relation", dipValueCondition.Relation);
|
||||
xtw.WriteOptionalAttributeString("relation", dipValueCondition.Relation.FromRelation());
|
||||
xtw.WriteOptionalAttributeString("value", dipValueCondition.Value);
|
||||
xtw.WriteEndElement();
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace SabreTools.Library.DatItems
|
||||
public long? Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Byte width of the area
|
||||
/// Word width for the area
|
||||
/// </summary>
|
||||
[JsonProperty("width", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Width { get; set; } // TODO: (8|16|32|64) "8"
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
using System.Linq;
|
||||
|
||||
using SabreTools.Library.Filtering;
|
||||
using SabreTools.Library.Tools;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace SabreTools.Library.DatItems
|
||||
{
|
||||
@@ -30,7 +32,8 @@ namespace SabreTools.Library.DatItems
|
||||
/// Condition relationship
|
||||
/// </summary>
|
||||
[JsonProperty("relation", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public string Relation { get; set; } // TODO: (eq|ne|gt|le|lt|ge)
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public Relation Relation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Condition value
|
||||
@@ -71,7 +74,7 @@ namespace SabreTools.Library.DatItems
|
||||
Mask = mappings[Field.DatItem_Condition_Mask];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatItem_Condition_Relation))
|
||||
Relation = mappings[Field.DatItem_Condition_Relation];
|
||||
Relation = mappings[Field.DatItem_Condition_Relation].AsRelation();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatItem_Condition_Value))
|
||||
Value = mappings[Field.DatItem_Condition_Value];
|
||||
@@ -85,7 +88,7 @@ namespace SabreTools.Library.DatItems
|
||||
Mask = mappings[Field.DatItem_Mask];
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatItem_Relation))
|
||||
Relation = mappings[Field.DatItem_Relation];
|
||||
Relation = mappings[Field.DatItem_Relation].AsRelation();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatItem_Value))
|
||||
Value = mappings[Field.DatItem_Value];
|
||||
@@ -187,9 +190,9 @@ namespace SabreTools.Library.DatItems
|
||||
return false;
|
||||
|
||||
// Filter on relation
|
||||
if (filter.DatItem_Condition_Relation.MatchesPositiveSet(Relation) == false)
|
||||
if (filter.DatItem_Condition_Relation.MatchesPositive(Relation.NULL, Relation) == false)
|
||||
return false;
|
||||
if (filter.DatItem_Condition_Relation.MatchesNegativeSet(Relation) == true)
|
||||
if (filter.DatItem_Condition_Relation.MatchesNegative(Relation.NULL, Relation) == true)
|
||||
return false;
|
||||
|
||||
// Filter on value
|
||||
@@ -213,9 +216,9 @@ namespace SabreTools.Library.DatItems
|
||||
return false;
|
||||
|
||||
// Filter on relation
|
||||
if (filter.DatItem_Relation.MatchesPositiveSet(Relation) == false)
|
||||
if (filter.DatItem_Relation.MatchesPositive(Relation.NULL, Relation) == false)
|
||||
return false;
|
||||
if (filter.DatItem_Relation.MatchesNegativeSet(Relation) == true)
|
||||
if (filter.DatItem_Relation.MatchesNegative(Relation.NULL, Relation) == true)
|
||||
return false;
|
||||
|
||||
// Filter on value
|
||||
@@ -257,7 +260,7 @@ namespace SabreTools.Library.DatItems
|
||||
Mask = null;
|
||||
|
||||
if (fields.Contains(Field.DatItem_Condition_Relation))
|
||||
Relation = null;
|
||||
Relation = Relation.NULL;
|
||||
|
||||
if (fields.Contains(Field.DatItem_Condition_Value))
|
||||
Value = null;
|
||||
@@ -271,7 +274,7 @@ namespace SabreTools.Library.DatItems
|
||||
Mask = null;
|
||||
|
||||
if (fields.Contains(Field.DatItem_Relation))
|
||||
Relation = null;
|
||||
Relation = Relation.NULL;
|
||||
|
||||
if (fields.Contains(Field.DatItem_Value))
|
||||
Value = null;
|
||||
|
||||
@@ -560,6 +560,25 @@ namespace SabreTools.Library.DatItems
|
||||
SCCPlusCart = 1 << 2,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine relation of value to condition
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum Relation
|
||||
{
|
||||
/// <summary>
|
||||
/// This is a fake flag that is used for filter only
|
||||
/// </summary>
|
||||
NULL = 0,
|
||||
|
||||
Equal = 1 << 0,
|
||||
NotEqual = 1 << 1,
|
||||
GreaterThan = 1 << 2,
|
||||
LessThanOrEqual = 1 << 3,
|
||||
LessThan = 1 << 4,
|
||||
GreaterThanOrEqual = 1 << 5,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine machine runnable status
|
||||
/// </summary>
|
||||
|
||||
@@ -169,10 +169,10 @@ namespace SabreTools.Library.Filtering
|
||||
|
||||
// Condition
|
||||
public FilterItem<string> DatItem_Mask { get; private set; } = new FilterItem<string>();
|
||||
public FilterItem<string> DatItem_Relation { get; private set; } = new FilterItem<string>();
|
||||
public FilterItem<Relation> DatItem_Relation { get; private set; } = new FilterItem<Relation>() { Positive = Relation.NULL, Negative = Relation.NULL };
|
||||
public FilterItem<string> DatItem_Condition_Tag { get; private set; } = new FilterItem<string>();
|
||||
public FilterItem<string> DatItem_Condition_Mask { get; private set; } = new FilterItem<string>();
|
||||
public FilterItem<string> DatItem_Condition_Relation { get; private set; } = new FilterItem<string>();
|
||||
public FilterItem<Relation> DatItem_Condition_Relation { get; private set; } = new FilterItem<Relation>() { Positive = Relation.NULL, Negative = Relation.NULL };
|
||||
public FilterItem<string> DatItem_Condition_Value { get; private set; } = new FilterItem<string>();
|
||||
|
||||
// Control
|
||||
@@ -1043,9 +1043,9 @@ namespace SabreTools.Library.Filtering
|
||||
|
||||
case Field.DatItem_Relation:
|
||||
if (negate)
|
||||
DatItem_Relation.NegativeSet.Add(value);
|
||||
DatItem_Relation.Negative |= value.AsRelation();
|
||||
else
|
||||
DatItem_Relation.PositiveSet.Add(value);
|
||||
DatItem_Relation.Positive |= value.AsRelation();
|
||||
break;
|
||||
|
||||
case Field.DatItem_Condition_Tag:
|
||||
@@ -1064,9 +1064,9 @@ namespace SabreTools.Library.Filtering
|
||||
|
||||
case Field.DatItem_Condition_Relation:
|
||||
if (negate)
|
||||
DatItem_Condition_Relation.NegativeSet.Add(value);
|
||||
DatItem_Condition_Relation.Negative |= value.AsRelation();
|
||||
else
|
||||
DatItem_Condition_Relation.PositiveSet.Add(value);
|
||||
DatItem_Condition_Relation.Positive |= value.AsRelation();
|
||||
break;
|
||||
|
||||
case Field.DatItem_Condition_Value:
|
||||
|
||||
@@ -1971,6 +1971,45 @@ namespace SabreTools.Library.Tools
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Relation value from input string
|
||||
/// </summary>
|
||||
/// <param name="relation">String to get value from</param>
|
||||
/// <returns>Relation value corresponding to the string</returns>
|
||||
public static Relation AsRelation(this string relation)
|
||||
{
|
||||
#if NET_FRAMEWORK
|
||||
switch (relation?.ToLowerInvariant())
|
||||
{
|
||||
case "eq":
|
||||
return Relation.Equal;
|
||||
case "ne":
|
||||
return Relation.NotEqual;
|
||||
case "gt":
|
||||
return Relation.GreaterThan;
|
||||
case "le":
|
||||
return Relation.LessThanOrEqual;
|
||||
case "lt":
|
||||
return Relation.LessThan;
|
||||
case "ge":
|
||||
return Relation.GreaterThanOrEqual;
|
||||
default:
|
||||
return Relation.NULL;
|
||||
}
|
||||
#else
|
||||
return relation?.ToLowerInvariant() switch
|
||||
{
|
||||
"eq" => Relation.Equal,
|
||||
"ne" => Relation.NotEqual,
|
||||
"gt" => Relation.GreaterThan,
|
||||
"le" => Relation.LessThanOrEqual,
|
||||
"lt" => Relation.LessThan,
|
||||
"ge" => Relation.GreaterThanOrEqual,
|
||||
_ => Relation.NULL,
|
||||
};
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Runnable value from input string
|
||||
/// </summary>
|
||||
@@ -2784,6 +2823,45 @@ namespace SabreTools.Library.Tools
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get string value from input Relation
|
||||
/// </summary>
|
||||
/// <param name="relation">Relation to get value from</param>
|
||||
/// <returns>String value corresponding to the Relation</returns>
|
||||
public static string FromRelation(this Relation relation)
|
||||
{
|
||||
#if NET_FRAMEWORK
|
||||
switch (relation)
|
||||
{
|
||||
case Relation.Equal:
|
||||
return "eq";
|
||||
case Relation.NotEqual:
|
||||
return "ne";
|
||||
case Relation.GreaterThan:
|
||||
return "gt";
|
||||
case Relation.LessThanOrEqual:
|
||||
return "le";
|
||||
case Relation.LessThan:
|
||||
return "lt";
|
||||
case Relation.GreaterThanOrEqual:
|
||||
return "ge";
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
#else
|
||||
return relation switch
|
||||
{
|
||||
Relation.Equal => "eq",
|
||||
Relation.NotEqual => "ne",
|
||||
Relation.GreaterThan => "gt",
|
||||
Relation.LessThanOrEqual => "le",
|
||||
Relation.LessThan => "lt",
|
||||
Relation.GreaterThanOrEqual => "ge",
|
||||
_ => null,
|
||||
};
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get string value from input Runnable
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user