public static void Add1(OperatorCodeBuilderInput result, string name)
        {
            var l = result.OperatorParameters.LeftMethodArgumentName;
            var r = result.OperatorParameters.RightMethodArgumentName;

            result.AddVariable(l + "Value", l + ".GetBaseUnitValue()");
            result.AddVariable(r + "Value", r + ".GetBaseUnitValue()");
            result.AddVariable(name, $"{l}Value {result.OperatorParameters.Oper} {r}Value");
        }
示例#2
0
        private static void Scenario_Mul_Fract_Basic <T>(OperatorCodeBuilderInput input, string right,
                                                         string resultDenominator)
        {
            var resultDenominatorUnit = resultDenominator.FirstLower() + "Unit";
            var rUnit = right.FirstLower() + "Unit";

            input.AddVariable(resultDenominatorUnit, "$(left).Unit.DenominatorUnit.Get" + resultDenominator + "Unit()");
            if (right != resultDenominator)
            {
                input.AddVariable(rUnit, "$(left).Unit.DenominatorUnit.Get" + right + "Unit()");
            }
            input.WithResultUnit <T>("$(left).Unit.CounterUnit", resultDenominatorUnit);
            input.ConvertRight(rUnit);
        }
        private static CsCodeWriter CreateCodeForLeftFractionValue(OperatorParams p,
                                                                   [NotNull] FractionUnit leftFraction)
        {
            if (leftFraction == null)
            {
                throw new ArgumentNullException(nameof(leftFraction));
            }

            var cw = Ext.Create <MultiplyAlgebraGenerator>();

            cw.WriteLine("// " + p);
            var canNormal = leftFraction.DenominatorUnit.Unit == p.Right.Unit &&
                            leftFraction.CounterUnit.Unit == p.Result.Unit;

            if (canNormal)
            {
                if (TryHint(p, cw))
                {
                    cw.WriteLine("// scenario D1");
                    return(cw);
                }
            }
            else
            {
                if (TryHint(p, cw))
                {
                    return(cw);
                }
                cw.WriteLine("// scenario D2");
                return(cw.WithThrowNotImplementedException());
            }

            var oper     = new OperatorCodeBuilderInput(p);
            var leftUnit = p.LeftMethodArgumentName + "Unit";

            oper.ConvertRight(leftUnit + ".DenominatorUnit");
            oper.ResultUnit = leftUnit + ".CounterUnit";
            oper.AddVariable(leftUnit, p.LeftMethodArgumentName + ".Unit");
            cw.WriteLine("// scenario D3");
            var builder = new OperatorCodeBuilder(oper);

            builder.WriteCode(cw);
            return(cw);
        }
示例#4
0
        private static void Scenario_Mul_Basic_Fract <THigh, TResult>(
            OperatorCodeBuilderInput input,
            string rightDenominator,
            [CanBeNull] XValueTypeName resultDenominator)
        {
            var v1 = resultDenominator?.FirstLower() + "Unit";
            var v2 = rightDenominator.FirstLower() + "Unit";

            input.AddVariable("rightArgumentUnit", "$(right).Unit");
            if (resultDenominator == input.OperatorParameters.Left.Value)
            {
                v1 = input.Replace("$(left).Unit");
            }
            else
            {
                input.AddVariable(v1, "$(left).Unit.Get" + resultDenominator + "Unit()");
            }

            input.AddVariable(v2, "$(left).Unit.Get" + rightDenominator + "Unit()");
            input.AddVariable <THigh>("x3", "rightArgumentUnit.CounterUnit", v2);
            input.ConvertRight("x3");
            input.WithResultUnit <TResult>("rightArgumentUnit.CounterUnit", v1);
        }
 public OperatorCodeBuilder(OperatorCodeBuilderInput input)
 {
     _input = input;
 }