Exemple #1
0
        public override void ToTextTree(LinearComposer log)
        {
            log.AppendLine("{");

            log.IncreaseIndentation();

            var flag = false;

            foreach (var pair in _chidNodesDictionary)
            {
                if (flag)
                {
                    log.Append(", ");
                }
                else
                {
                    flag = true;
                }

                log.Append(Key + " : ");
                pair.Value.ToTextTree(log);
            }

            log.DecreaseIndentation();

            log.AppendAtNewLine("}");
        }
Exemple #2
0
        private string GenerateClassCode()
        {
            var composer = new LinearComposer();

            composer.AppendLineAtNewLine(GenerateDeclareCoefsText());

            composer.AppendLineAtNewLine(GenerateAbstractCoefsText());

            composer.AppendAtNewLine(
                MainCodeTemplate,
                "mv_class_name", ClassData.ClassName,
                "mv_class_id", ClassData.ClassId,
                "frame", CurrentFrameName,
                "double", GMacLanguage.ScalarTypeName,
                "iszero_code", GenerateIsZeroCode(),
                "norm2_code", GenerateNorm2Code(),
                "isequal_cases", GenerateAbstractMethodCases("IsEqual"),
                "op_cases", GenerateAbstractMethodCases("OP"),
                "gp_cases", GenerateAbstractMethodCases("GP"),
                "lcp_cases", GenerateAbstractMethodCases("LCP"),
                "rcp_cases", GenerateAbstractMethodCases("RCP"),
                "sp_cases", GenerateAbstractMethodCases("SP"),
                "add_cases", GenerateAbstractMethodCases("Add"),
                "subtract_cases", GenerateAbstractMethodCases("Subtract")
                );

            return(composer.ToString());
        }
        public override void ToString(LinearComposer textBuilder)
        {
            textBuilder.AppendLine("{");
            textBuilder.IncreaseIndentation();

            var flag = false;

            foreach (var pair in _nodes)
            {
                if (flag)
                {
                    textBuilder.AppendLine(",");
                }
                else
                {
                    flag = true;
                }

                textBuilder.Append(pair.Key.ToString());
                pair.Value.ToString(textBuilder);
            }

            textBuilder.DecreaseIndentation();
            textBuilder.AppendAtNewLine("}");
        }
Exemple #4
0
        /// <summary>
        /// Generate a string containing some statistics about the final text inside
        /// the files of this composer
        /// </summary>
        /// <returns></returns>
        public string GenerateStatistics()
        {
            var composer = new LinearComposer();

            composer
            .AppendLineAtNewLine("Composer Log:")
            .AppendLineAtNewLine(_log.ToString())
            .AppendLine();

            var totalLines      = 0;
            var totalCharacters = 0;

            foreach (var pair in _fileComposersDictionary)
            {
                int linesCount, charsCount;

                composer.AppendAtNewLine(
                    pair.Value.GenerateStatistics(RootFolder, FilesEncoding, out linesCount, out charsCount)
                    );

                totalLines      += linesCount;
                totalCharacters += charsCount;
            }

            composer
            .AppendLine()
            .AppendAtNewLine("Total Files: ")
            .AppendLine(_fileComposersDictionary.Count.ToString("###,###,###,###"))
            .AppendAtNewLine("Total Lines: ")
            .AppendLine(totalLines.ToString("###,###,###,###"))
            .AppendAtNewLine("Total Characters: ")
            .AppendLine(totalCharacters.ToString("###,###,###,###"));

            return(composer.ToString());
        }
Exemple #5
0
        public override void ToString(LinearComposer textBuilder)
        {
            textBuilder.Append("{");
            textBuilder.IncreaseIndentation();

            foreach (var item in _branches)
            {
                item.ToString(textBuilder);
            }

            textBuilder.DecreaseIndentation();
            textBuilder.AppendAtNewLine("}");
        }
Exemple #6
0
        private string GenerateClassCode()
        {
            var macroNames = new[]
            {
                DefaultMacro.EuclideanBinary.OuterProduct,
                DefaultMacro.MetricBinary.GeometricProduct,
                DefaultMacro.MetricBinary.LeftContractionProduct,
                DefaultMacro.MetricBinary.RightContractionProduct,
                DefaultMacro.MetricBinary.ScalarProduct
            };

            var composer = new LinearComposer();

            if (MvLibraryGenerator.MacroGenDefaults.AllowGenerateMacroCode)
            {
                foreach (var macroName in macroNames)
                {
                    composer.AppendAtNewLine(
                        GenerateProductMethod(macroName)
                        );
                }
            }

            composer.AppendAtNewLine(
                GenerateAddMethod()
                );

            composer.AppendAtNewLine(
                GenerateSubtractMethod()
                );

            composer.AppendAtNewLine(
                GenerateIsEqualMethod()
                );

            return(composer.ToString());
        }
Exemple #7
0
        /// <summary>
        /// This method generates a full report regarding any errors in the structure
        /// of this AST
        /// </summary>
        /// <returns></returns>
        public string VerifyAst()
        {
            var composer = new LinearComposer();

            //Chack for macros without a command body
            foreach (var macro in this.Macros())
            {
                if (macro.SymbolBody == null)
                {
                    composer
                    .AppendAtNewLine("Macro <")
                    .Append(macro.SymbolAccessName)
                    .AppendLine("> Has null Command Body!");
                }
            }

            return(composer.ToString());
        }
Exemple #8
0
        public override string ToString()
        {
            var textComposer = new LinearComposer();

            var idStack   = new Stack <ulong>();
            var nodeStack = new Stack <IGMacBinaryTreeNode <T> >();

            idStack.Push(0ul);
            nodeStack.Push(this);

            while (nodeStack.Count > 0)
            {
                var id    = idStack.Pop();
                var node  = nodeStack.Pop();
                var level = TreeDepth - node.TreeDepth;

                if (node.IsLeafNode)
                {
                    textComposer
                    .AppendAtNewLine("<")
                    .Append(id.PatternToString(level))
                    .Append("> ")
                    .Append("".PadRight(level * 2, ' '))
                    .Append("Leaf { ")
                    .Append(node.Value.ToString())
                    .AppendLine(" }");

                    continue;
                }

                if (node.TreeDepth == TreeDepth)
                {
                    textComposer
                    .AppendAtNewLine("<")
                    .Append("".PadRight(TreeDepth, '-'))
                    .Append("> ")
                    .AppendLine("Root");
                }
                else
                {
                    textComposer
                    .AppendAtNewLine("<")
                    .Append(
                        id
                        .PatternToString(TreeDepth)
                        .Substring(0, level)
                        .PadRight(TreeDepth, '-')
                        )
                    .Append("> ")
                    .Append("".PadRight(level * 2, ' '))
                    .AppendLine("Node");
                }

                if (node.HasChildNode1)
                {
                    idStack.Push(id | node.ChildNode1.BitMask);
                    nodeStack.Push(node.ChildNode1);
                }

                if (node.HasChildNode0)
                {
                    idStack.Push(id);
                    nodeStack.Push(node.ChildNode0);
                }
            }

            return(textComposer.ToString());
        }
Exemple #9
0
 public static void AddTest(string message, MathematicaScalar result)
 {
     Log.AppendAtNewLine(message);
     Log.AppendLine(DescribeScalar(result));
     Log.AppendLine();
 }
        public string ToTreeString()
        {
            var textComposer = new LinearComposer();

            var levelStack = new Stack <int>();
            var idStack    = new Stack <int>();
            var nodeStack  = new Stack <IGaTreeMultivectorNode>();

            levelStack.Push(0);
            idStack.Push(0);
            nodeStack.Push(this);

            while (nodeStack.Count > 0)
            {
                var level = levelStack.Pop();
                var id    = idStack.Pop();
                var node  = nodeStack.Pop();

                var leafNode = node as GaTreeMultivectorLeaf;
                if (!ReferenceEquals(leafNode, null))
                {
                    textComposer
                    .AppendAtNewLine("".PadLeft(level * 2, ' '))
                    .Append("Leaf <")
                    .Append(id.PatternToString(level))
                    .Append("> { ")
                    .Append(id.BasisBladeName())
                    .Append(" = ")
                    .Append(leafNode.Value.ExpressionText)
                    .AppendLine(" }");

                    continue;
                }

                if (node.IsRoot)
                {
                    textComposer
                    .AppendAtNewLine("".PadLeft(level * 2, ' '))
                    .AppendLine("Multivector");
                }
                else
                {
                    textComposer
                    .AppendAtNewLine("".PadLeft(level * 2, ' '))
                    .Append("Node <")
                    .Append(id.PatternToString(level))
                    .AppendLine(">");
                }

                var rightChild = node.GetRightChild();
                if (!ReferenceEquals(rightChild, null))
                {
                    levelStack.Push(level + 1);
                    idStack.Push(id);
                    nodeStack.Push(rightChild);
                }

                var leftChild = node.GetLeftChild();
                if (!ReferenceEquals(leftChild, null))
                {
                    levelStack.Push(level + 1);
                    idStack.Push((1 << level) | id);
                    nodeStack.Push(leftChild);
                }
            }

            return(textComposer.ToString());
        }