From 8403a0d216ab53dd7e97ffe62526c905f96a3f73 Mon Sep 17 00:00:00 2001 From: MaZiFAU <63099053+MaZiFAU@users.noreply.github.com> Date: Fri, 7 Jul 2023 15:13:35 +0200 Subject: [PATCH] Refactor; Refacto: +OMA.arguments List => Array +Added SOMDoc.MaekTupel() --- Assets/Scripts/GlobalBehaviour.cs | 2 +- .../FactHandling/Facts/AbstractAngleFact.cs | 14 +-- .../FactHandling/Facts/AbstractLineFact.cs | 4 +- .../FactHandling/Facts/Fact.cs | 50 +++++----- .../FactHandling/Facts/FunctionFact.cs | 11 ++- .../TBD/CanonBallCalculator.cs | 22 ++--- Assets/Scripts/SOMDocManager.cs | 93 +++++++++++-------- 7 files changed, 104 insertions(+), 92 deletions(-) diff --git a/Assets/Scripts/GlobalBehaviour.cs b/Assets/Scripts/GlobalBehaviour.cs index 05fb6e3a..d8888ccb 100644 --- a/Assets/Scripts/GlobalBehaviour.cs +++ b/Assets/Scripts/GlobalBehaviour.cs @@ -122,7 +122,7 @@ IEnumerator getScrollsfromServer() AvailableScrolls = JsonConvert.DeserializeObject<List<REST_JSON_API.Scroll>>(jsonString); Debug.Log( $"Scroll Times:\n" + - $"Sum\t{(System.DateTime.UtcNow - requestTime).TotalMilliseconds}ms\n" + + $"Summ\t{(System.DateTime.UtcNow - requestTime).TotalMilliseconds}ms\n" + $"Server\t{(answerTime - requestTime).TotalMilliseconds}ms\n" + $"Download\t{(parseTime - answerTime).TotalMilliseconds}ms\n" + $"Parsing\t{(System.DateTime.UtcNow - parseTime).TotalMilliseconds}ms"); diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs index 8f22fec1..5ef39d17 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs @@ -64,7 +64,7 @@ protected AbstractAngleFact(string pid1, string pid2, string pid3, float angle, public override bool HasDependentFacts => true; /// \copydoc Fact.getDependentFactIds - protected override string[] GetGetDependentFactIds() + protected override string[] GetGetDependentFactIds() => new string[] { Pid1, Pid2, Pid3 }; protected override void RecalculateTransform() @@ -146,7 +146,7 @@ public AngleFact(string pid1, string pid2, string pid3, FactOrganizer organizer) /// <param name="Pid3">sets <see cref="Pid3"/></param> /// <param name="backendURI">MMT URI</param> /// <param name="organizer">sets <see cref="Fact._Facts"/></param> - public AngleFact(string Pid1, string Pid2, string Pid3, float angle, string backendURI, FactOrganizer organizer) + public AngleFact(string Pid1, string Pid2, string Pid3, float angle, string backendURI, FactOrganizer organizer) : base(Pid1, Pid2, Pid3, angle, backendURI, organizer) { } public override MMTDeclaration MakeMMTDeclaration() @@ -154,7 +154,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc lhs = new OMA( new OMS(MMT_OMS_URI.Angle), - new List<SOMDoc> { + new[] { new OMS(Pid1), new OMS(Pid2), new OMS(Pid3) @@ -210,7 +210,7 @@ protected override Fact _ReInitializeMe(Dictionary<string, string> old_to_new, F public class RightAngleFact : AbstractAngleFactWrappedCRTP<RightAngleFact> { override public bool is_right_angle { get => true; } - override public float angle {get => 90f;} + override public float angle { get => 90f; } /// <summary> \copydoc Fact.Fact </summary> public RightAngleFact() : base() { } @@ -246,10 +246,10 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc tp = new OMA( new OMS(MMT_OMS_URI.Ded), - new List<SOMDoc> { + new[] { new OMA( new OMS(MMT_OMS_URI.RightAngle), - new List<SOMDoc> { + new[] { new OMS(Pid1), new OMS(Pid2), new OMS(Pid3), @@ -257,7 +257,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc df = null; - return new MMTSymbolDeclaration(this.Label, tp, df); + return new MMTSymbolDeclaration(Label, tp, df); } /// \copydoc Fact.parseFact(ScrollFact) diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs index eaf2c9d7..1e29e045 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs @@ -142,7 +142,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc lhs = new OMA( new OMS(MMT_OMS_URI.Metric), - new List<SOMDoc> { + new[] { new OMS(Pid1), new OMS(Pid2) } @@ -207,7 +207,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc defines = new OMA( new OMS(MMT_OMS_URI.LineOf), - new List<SOMDoc> { + new[] { new OMS(Pid1), new OMS(Pid2) }); diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs index 6781c22b..6d74682b 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs @@ -616,7 +616,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc tp = new OMS(MMT_OMS_URI.Point); SOMDoc df = new OMA( new OMS(MMT_OMS_URI.Tuple), - new List<SOMDoc> { + new[] { new OMF(Point.x), new OMF(Point.y), new OMF(Point.z), @@ -737,10 +737,10 @@ public override MMTDeclaration MakeMMTDeclaration() { SOMDoc tp = new OMA( new OMS(MMT_OMS_URI.Ded), - new List<SOMDoc> { + new[] { new OMA( new OMS(MMT_OMS_URI.OnLine), - new List<SOMDoc> { + new[] { new OMS(Rid), new OMS(Pid) }),}); @@ -832,10 +832,10 @@ public override MMTDeclaration MakeMMTDeclaration() { SOMDoc tp = new OMA( new OMS(MMT_OMS_URI.Ded), - new List<SOMDoc> { + new[] { new OMA( new OMS(MMT_OMS_URI.ParallelLine), - new List<SOMDoc> { + new[] { new OMS(Lid1), new OMS(Lid2), } @@ -1002,14 +1002,14 @@ protected override string generateLabel() /// <returns>struct for <see cref="AddFactResponse"/></returns> public override MMTDeclaration MakeMMTDeclaration() { - List<SOMDoc> outerArguments = new List<SOMDoc> + SOMDoc[] outerArguments = new SOMDoc[] { //CirclePlane, new OMA( //PointNormalPlane, new OMS(MMT_OMS_URI.pointNormalPlane), //planeArgs, - new List<SOMDoc> { + new SOMDoc[] { //base point of the circle plane?, new OMS(Pid2), //NormalVector, @@ -1017,7 +1017,7 @@ public override MMTDeclaration MakeMMTDeclaration() //"Vector" new OMS(MMT_OMS_URI.Tuple), //normalArgs, - new List<SOMDoc> { + new[] { new OMF(normal.x), new OMF(normal.y), new OMF(normal.z) @@ -1152,10 +1152,10 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc tp = new OMA( new OMS(MMT_OMS_URI.Ded), - new List<SOMDoc> { + new[] { new OMA( new OMS(MMT_OMS_URI.OnCircle), - new List<SOMDoc> { + new[] { new OMS(Cid), new OMS(Pid), }),}); @@ -1290,7 +1290,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc lhs = new OMA( new OMS(MMT_OMS_URI.AnglePlaneLine), - new List<SOMDoc> { + new[] { new OMS(Cid1), new OMS(Rid2), } @@ -1398,7 +1398,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc lhs = new OMA( new OMS(MMT_OMS_URI.RadiusCircleMetric), - new List<SOMDoc> { + new[] { new OMS(Cid1), } ); @@ -1501,7 +1501,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc lhs = new OMA( new OMS(MMT_OMS_URI.AreaCircle), - new List<SOMDoc> { + new[] { new OMS(Cid1), } ); @@ -1628,9 +1628,9 @@ public override MMTDeclaration MakeMMTDeclaration() new OMA( new OMS(MMT_OMS_URI.VolumeCone), - new List<SOMDoc> { + new[] { new OMA(new OMS(MMT_OMS_URI.ConeOfCircleApex), - new List<SOMDoc> { + new[] { new OMS(Cid1), new OMS(Pid1), } @@ -1762,10 +1762,10 @@ public override MMTDeclaration MakeMMTDeclaration() { SOMDoc tp = new OMA( new OMS(MMT_OMS_URI.Ded), - new List<SOMDoc>{ + new[]{ new OMA( new OMS(MMT_OMS_URI.OrthoCircleLine), - new List<SOMDoc>{ + new[] { new OMS(Cid1), new OMS(Lid1), } @@ -1899,7 +1899,7 @@ public override MMTDeclaration MakeMMTDeclaration() SOMDoc lhs = new OMA( new OMS(MMT_OMS_URI.TruncatedVolumeCone), - new List<SOMDoc> { + new SOMDoc[] { new OMS(Cid1), new OMS(Cid2), new OMS(unequalCirclesProof), @@ -2034,7 +2034,7 @@ public override MMTDeclaration MakeMMTDeclaration() new OMA( new OMS(MMT_OMS_URI.CylinderVolume), - new List<SOMDoc> { + new SOMDoc[] { new OMS(Cid1), new OMS(Cid2), new OMS(equalCirclesProof), @@ -2149,10 +2149,10 @@ public override MMTDeclaration MakeMMTDeclaration() { SOMDoc tp = new OMA( new OMS(MMT_OMS_URI.Ded), - new List<SOMDoc> { + new[] { new OMA( new OMS(MMT_OMS_URI.EqualityCircles), - new List<SOMDoc> { + new[] { new OMS(Cid1), new OMS(Cid2), } @@ -2266,9 +2266,9 @@ public override MMTDeclaration MakeMMTDeclaration() { SOMDoc tp = new OMA( new OMS(MMT_OMS_URI.Ded), - new List<SOMDoc> { + new[] { new OMA(new OMS(MMT_OMS_URI.UnEqualityCircles), - new List<SOMDoc> { + new[] { new OMS(Cid1), new OMS(Cid2), }),}); @@ -2369,7 +2369,7 @@ public static List<string> parseFactList(MMTDeclaration decl, out string typeURI if (next_element is not OMA current_element) return ret; - switch (current_element.arguments.Count) + switch (current_element.arguments.Length) { case 2: if (current_element.arguments[1] is not OMS oMS) @@ -2399,7 +2399,7 @@ public static List<T> parseFactList<T>(MMTDeclaration decl) if (next_element is not OMA current_element) return ret; - switch (current_element.arguments.Count) + switch (current_element.arguments.Length) { case 2: ret.Add((current_element.arguments[1].GetLambdaExpression().Compile() as Func<T>)()); diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs index c2f55019..b395c82b 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs @@ -263,6 +263,12 @@ protected AttachedPositionFunction(string fid, string[] funcids, string uri, Fac return new AttachedPositionFunction(default, default(string[]), fact.@ref.uri, StageStatic.stage.factState); } + public override MMTDeclaration MakeMMTDeclaration() + { + //SOMDoc[] defines ?? + //SOMDoc type = new OMS(MMT_OMS_URI.Tuple); + throw new NotImplementedException(); + } public override bool HasDependentFacts => true; @@ -287,9 +293,4 @@ protected override void RecalculateTransform() protected override Fact _ReInitializeMe(Dictionary<string, string> old_to_new, FactOrganizer organizer) // => new AttachedPositionFunction(old_to_new[this.fid], old_to_new[func_calls_list_id], organizer); => new AttachedPositionFunction(old_to_new[this.fid], this.func_calls_ids.Select(id => old_to_new[id]).ToArray(), organizer); - - public override MMTDeclaration MakeMMTDeclaration() - { - throw new NotImplementedException(); - } } diff --git a/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs b/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs index 836e8a73..a486787e 100644 --- a/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs +++ b/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs @@ -57,30 +57,30 @@ SOMDoc BuildOMA_XVA() new OMBINDC("Acc", typeof(Vector3), new OMBINDC("t", "R", new OMA( - new OMS(MMT_OMS_URI.Add), - new() { + new OMS(MMT_OMS_URI.Add), + new SOMDoc[] { new OMV("Pos"), new OMA( new OMS(MMT_OMS_URI.Add), - new() { + new[] { new OMA( new OMS(MMT_OMS_URI.Multiply), - new() { + new[] { new OMV("Vel"), new OMV("t"), } ), new OMA( new OMS(MMT_OMS_URI.Multiply), - new() { + new SOMDoc[] { new OMF(0.5f), new OMA( new OMS(MMT_OMS_URI.Multiply), - new() { + new SOMDoc[] { new OMV("Acc"), new OMA( new OMS(MMT_OMS_URI.Multiply), - new() { + new[] { new OMV("t"), new OMV("t"), }),}),}),}),}))))); @@ -91,10 +91,10 @@ SOMDoc BuildOMAPath(Vector3 Pos, Vector3 Vel) return new OMBINDC("t", "R", new OMA( new OMS(MMT_OMS_URI.MakeObjectArray), - new() { - SOMDoc.MakeUnityEngineVector3(Pos), - SOMDoc.MakeUnityEngineVector3(Vel), - SOMDoc.MakeUnityEngineVector3(Gravity), + new SOMDoc[] { + SOMDoc.MakeTupel(Pos), + SOMDoc.MakeTupel(Vel), + SOMDoc.MakeTupel(Gravity), new OMV("t"), } )); diff --git a/Assets/Scripts/SOMDocManager.cs b/Assets/Scripts/SOMDocManager.cs index a95fb543..81400f56 100644 --- a/Assets/Scripts/SOMDocManager.cs +++ b/Assets/Scripts/SOMDocManager.cs @@ -55,7 +55,7 @@ public static class MMT_OMS_URI public static readonly string AttachedPositionFunction = "0SET_IN_SOMDocManager!"; public static readonly string FunctionCallFact = "1SET_IN_SOMDocManager!"; public static readonly string FunctionFact = "2SET_IN_SOMDocManager!"; - + public static readonly string TestType = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?xcircleType3D"; public static readonly string ListType = "http://gl.mathhub.info/MMT/LFX/Datatypes?ListSymbols?ListType"; @@ -195,9 +195,9 @@ public static class SOMDoctoLambdaExpression<T> { MMT_OMS_URI.SquareRoot, MakeCos }, { MMT_OMS_URI.Tuple, - MakeUnityEngineVector3 }, + MakeTupel }, { MMT_OMS_URI.MakeObjectArray, - MakeArray }, + MakeObjArray }, { "InstantList", MakeInstantList }, { MMT_OMS_URI.ListEnd, @@ -334,7 +334,7 @@ void ThrowArgumentException(ExpressionType expression_cast, int expected) ParameterExpression[] lambda_params = lambda_applicant .SelectMany(l => l.Parameters) - .ToArray(); //PERF: .ToList().Sort() => .BinarySearch; + .ToArray(); //PERF: .ToList().Sort() => .BinarySearch; //Too much overhead? ParameterExpression[] found_bound_params = bound_params .Where(p => lambda_params.Contains(p)) @@ -379,33 +379,36 @@ private static LambdaExpression ParseFuncUUToExpression<U>(Func<U, U> func) private static LambdaExpression MakeSin(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params) => ExpresionFuncToLambda( - default(T) switch // TODO? cleaner switch - { - float => ParseFuncUUToExpression<float>(MathF.Sin), - double => ParseFuncUUToExpression<double>(Math.Sin), - _ => throw new NotImplementedException("Sinus for " + nameof(T) + "=" + typeof(T)) - }, - "Sin", lambda_applicant, bound_params, 1 + lambda_applicant[0].ReturnType == typeof(float) ? ParseFuncUUToExpression<float>(MathF.Sin) + : lambda_applicant[0].ReturnType == typeof(double) ? ParseFuncUUToExpression<double>(Math.Sin) + : throw new NotImplementedException("Sinus for " + lambda_applicant[0].ReturnType), + + "Sin", lambda_arguments.Length > 0 ? lambda_arguments : lambda_applicant, bound_params, 1 ); private static LambdaExpression MakeCos(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params) => ExpresionFuncToLambda( - default(T) switch // TODO? cleaner switch - { - float => ParseFuncUUToExpression<float>(MathF.Cos), - double => ParseFuncUUToExpression<double>(Math.Cos), - _ => throw new NotImplementedException("Cosinus for " + nameof(T) + "=" + typeof(T)) - }, - "Cos", lambda_applicant, bound_params, 1 - ); + lambda_applicant[0].ReturnType == typeof(float) ? ParseFuncUUToExpression<float>(MathF.Cos) + : lambda_applicant[0].ReturnType == typeof(double) ? ParseFuncUUToExpression<double>(Math.Cos) + : throw new NotImplementedException("Cosinus for " + lambda_applicant[0].ReturnType), - private static LambdaExpression MakeUnityEngineVector3(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params) - => ExpresionFuncToLambda( - (Expression<Func<float, float, float, Vector3>>)((x, y, z) => new Vector3(x, y, z)), - "UnityEngineVector3", lambda_applicant, bound_params, 3 + "Cos", lambda_arguments.Length > 0 ? lambda_arguments : lambda_applicant, bound_params, 1 ); - private static LambdaExpression MakeArray(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params) + private static LambdaExpression MakeTupel(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params) + { + if (lambda_applicant.Length == 3 + && lambda_applicant.All(l => l.ReturnType == typeof(float))) + + return ExpresionFuncToLambda( + (Expression<Func<float, float, float, Vector3>>)((x, y, z) => new Vector3(x, y, z)), + "UnityEngineVector3", lambda_applicant, bound_params, 3 + ); + + return MakeObjArray(lambda_applicant, lambda_arguments, bound_params); + } + + private static LambdaExpression MakeObjArray(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params) => Expression.Lambda( Expression.NewArrayInit( typeof(object), @@ -526,14 +529,17 @@ public LambdaExpression GetLambdaExpression() public abstract SOMDoc MapURIs(Dictionary<string, string> old_to_new); #region MakeMMT_OMS_URItoSOMDoc - public static OMA MakeUnityEngineVector3(Vector3 vec) - => new OMA( - new OMS(MMT_OMS_URI.Tuple), - new() { + public static OMA MakeTupel(Vector3 vec) + => MakeTupel(new[] { new OMF(vec.x), new OMF(vec.y), new OMF(vec.z), - } + }); + + public static OMA MakeTupel(SOMDoc[] args) + => new( + new OMS(MMT_OMS_URI.Tuple), + args ); public static OMA MakeList(string[] lids, Type type) @@ -541,15 +547,20 @@ public static OMA MakeList(string[] lids, Type type) public static OMA MakeList(string[] lids, string typeURI) { - List<SOMDoc> end_of_list = new() { + SOMDoc[] end_of_list = new SOMDoc[] { new OMA( new OMS(MMT_OMS_URI.ListEnd), - new() { + new[] { new OMS(typeURI), - }),}; + } + ), + lids.Length == 0 + ? null + : new OMS(lids[^1]) + }; - if (lids.Length > 0) - end_of_list.Add(new OMS(lids[^1])); + if (lids.Length == 0) + end_of_list = end_of_list[..^1]; SOMDoc defines = new OMA( new OMS(MMT_OMS_URI.ListLiteral), @@ -560,7 +571,7 @@ public static OMA MakeList(string[] lids, string typeURI) { defines = new OMA( new OMS(MMT_OMS_URI.ListLiteral), - new() { + new[] { defines, new OMS(lids[i]), }); @@ -568,10 +579,10 @@ public static OMA MakeList(string[] lids, string typeURI) SOMDoc type = new OMA( new OMS(MMT_OMS_URI.ListType), - new() { new OMS(typeURI), } + new[] { new OMS(typeURI), } ); - return new OMA(type, new() { defines }); + return new OMA(type, new[] { defines }); } #endregion MakeMMT_OMS_URItoSOMDoc } @@ -651,10 +662,10 @@ public class OMA : SOMDocCRTP<OMA> public new string kind = "OMA"; public SOMDoc applicant; - public List<SOMDoc> arguments; + public SOMDoc[] arguments; [JsonConstructor] - public OMA(SOMDoc applicant, List<SOMDoc> arguments) : base() + public OMA(SOMDoc applicant, SOMDoc[] arguments) : base() { this.applicant = applicant; this.arguments = arguments; @@ -679,11 +690,11 @@ public override string ToString() public override OMA MapURIsWrapped(Dictionary<string, string> old_to_new) => new OMA( applicant.MapURIs(old_to_new), - arguments.Select(arg => arg.MapURIs(old_to_new)).ToList() + arguments.Select(arg => arg.MapURIs(old_to_new)).ToArray() ); } - public class OMS : SOMDocCRTP<OMS> //OMSTR? + public class OMS : SOMDocCRTP<OMS> { public new string kind = "OMS"; -- GitLab