Ejemplo n.º 1
0
        private string GenerateNorm2Code()
        {
            if (ClassData.ClassId == 0)
            {
                return("return " + GMacLanguage.ScalarZero + ";");
            }

            //var macroGen = new GMacMacroCodeGenerator(LibraryComposer, CurrentFrame.Macro(DefaultMacro.MetricUnary.NormSquared));
            var macroGen = CreateMacroCodeGenerator(DefaultMacro.MetricUnary.NormSquared);

            macroGen.ActionSetMacroParametersBindings =
                macroBinding =>
            {
                macroBinding.BindToVariables(macroBinding.BaseMacro.OutputParameterValueAccess);

                macroBinding.BindMultivectorPartToVariables("mv", ClassData.ClassBasisBladeIds);
            };

            macroGen.ActionSetTargetVariablesNames =
                targetNaming =>
            {
                //This line is actually not needed because we  will override the macro output assignment code
                //using the ActionBeforeGenerateSingleComputation member delegate
                targetNaming.SetScalarParameter(targetNaming.BaseMacro.OutputParameterValueAccess, "result");

                targetNaming.SetMultivectorParameters("mv", b => b.GradeIndexName);

                //targetNaming.SetTempVariables(index => "tempVar" + index.ToString("X4") + "");
                MvLibraryGenerator.SetTargetTempVariablesNames(targetNaming);
            };

            macroGen.ActionBeforeGenerateSingleComputation =
                (composer, codeInfo) =>
            {
                if (!codeInfo.ComputedVariable.IsOutput)
                {
                    return;
                }

                composer
                .AddEmptyLine()
                .Add(SyntaxFactory.ReturnValue(codeInfo.RhsExpressionCode))
                .AddEmptyLine();

                codeInfo.EnableCodeGeneration = false;
            };

            return(macroGen.Generate());
        }
Ejemplo n.º 2
0
        protected override void SetTargetVariablesNames(GMacTargetVariablesNaming targetNaming)
        {
            //Set names of output parameter components
            var outputParam = targetNaming.BaseMacro.OutputParameterValueAccess;

            if (outputParam.GMacType.IsValidMultivectorType)
            {
                targetNaming.SetMultivectorParameters(outputParam, b => "result." + b.GradeIndexName);
            }
            else
            {
                targetNaming.SetScalarParameter(outputParam, "result");
            }

            //Set names for input parameters components
            targetNaming.SetMultivectorParameters("mv1", b => b.GradeIndexName);

            targetNaming.SetMultivectorParameters("mv2", b => "mv." + b.GradeIndexName);

            //Set names for temp variables
            MvLibraryGenerator.SetTargetTempVariablesNames(targetNaming);
        }