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(); }
public static DotGraph ToDependenciesGraphViz(this AstFrameMultivector mvType) { var visitor = new TypeDependenciesToGraphViz(); visitor.Visit(mvType.GMacType); return(visitor.Graph); }
public TreeNode Visit(AstFrameMultivector item) { var node = new TreeNode(item.Name) { Tag = item, ImageKey = @"Frame64.png", SelectedImageKey = @"Frame64.png" }; return(node); }
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); }
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("}"); }
/// <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); }
private GMacMultivectorBinding(AstFrameMultivector patternType) { BaseFrameMultivector = patternType; }
/// <summary> /// Create an empty multivector pattern /// </summary> /// <param name="patternType"></param> /// <returns></returns> public static GMacMultivectorBinding Create(AstFrameMultivector patternType) { return(new GMacMultivectorBinding(patternType)); }
/// <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)); }