From 90fce7428fb181db1bf6dcb7e823819aef5f7a56 Mon Sep 17 00:00:00 2001 From: Michael L Smith Date: Mon, 21 Mar 2016 20:21:32 -0700 Subject: [PATCH] Nested CompoundVariable and VariableCalculator under Variable. --- .../DataBinding/CompoundVariable.cs | 15 ---- OSCADSharp/OSCADSharp/DataBinding/Variable.cs | 76 +++++++++++++++++++ .../DataBinding/VariableCalculator.cs | 73 ------------------ OSCADSharp/OSCADSharp/OSCADSharp.csproj | 2 - 4 files changed, 76 insertions(+), 90 deletions(-) delete mode 100644 OSCADSharp/OSCADSharp/DataBinding/CompoundVariable.cs delete mode 100644 OSCADSharp/OSCADSharp/DataBinding/VariableCalculator.cs diff --git a/OSCADSharp/OSCADSharp/DataBinding/CompoundVariable.cs b/OSCADSharp/OSCADSharp/DataBinding/CompoundVariable.cs deleted file mode 100644 index 40b0024..0000000 --- a/OSCADSharp/OSCADSharp/DataBinding/CompoundVariable.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace OSCADSharp.DataBinding -{ - internal class CompoundVariable : Variable - { - internal CompoundVariable(string name, object value) : base(name, value, false) - { - } - } -} diff --git a/OSCADSharp/OSCADSharp/DataBinding/Variable.cs b/OSCADSharp/OSCADSharp/DataBinding/Variable.cs index 5ca7795..ded73c0 100644 --- a/OSCADSharp/OSCADSharp/DataBinding/Variable.cs +++ b/OSCADSharp/OSCADSharp/DataBinding/Variable.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; @@ -229,5 +230,80 @@ namespace OSCADSharp.DataBinding return applyMixedOperatorRight("/", left, right, VariableCalculator.Divide); } #endregion + + #region CompoundVariable + private class CompoundVariable : Variable + { + internal CompoundVariable(string name, object value) : base(name, value, false) + { + } + } + #endregion + + #region VariableCalculator + private static class VariableCalculator + { + internal static bool IsNumeric(object value) + { + return value is int || value is double || value is float || value is decimal; + } + + internal static bool IsVector(object value) + { + return value is Vector3 || value is BindableVector; + } + + private static object computeExpression(BinaryExpression expr, object left, object right) + { + object result = null; + + if (IsNumeric(left) && IsNumeric(right)) + result = Expression.Lambda>(expr).Compile()(); + if (IsVector(left) || IsVector(right)) + result = Expression.Lambda>(expr).Compile()(); + + return result; + } + + private static BinaryExpression makeExpression(Func methodToUse, + object left, object right) + { + if (IsNumeric(left)) + left = Convert.ToDouble(left); + if (IsNumeric(right)) + right = Convert.ToDouble(right); + + var leftExpr = Expression.Constant(left, left.GetType()); + var rightExpr = Expression.Constant(right, right.GetType()); + BinaryExpression expr = methodToUse(leftExpr, rightExpr); + return expr; + } + + internal static object Add(object left, object right) + { + BinaryExpression expr = makeExpression(Expression.Add, left, right); + return computeExpression(expr, left, right); + } + + internal static object Subtract(object left, object right) + { + BinaryExpression expr = makeExpression(Expression.Subtract, left, right); + return computeExpression(expr, left, right); + } + + internal static object Multiply(object left, object right) + { + BinaryExpression expr = makeExpression(Expression.Multiply, left, right); + return computeExpression(expr, left, right); + } + + internal static object Divide(object left, object right) + { + BinaryExpression expr = makeExpression(Expression.Divide, left, right); + return computeExpression(expr, left, right); + } + } + + #endregion } } diff --git a/OSCADSharp/OSCADSharp/DataBinding/VariableCalculator.cs b/OSCADSharp/OSCADSharp/DataBinding/VariableCalculator.cs deleted file mode 100644 index ffd2e5e..0000000 --- a/OSCADSharp/OSCADSharp/DataBinding/VariableCalculator.cs +++ /dev/null @@ -1,73 +0,0 @@ -using OSCADSharp.Spatial; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace OSCADSharp.DataBinding -{ - internal static class VariableCalculator - { - internal static bool IsNumeric(object value) - { - return value is int || value is double || value is float || value is decimal; - } - - internal static bool IsVector(object value) - { - return value is Vector3 || value is BindableVector; - } - - private static object computeExpression(BinaryExpression expr, object left, object right) - { - object result = null; - - if (IsNumeric(left) && IsNumeric(right)) - result = Expression.Lambda>(expr).Compile()(); - if (IsVector(left) || IsVector(right)) - result = Expression.Lambda>(expr).Compile()(); - - return result; - } - - private static BinaryExpression makeExpression(Func methodToUse, - object left, object right) - { - if (IsNumeric(left)) - left = Convert.ToDouble(left); - if (IsNumeric(right)) - right = Convert.ToDouble(right); - - var leftExpr = Expression.Constant(left, left.GetType()); - var rightExpr = Expression.Constant(right, right.GetType()); - BinaryExpression expr = methodToUse(leftExpr, rightExpr); - return expr; - } - - internal static object Add(object left, object right) - { - BinaryExpression expr = makeExpression(Expression.Add, left, right); - return computeExpression(expr, left, right); - } - - internal static object Subtract(object left, object right) - { - BinaryExpression expr = makeExpression(Expression.Subtract, left, right); - return computeExpression(expr, left, right); - } - - internal static object Multiply(object left, object right) - { - BinaryExpression expr = makeExpression(Expression.Multiply, left, right); - return computeExpression(expr, left, right); - } - - internal static object Divide(object left, object right) - { - BinaryExpression expr = makeExpression(Expression.Divide, left, right); - return computeExpression(expr, left, right); - } - } -} diff --git a/OSCADSharp/OSCADSharp/OSCADSharp.csproj b/OSCADSharp/OSCADSharp/OSCADSharp.csproj index c4bf323..e79aeb4 100644 --- a/OSCADSharp/OSCADSharp/OSCADSharp.csproj +++ b/OSCADSharp/OSCADSharp/OSCADSharp.csproj @@ -43,8 +43,6 @@ - -