private static bool TryHint(OperatorParams par, CsCodeWriter cw) { if (!(par.OperatorHints is null)) { var builderInput = par.GetBuilder(); if (!(builderInput is null)) { var builder = new OperatorCodeBuilder(builderInput); cw.WriteLine("// scenario with hint"); builder.WriteCode(cw); return(true); } } // Console.WriteLine("args.Input" + par.DebugIs); return(false); }
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); }