示例#1
0
        public string Visit(AstFrameMultivector item)
        {
            var composer = CreateColumnsComposer();

            composer
            .AppendToColumns("Multivector Type Name:", item.AccessName)
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Basis Blades:",
                item
                    .ParentFrame
                    .BasisBlades()
                    .OrderBy(b => b.Grade)
                    .ThenBy(b => b.Index)
                    .Select(t => t.Name)
                    .Concatenate(Environment.NewLine)
                )
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Types depending on this multivector type:",
                _typeDepGraph
                .GetAllUserItems(item.GMacType)
                .Select(d => d.BaseItem.GMacTypeSignature)
                .Concatenate(Environment.NewLine)
                );

            return composer.GenerateText();
        }
示例#2
0
        public static DotGraph ToDependenciesGraphViz(this AstFrameMultivector mvType)
        {
            var visitor = new TypeDependenciesToGraphViz();

            visitor.Visit(mvType.GMacType);

            return(visitor.Graph);
        }
示例#3
0
        public TreeNode Visit(AstFrameMultivector item)
        {
            var node = new TreeNode(item.Name)
            {
                Tag              = item,
                ImageKey         = @"Frame64.png",
                SelectedImageKey = @"Frame64.png"
            };

            return(node);
        }
示例#4
0
 private void AddMultivectorCoefs(string parentNodeName, AstFrameMultivector mvClass)
 {
     Graph
     .AddNode(Graph.NewNodeName())
     .SetLabel(
         Graph.Table(
             "Scalar",
             Graph.SimpleTable("scalar", "Coefficients"),
             mvClass
             .ParentFrame
             .BasisBladesSortedByGrade()
             .Select(item => item.CoefName)
             )
         )
     .AddEdgeFrom(parentNodeName);
 }
示例#5
0
        private void GenerateFrameMultivectorCode(AstFrameMultivector mvInfo)
        {
            ActiveFileTextComposer.AppendLineAtNewLine(@"public sealed class " + mvInfo.Name);
            ActiveFileTextComposer.AppendLineAtNewLine("{");
            ActiveFileTextComposer.IncreaseIndentation();
            ActiveFileTextComposer.AppendLineAtNewLine(@"public readonly " + GMacLanguage.ScalarTypeName + "[] Coef = new " + GMacLanguage.ScalarTypeName + "[" + mvInfo.ParentFrame.GaSpaceDimension + "];");
            ActiveFileTextComposer.AppendLineAtNewLine();
            ActiveFileTextComposer.AppendLineAtNewLine();

            //Use a parametric text template instead of a direct logging approach
            //Set template parameters values
            MultivectorTemplate["gadim"] = mvInfo.ParentFrame.GaSpaceDimension.ToString();

            //Generate text from the template into the code
            ActiveFileTextComposer.AppendAtNewLine(MultivectorTemplate.GenerateText());
            ActiveFileTextComposer.AppendLine();

            ActiveFileTextComposer.DecreaseIndentation();
            ActiveFileTextComposer.AppendLineAtNewLine("}");
        }
示例#6
0
        /// <summary>
        /// Find a frame multivector given a text reference starting at the current scope information
        /// </summary>
        /// <param name="symbolName"></param>
        /// <returns></returns>
        public AstFrameMultivector FrameMultivector(string symbolName)
        {
            symbolName = symbolName.Trim();

            AstFrameMultivector symbolInfo;

            LanguageSymbol symbol;

            if (_symbolsCache.TryGetValue(symbolName, out symbol))
            {
                symbolInfo = new AstFrameMultivector(symbol as GMacFrameMultivector);
            }
            else
            {
                symbolInfo = _expressionCompiler.GetFrameMultivector(symbolName);

                AddToSymbolsCache(symbolName, symbolInfo.AssociatedFrameMultivector);
            }

            this.ReportNormal("Request Multivector Type " + symbolName.DoubleQuote(), symbolInfo.IsNotNullAndValid());

            return(symbolInfo);
        }
示例#7
0
 private GMacMultivectorBinding(AstFrameMultivector patternType)
 {
     BaseFrameMultivector = patternType;
 }
示例#8
0
 /// <summary>
 /// Create an empty multivector pattern
 /// </summary>
 /// <param name="patternType"></param>
 /// <returns></returns>
 public static GMacMultivectorBinding Create(AstFrameMultivector patternType)
 {
     return(new GMacMultivectorBinding(patternType));
 }
示例#9
0
文件: AstType.cs 项目: phreed/GMac
 /// <summary>
 /// True if this is a valid type exactly like the given multivector type
 /// </summary>
 /// <param name="astType"></param>
 /// <returns></returns>
 public bool IsSameType(AstFrameMultivector astType)
 {
     return(IsValid && astType.IsNotNullAndValid() && AssociatedType.IsSameType(astType.AssociatedFrameMultivector));
 }