From b78e99c59cb7d1a52a0c5e88f11f0e6463fd74bd Mon Sep 17 00:00:00 2001 From: PopSlime Date: Mon, 31 Jul 2023 15:12:41 +0800 Subject: [PATCH] Reconstruct property sources and operators to generic types. --- Assets/Cryville/Crtr/InputProxy.cs | 4 +- Assets/Cryville/Crtr/Motion.cs | 11 ++--- Assets/Cryville/Crtr/PropOp.cs | 77 +++++++++++++----------------- Assets/Cryville/Crtr/PropSrc.cs | 38 +++++++-------- 4 files changed, 57 insertions(+), 73 deletions(-) diff --git a/Assets/Cryville/Crtr/InputProxy.cs b/Assets/Cryville/Crtr/InputProxy.cs index fc9d08a..1d8afa5 100644 --- a/Assets/Cryville/Crtr/InputProxy.cs +++ b/Assets/Cryville/Crtr/InputProxy.cs @@ -197,8 +197,8 @@ namespace Cryville.Crtr { const int MAX_DIMENSION = 4; readonly InputVectorSrc[] _vecsrcs = new InputVectorSrc[MAX_DEPTH + 1]; readonly InputVectorOp[] _vecops = new InputVectorOp[MAX_DEPTH + 1]; - unsafe class InputVectorSrc : PropSrc.FixedBuffer { - public InputVectorSrc() : base(PdtInternalType.Vector, MAX_DIMENSION * sizeof(float) + sizeof(int)) { + unsafe class InputVectorSrc : PropSrc.FixedBuffer { + public InputVectorSrc() : base(PdtInternalType.Vector, MAX_DIMENSION * sizeof(float) + sizeof(int), null) { fixed (byte* ptr = buf) { *(int*)(ptr + MAX_DIMENSION * sizeof(float)) = PdtInternalType.Number; } diff --git a/Assets/Cryville/Crtr/Motion.cs b/Assets/Cryville/Crtr/Motion.cs index 39e7ece..5f5af8d 100644 --- a/Assets/Cryville/Crtr/Motion.cs +++ b/Assets/Cryville/Crtr/Motion.cs @@ -455,11 +455,9 @@ namespace Cryville.Crtr { } } - public unsafe class VectorSrc : PropSrc.FixedBuffer { + public unsafe class VectorSrc : PropSrc.FixedBuffer { const int MAX_DIMENSION = 4; - protected readonly Func _cb; - public VectorSrc(Func cb) : base(PdtInternalType.Vector, MAX_DIMENSION * sizeof(float) + sizeof(int)) { - _cb = cb; + public VectorSrc(Func cb) : base(PdtInternalType.Vector, MAX_DIMENSION * sizeof(float) + sizeof(int), cb) { fixed (byte* rptr = buf) { var ptr = (float*)rptr; *(int*)(ptr + MAX_DIMENSION) = PdtInternalType.Number; @@ -475,9 +473,8 @@ namespace Cryville.Crtr { } } - public class VectorOp : PropOp { - readonly Action _cb; - public VectorOp(Action cb) { _cb = cb; } + public class VectorOp : PropOp.Fixed { + public VectorOp(Action cb) : base(cb) { } protected override unsafe void Execute() { var op = GetOperand(0); float[] values; diff --git a/Assets/Cryville/Crtr/PropOp.cs b/Assets/Cryville/Crtr/PropOp.cs index b1084fc..be2bc60 100644 --- a/Assets/Cryville/Crtr/PropOp.cs +++ b/Assets/Cryville/Crtr/PropOp.cs @@ -24,46 +24,45 @@ namespace Cryville.Crtr { PdtEvaluator.Instance.ContextCascadeUpdate(Name, new PropSrc.Arbitrary(op.Type, value)); } } - public class Boolean : PropOp { - readonly Action _cb; - public Boolean(Action cb) { _cb = cb; } + public abstract class Fixed : PropOp { + protected readonly Action _cb; + public Fixed(Action cb) { _cb = cb; } + public Fixed(int pc, Action cb) : base(pc) { _cb = cb; } + } + public class Boolean : Fixed { + public Boolean(Action cb) : base(cb) { } protected override void Execute() { _cb(GetOperand(0).AsNumber() > 0); } } - public class Clip : PropOp { - readonly Action _cb; - public Clip(Action cb) : base(2) { _cb = cb; } + public class Clip : Fixed { + public Clip(Action cb) : base(2, cb) { } protected override void Execute() { if (LoadedOperandCount < 2) throw new ArgumentException("Invalid clip syntax"); _cb(new RClip(GetOperand(0).AsNumber(), GetOperand(1).AsNumber())); } } - public class Integer : PropOp { - readonly Action _cb; - public Integer(Action cb) { _cb = cb; } + public class Integer : Fixed { + public Integer(Action cb) : base(cb) { } protected override void Execute() { _cb((int)GetOperand(0).AsNumber()); } } - public class Float : PropOp { - readonly Action _cb; - public Float(Action cb) { _cb = cb; } + public class Float : Fixed { + public Float(Action cb) : base(cb) { } protected override void Execute() { _cb(GetOperand(0).AsNumber()); } } - public class String : PropOp { - readonly Action _cb; - public String(Action cb) { _cb = cb; } + public class String : Fixed { + public String(Action cb) : base(cb) { } protected override void Execute() { _cb(GetOperand(0).AsString()); } } - public class StringArray : PropOp { - readonly Action _cb; - public StringArray(Action cb) { _cb = cb; } + public class StringArray : Fixed { + public StringArray(Action cb) : base(cb) { } protected override unsafe void Execute() { var op = GetOperand(0); int arrtype; int len; @@ -93,25 +92,22 @@ namespace Cryville.Crtr { target.Validate(); } } - public class Identifier : PropOp { - readonly Action _cb; - public Identifier(Action cb) { _cb = cb; } + public class Identifier : Fixed { + public Identifier(Action cb) : base(cb) { } protected override void Execute() { _cb(GetOperand(0).AsIdentifier()); } } - public class Enum : PropOp { + public class Enum : Fixed { readonly Type _type; readonly IntKeyedDictionary _cache = new IntKeyedDictionary(); - readonly Action _cb; - public Enum(Type type, Action cb) { + public Enum(Type type, Action cb) : base(cb) { if (!type.IsEnum) throw new ArgumentException("Type is not enum"); _type = type; var names = type.GetFields(BindingFlags.Public | BindingFlags.Static); for (int i = 0; i < names.Length; i++) _cache[IdentifierManager.Shared.Request(names[i].Name)] = Convert.ToInt32(names[i].GetValue(null)); - _cb = cb; } protected override void Execute() { int result = 0; @@ -120,9 +116,8 @@ namespace Cryville.Crtr { _cb(System.Enum.ToObject(_type, result)); } } - public class Enum : PropOp { + public class Enum : Fixed { static readonly IntKeyedDictionary _cache = new IntKeyedDictionary(); - readonly Action _cb; readonly Func _caster; static Enum() { if (!typeof(T).IsEnum) @@ -131,8 +126,7 @@ namespace Cryville.Crtr { for (int i = 0; i < names.Length; i++) _cache[IdentifierManager.Shared.Request(names[i].Name)] = Convert.ToInt32(names[i].GetValue(null)); } - public Enum(Action cb, Func caster) { - _cb = cb; + public Enum(Action cb, Func caster) : base(cb) { _caster = caster; } protected override void Execute() { @@ -142,17 +136,15 @@ namespace Cryville.Crtr { _cb(_caster(result)); } } - public class BeatTime : PropOp { - readonly Action _cb; - public BeatTime(Action cb) { _cb = cb; } + public class BeatTime : Fixed { + public BeatTime(Action cb) : base(cb) { } protected override unsafe void Execute() { var o = GetOperand(0); _cb(o.As()); } } - public class Vector2 : PropOp { - readonly Action _cb; - public Vector2(Action cb) { _cb = cb; } + public class Vector2 : Fixed { + public Vector2(Action cb) : base(cb) { } protected override unsafe void Execute() { var o = GetOperand(0); switch ((o.Length - 4) / 4) { @@ -169,9 +161,8 @@ namespace Cryville.Crtr { } } } - public class Vector3 : PropOp { - readonly Action _cb; - public Vector3(Action cb) { _cb = cb; } + public class Vector3 : Fixed { + public Vector3(Action cb) : base(cb) { } protected override unsafe void Execute() { var o = GetOperand(0); switch ((o.Length - 4) / 4) { @@ -186,9 +177,8 @@ namespace Cryville.Crtr { } } } - public class Vector4 : PropOp { - readonly Action _cb; - public Vector4(Action cb) { _cb = cb; } + public class Vector4 : Fixed { + public Vector4(Action cb) : base(cb) { } protected override unsafe void Execute() { var o = GetOperand(0); switch ((o.Length - 4) / 4) { @@ -204,9 +194,8 @@ namespace Cryville.Crtr { } } } - public class Color : PropOp { - readonly Action _cb; - public Color(Action cb) { _cb = cb; } + public class Color : Fixed { + public Color(Action cb) : base(cb) { } protected override unsafe void Execute() { var o = GetOperand(0); switch ((o.Length - 4) / 4) { diff --git a/Assets/Cryville/Crtr/PropSrc.cs b/Assets/Cryville/Crtr/PropSrc.cs index 5d3e03f..c7bcc67 100644 --- a/Assets/Cryville/Crtr/PropSrc.cs +++ b/Assets/Cryville/Crtr/PropSrc.cs @@ -18,11 +18,15 @@ namespace Cryville.Crtr { value = buf; } protected abstract void InternalGet(); - public abstract class FixedBuffer : PropSrc { + public abstract class Fixed : PropSrc { + protected readonly Func _cb; + public Fixed(int type, Func cb) : base(type) { _cb = cb; } + } + public abstract class FixedBuffer : Fixed { bool m_invalidated = true; protected override bool Invalidated { get { return m_invalidated; } } public override void Invalidate() { m_invalidated = true; } - public FixedBuffer(int type, int size) : base(type) { buf = new byte[size]; } + public FixedBuffer(int type, int size, Func cb) : base(type, cb) { buf = new byte[size]; } protected override void InternalGet() { m_invalidated = false; } @@ -36,18 +40,16 @@ namespace Cryville.Crtr { buf = _value; } } - public class Boolean : FixedBuffer { - readonly Func _cb; - public Boolean(Func cb) : base(PdtInternalType.Number, 4) { _cb = cb; } + public class Boolean : FixedBuffer { + public Boolean(Func cb) : base(PdtInternalType.Number, 4, cb) { } protected override void InternalGet() { base.InternalGet(); buf[0] = _cb() ? (byte)1 : (byte)0; } } public static readonly PropSrc Error = new Arbitrary(PdtInternalType.Error, new byte[0]); - public class Float : FixedBuffer { - readonly Func _cb; - public Float(Func cb) : base(PdtInternalType.Number, 4) { _cb = cb; } + public class Float : FixedBuffer { + public Float(Func cb) : base(PdtInternalType.Number, 4, cb) { } protected override unsafe void InternalGet() { base.InternalGet(); fixed (byte* _ptr = buf) { @@ -56,9 +58,8 @@ namespace Cryville.Crtr { } } public static readonly PropSrc Null = new Arbitrary(PdtInternalType.Null, new byte[0]); - public class String : PropSrc { - readonly Func _cb; - public String(Func cb) : base(PdtInternalType.String) { _cb = cb; } + public class String : Fixed { + public String(Func cb) : base(PdtInternalType.String, cb) { } protected override unsafe void InternalGet() { var v = _cb(); int strlen = v.Length; @@ -71,9 +72,8 @@ namespace Cryville.Crtr { } } } - public class Identifier : FixedBuffer { - readonly Func _cb; - public Identifier(Func cb) : base(PdtInternalType.Undefined, 4) { _cb = cb; } + public class Identifier : FixedBuffer { + public Identifier(Func cb) : base(PdtInternalType.Undefined, 4, cb) { } protected override unsafe void InternalGet() { base.InternalGet(); fixed (byte* _ptr = buf) { @@ -81,9 +81,8 @@ namespace Cryville.Crtr { } } } - public class BeatTime : FixedBuffer { - readonly Func _cb; - public BeatTime(Func cb) : base(PdtInternalType.Vector, 4 * sizeof(int)) { _cb = cb; } + public class BeatTime : FixedBuffer { + public BeatTime(Func cb) : base(PdtInternalType.Vector, 4 * sizeof(int), cb) { } protected override unsafe void InternalGet() { base.InternalGet(); var bt = _cb(); @@ -96,9 +95,8 @@ namespace Cryville.Crtr { } } } - public class Vector4 : FixedBuffer { - readonly Func _cb; - public Vector4(Func cb) : base(PdtInternalType.Vector, 4 * sizeof(float) + sizeof(int)) { _cb = cb; } + public class Vector4 : FixedBuffer { + public Vector4(Func cb) : base(PdtInternalType.Vector, 4 * sizeof(float) + sizeof(int), cb) { } protected override unsafe void InternalGet() { base.InternalGet(); var vec = _cb();