Пример #1
0
        private void GenerateFrameCode(AstFrame frameInfo)
        {
            Progress.Enabled = true;
            var progressId = this.ReportStart(
                "Generating code files for frame " + frameInfo.AccessName
                );

            CurrentFrame = frameInfo;

            CurrentFrameName = GetSymbolTargetName(CurrentFrame);

            CodeFilesComposer.DownFolder(CurrentFrameName);


            InitializeMultivectorClassesData();

            GenerateBaseMvClassFile();

            foreach (var classData in MultivectorClassesData.Values)
            {
                GenerateDerivedMvClassFiles(classData);
            }

            //GenerateFctoredBladeFiles();

            //GenerateOutermorphismFiles();


            CodeFilesComposer.UpFolder();

            Progress.Enabled = true;
            this.ReportFinish(progressId);
        }
Пример #2
0
        private void GenerateFrameCode(AstFrame frameInfo)
        {
            Progress.Enabled = true;
            var progressId = this.ReportStart(
                "Generating code files for frame " + frameInfo.AccessName
                );

            CurrentFrame = frameInfo;

            CurrentFrameName = GetSymbolTargetName(CurrentFrame);

            CodeFilesComposer.DownFolder(CurrentFrameName);


            GenerateBladeFiles();

            GenerateVectorFiles();

            GenerateFctoredBladeFiles();

            GenerateOutermorphismFiles();


            CodeFilesComposer.UpFolder();

            Progress.Enabled = true;
            this.ReportFinish(progressId);
        }
Пример #3
0
        private void GenerateFctoredBladeFiles()
        {
            var progressId = this.ReportStart(
                "Generating FactoredBlade class code files for frame " + CurrentFrame.AccessName
                );

            CodeFilesComposer.DownFolder("FactoredBlade");

            GenerateFctoredBladeClassFile();

            CodeFilesComposer.UpFolder();

            this.ReportFinish(progressId);
        }
Пример #4
0
        private void GenerateVectorFiles()
        {
            int progressId = this.ReportStart(
                "Generating Vector class code files for frame " + CurrentFrame.AccessName
                );

            CodeFilesComposer.DownFolder("Vector");

            GenerateVectorClassFile();

            CodeFilesComposer.UpFolder();

            this.ReportFinish(progressId);
        }
Пример #5
0
        private void GenerateFactorMethod(int inGrade, int inId, AstMacro gmacMacroInfo)
        {
            CodeFilesComposer.DownFolder("Factor");

            CodeFilesComposer.InitalizeFile("Factor" + inId + ".cs");

            var fileGen = new FactorMethodFileGenerator(this, inGrade, inId, gmacMacroInfo);

            fileGen.Generate();

            CodeFilesComposer.UnselectActiveFile();

            CodeFilesComposer.UpFolder();
        }
Пример #6
0
        protected override void ComposeTextFiles()
        {
            var framesList = SelectedSymbols.Cast <AstFrame>();

            CodeFilesComposer.DownFolder("GMacDSL");

            foreach (var frame in framesList)
            {
                CodeFilesComposer.InitalizeFile("frame_" + GetSymbolTargetName(frame) + ".gmac");

                GenerateFrameCode(frame);

                CodeFilesComposer.UnselectActiveFile();
            }

            CodeFilesComposer.UpFolder();
        }
Пример #7
0
        private void GenerateNamespaceCode(AstNamespace namespaceInfo)
        {
            _currentNamespace = namespaceInfo;

            CodeFilesComposer.DownFolder(namespaceInfo.Name);

            CodeFilesComposer.InitalizeFile(namespaceInfo.Name + "Utils.cs", GenerateCodeFileStartCode);

            ActiveFileTextComposer.AppendLineAtNewLine(@"public static class " + namespaceInfo.Name + "Utils");
            ActiveFileTextComposer.AppendLineAtNewLine("{");
            ActiveFileTextComposer.IncreaseIndentation();

            foreach (var constantInfo in namespaceInfo.ChildConstants)
            {
                GenerateConstantCode(constantInfo);
            }

            foreach (var macroInfo in namespaceInfo.ChildMacros)
            {
                GenerateMacroCode(macroInfo);
            }

            ActiveFileTextComposer.DecreaseIndentation();
            ActiveFileTextComposer.AppendLineAtNewLine("}");

            CodeFilesComposer.UnselectActiveFile(GenerateCodeFileEndCode);

            foreach (var frameInfo in namespaceInfo.ChildFrames)
            {
                GenerateFrameCode(frameInfo);
            }

            foreach (var structureInfo in namespaceInfo.ChildStructures)
            {
                GenerateStructureCode(structureInfo);
            }

            foreach (var childNamespaceInfo in namespaceInfo.ChildNamespaces)
            {
                GenerateNamespaceCode(childNamespaceInfo);
            }

            CodeFilesComposer.UpFolder();
        }
Пример #8
0
        private void GenerateApplyVersorFunction(string opName, string funcName, int inGrade1, int inGrade2, int outGrade)
        {
            CodeFilesComposer.DownFolder(opName);

            CodeFilesComposer.InitalizeFile(funcName + ".cs");

            var fileGen = new ApplyVersorMethodFileGenerator(
                this,
                opName,
                funcName,
                inGrade1,
                inGrade2,
                outGrade
                );

            fileGen.Generate();

            CodeFilesComposer.UnselectActiveFile();

            CodeFilesComposer.UpFolder();
        }
Пример #9
0
        private void GenerateDerivedMvClassFiles(MvClassData classData)
        {
            CodeFilesComposer.DownFolder(classData.ClassName);

            CodeFilesComposer.InitalizeFile(classData.ClassName + ".cs");

            DerivedMvClassFileGenerator.Generate(this, classData);

            CodeFilesComposer.UnselectActiveFile();

            foreach (var classData2 in MultivectorClassesData.Values)
            {
                CodeFilesComposer.InitalizeFile(classData.ClassName + "Calc" + classData2.ClassId + ".cs");

                DerivedMvClassCalcFileGenerator.Generate(this, classData, classData2);

                CodeFilesComposer.UnselectActiveFile();
            }

            CodeFilesComposer.UpFolder();
        }
Пример #10
0
        internal void GenerateBilinearProductMethodFile(string opName, string methodName, int inGrade1, int inGrade2, int outGrade)
        {
            CodeFilesComposer.DownFolder(opName);

            CodeFilesComposer.InitalizeFile(methodName + ".cs");

            var fileGen =
                new BilinearProductMethodFileGenerator(
                    this,
                    opName,
                    methodName,
                    inGrade1,
                    inGrade2,
                    outGrade
                    );

            fileGen.Generate();

            CodeFilesComposer.UnselectActiveFile();

            CodeFilesComposer.UpFolder();
        }
Пример #11
0
        private void GenerateOutermorphismFiles()
        {
            var progressId = this.ReportStart(
                "Generating Outermorphism class code files for frame " + CurrentFrame.AccessName
                );

            CodeFilesComposer.DownFolder("Outermorphism");

            GenerateOutermorphismClassFile();

            CodeFilesComposer.DownFolder("Apply");

            for (var inGrade = 1; inGrade <= CurrentFrame.VSpaceDimension; inGrade++)
            {
                GenerateOutermorphismApplyMethodFile(inGrade);
            }

            CodeFilesComposer.UpFolder();

            CodeFilesComposer.UpFolder();

            this.ReportFinish(progressId);
        }
Пример #12
0
        //TODO: Meet and join algorithm without factorization
        //Given blades A and B of grades gA and gB
        //
        //EGPDual_gAgBgX is given by ((A gp B) lcp reverse(I)).@GgX@
        //
        //1) find grade of C = (A dp B) call it gC. Use DPGrade() function
        //2) compute the blade D = EGPDual_gAgBgD(A, B) with grade gD = n - gC
        //that is, D = dual(A dp B)
        //3) find grade of S = D dp A call it gS
        //4) compute the blade S = EGP_gDgAgS(S, A) with grade gS
        //that is, S = dual(A dp B) dp A
        //5) Meet = S lcp B
        //6) Join = S ^ B

        private void GenerateBladeFiles()
        {
            Progress.Enabled = true;
            var progressId = this.ReportStart(
                "Generating Blade class code files for frame " + CurrentFrame.AccessName
                );

            CodeFilesComposer.DownFolder("Blade");


            GenerateBladeClassFile();

            GenerateBladeStaticUtilsFile();


            GenerateBladeIsZeroMethodsFile();

            GenerateBladeEqualsMethodsFile();

            GenerateBladeInvolutionMethodsFile();

            GenerateBladeNormMethodsFile();

            GenerateBladeMiscMethodsFile();


            GenerateOuterProductFiles();

            GenerateLeftContractionProductFiles();

            GenerateEuclideanLeftContractionProductFiles();

            GenerateRightContractionProductFiles();

            GenerateEuclideanRightContractionProductFiles();


            GenerateScalarProductFiles();

            GenerateEuclideanScalarProductFiles();


            GenerateGeometricProductFiles();

            GenerateEuclideanGeometricProductFiles();

            GenerateEuclideanGeometricProductDualFiles();


            GenerateDeltaProductFile();

            GenerateDeltaProductDualFile();

            GenerateSelfEuclideanGeometricProductFile();

            GenerateApplyVersorFiles();

            GenerateFactorFiles();

            //TODO: Create blade subroutines to reflect blades in other blades:

            /*
             *  If A, B are blades, we can define several blade-redlection GA relations (table 7.1):
             *
             *  //This relation does not take orientation of resulting blade into consideration
             *  A.ReflectInBlade(B) => B gp A gp reverse(B)/norm2(B)
             *
             *  //These take the orientation of the result into consideration
             *  A.DirectReflectInDirectBlade(B) => -1 ^ (grade(A) * [grade(B) + 1]) * A.ReflectInBlade(B)
             *  A.DirectReflectInDualBlade(B) => -1 ^ (grade(A) * grade(B)) * A.ReflectInBlade(B)
             *  A.DualReflectInDirectBlade(B) => -1 ^ ([n - 1] * [grade(A) + 1] * [grade(B) + 1]) * A.ReflectInBlade(B)
             *  A.DualReflectInDualBlade(B) => -1 ^ ([grade(A) + 1] * grade(B)) * A.ReflectInBlade(B)
             */

            CodeFilesComposer.UpFolder();

            Progress.Enabled = true;
            this.ReportFinish(progressId);
        }