예제 #1
0
        protected override bool InitializeTemplates()
        {
            Templates.Clear();

            var codeTemplate1 = new ParametricComposer("<@", "@>");

            codeTemplate1.SetTemplateText(
                @"public Multivector()
{
}

public Multivector(params double[] coefs)
{
    int i = 0;
    foreach (var coef in coefs.Take(<@gadim@>))
        Coef[i++] = coef;
}

public Multivector(IEnumerable<double> coefs)
{
    int i = 0;
    foreach (var coef in coefs.Take(<@gadim@>))
        Coef[i++] = coef;
}

"
                );

            Templates.Add("multivector", codeTemplate1);

            return(true);
        }
예제 #2
0
        /// <summary>
        /// Generate the given template text from the supplied parameters values and add its output to
        /// the given text builder at the given index
        /// </summary>
        /// <param name="textBuilder"></param>
        /// <param name="index"></param>
        /// <param name="template"></param>
        /// <param name="paramsValues"></param>
        public static void Insert(this ListComposer textBuilder, int index, ParametricComposer template, IParametericComposerValueSource paramsValues)
        {
            template.SetParametersValues(paramsValues);

            var text = template.GenerateText();

            textBuilder.Insert(index, new StructuredTextItem(text));
        }
예제 #3
0
        /// <summary>
        /// Generate the given template text from the supplied parameters values and add its output to
        /// the given text builder
        /// </summary>
        /// <param name="textBuilder"></param>
        /// <param name="template"></param>
        /// <param name="paramsValues"></param>
        public static void Add(this ListComposer textBuilder, ParametricComposer template, IParametericComposerValueSource paramsValues)
        {
            template.SetParametersValues(paramsValues);

            var text = template.GenerateText();

            textBuilder.Add(text);
        }
예제 #4
0
        /// <summary>
        /// Generate the given template text from the supplied parameters values and add its output to
        /// the given text builder
        /// </summary>
        /// <param name="textBuilder"></param>
        /// <param name="template"></param>
        /// <param name="paramsValues"></param>
        public static void Add(this ListComposer textBuilder, ParametricComposer template, IDictionary <string, string> paramsValues)
        {
            template.SetParametersValues(paramsValues);

            var text = template.GenerateText();

            textBuilder.Add(text);
        }
예제 #5
0
        internal GMacScriptInterpreter(AstRoot rootAst)
        {
            Root      = rootAst;
            Shortcuts = new GMacScriptShortcuts();
            Output    = new GMacScriptOutput();

            _substituteComposer  = new ParametricComposer("|{", "}|");
            _symbolsCache        = new Dictionary <string, LanguageSymbol>();
            _expressionCompiler  = new GMacDynamicCompiler();
            _tempSymbolsCompiler = new GMacTempSymbolCompiler();
        }
예제 #6
0
        public override void Generate()
        {
            var declareCoefsText = GenerateDeclareCoefsText();

            var template = new ParametricComposer("#", "#", ClassCodeTemplateText);

            TextComposer.Append(
                template,
                "frame", CurrentFrameName,
                "double", GMacLanguage.ScalarTypeName,
                "zero_class_name", MvLibraryGenerator.MultivectorClassesData[0].ClassName,
                "declare_coefs", declareCoefsText
                );

            FileComposer.FinalizeText();
        }
예제 #7
0
        private string GenerateIsEqualMethod()
        {
            var codeText = GenerateIsEqualMethodCode();

            var template = new ParametricComposer("#", "#", BilinearTemplateText);

            var composer = new LinearComposer();

            composer.Append(
                template,
                "result_type", "bool",
                "op_name", "IsEqual",
                "mv_class_name", CalcClassData.ClassName,
                "code", codeText
                );

            return(composer.ToString());
        }
예제 #8
0
        public FormEditTemplate(string templateName, ParametricComposer template)
        {
            InitializeComponent();

            _templateName = templateName;

            _template = template;

            textBoxLeftDelimiter.Text  = _template.LeftDelimiter;
            textBoxRightDelimiter.Text = _template.RightDelimiter;
            textBoxTemplateCode.Text   = _template.TemplateText;

            foreach (var parameter in _template.Parameters)
            {
                listBoxParameters.Items.Add(parameter);
            }

            _updateRequired = false;
        }
예제 #9
0
        private string GenerateProductMethod(string macroName)
        {
            string resultClassName;

            var codeText = GenerateProductMethodCode(macroName, out resultClassName);

            var template = new ParametricComposer("#", "#", BilinearTemplateText);

            var composer = new LinearComposer();

            composer.Append(
                template,
                "result_type", resultClassName,
                "op_name", BaseMacro.Name,
                "mv_class_name", CalcClassData.ClassName,
                "code", codeText
                );

            return(composer.ToString());
        }
예제 #10
0
        private string GenerateDeclareCoefsText()
        {
            var s = new StringBuilder();

            var template = new ParametricComposer("#", "#", "public abstract #double# #coef_name# { get; }")
            {
                ["double"] = GMacLanguage.ScalarTypeName
            };


            for (var id = 0; id < CurrentFrame.GaSpaceDimension; id++)
            {
                //var coefName = "Coef" + GaUtils.ID_To_BinaryString(CurrentFrame.VSpaceDimension, id);
                var coefName = "Coef" + id;

                s.AppendLine(template.GenerateText("coef_name", coefName));
            }

            return(s.ToString());
        }
예제 #11
0
        private string GenerateSubtractMethod()
        {
            var resultId = ClassData.ClassId | CalcClassData.ClassId;

            var resultClassData = MvLibraryGenerator.MultivectorClassesData[resultId];

            var codeText = GenerateSubtractMethodCode(resultClassData);

            var template = new ParametricComposer("#", "#", BilinearTemplateText);

            var composer = new LinearComposer();

            composer.Append(
                template,
                "result_type", resultClassData.ClassName,
                "op_name", "Subtract",
                "mv_class_name", CalcClassData.ClassName,
                "code", codeText
                );

            return(composer.ToString());
        }
예제 #12
0
파일: LinearUtils.cs 프로젝트: phreed/GMac
        public static LinearComposer AppendAtNewLine(this LinearComposer textBuilder, ParametricComposer template, params string[] parametersValues)
        {
            var text = template.GenerateText(parametersValues);

            return(textBuilder.AppendAtNewLine(text));
        }
예제 #13
0
파일: LinearUtils.cs 프로젝트: phreed/GMac
        public static LinearComposer AppendNewLine(this LinearComposer textBuilder, ParametricComposer template, IParametericComposerValueSource parametersValues)
        {
            var text = template.GenerateText(parametersValues);

            return(textBuilder.AppendNewLine(text));
        }
예제 #14
0
파일: LinearUtils.cs 프로젝트: phreed/GMac
        public static LinearComposer AppendNewLine(this LinearComposer textBuilder, ParametricComposer template, IDictionary <string, string> parametersValues)
        {
            var text = template.GenerateText(parametersValues);

            return(textBuilder.AppendNewLine(text));
        }