Reads score operation as structure.

This commit is contained in:
2022-11-11 00:34:30 +08:00
parent c33186086c
commit 296d5bb615
3 changed files with 16 additions and 4 deletions

View File

@@ -11,7 +11,6 @@ namespace Cryville.Common {
Key = IdentifierManager.SharedInstance.Request(name);
}
public override bool Equals(object obj) {
if (obj == null && Key == 0) return true;
if (obj == null || !(obj is Identifier)) return false;
return Equals((Identifier)obj);
}
@@ -22,6 +21,7 @@ namespace Cryville.Common {
return Key;
}
public override string ToString() {
if (Key == 0) return "";
return Name.ToString();
}
public static implicit operator Identifier(string identifier) {

View File

@@ -53,11 +53,15 @@ namespace Cryville.Crtr {
public PdtExpression hit;
public Identifier[] pass;
public Identifier miss;
public Dictionary<Identifier, PdtExpression> scores;
public Dictionary<ScoreOperation, PdtExpression> scores;
}
public class ScoreOperation {
public int name;
public PdtOperator op;
public Identifier name;
public Identifier op;
public override string ToString() {
if (op == default(Identifier)) return name.ToString();
else return string.Format("{0} {1}", name, op);
}
}
public class ScoreDefinition {
public PdtExpression value;

View File

@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using SIdentifier = Cryville.Common.Identifier;
namespace Cryville.Crtr {
@@ -163,6 +164,13 @@ namespace Cryville.Crtr {
if (type.Equals(typeof(Identifier))) {
return (Identifier)exp;
}
else if (type == typeof(ScoreOperation)) {
var m = Regex.Match(exp, @"^(\S+)\s*?(\S+)?$");
var name = new Identifier(m.Groups[1].Value);
if (!m.Groups[2].Success) return new ScoreOperation { name = name };
var op = new Identifier(m.Groups[2].Value);
return new ScoreOperation { name = name, op = op };
}
}
return base.ChangeType(value, type, culture);
}