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"); }
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 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); }
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); }