Example #1
0
        public TreeNode Visit(AstFrameSubspace item)
        {
            var node = new TreeNode(item.Name)
            {
                Tag              = item,
                ImageKey         = @"Subspace64.png",
                SelectedImageKey = @"Subspace64.png"
            };

            return(node);
        }
Example #2
0
        /// <summary>
        /// Create a multivector pattern binding all IDs in the given subspace to variables
        /// </summary>
        /// <param name="subspace"></param>
        /// <returns></returns>
        public static GMacMultivectorBinding Create(AstFrameSubspace subspace)
        {
            var mvPattern = new GMacMultivectorBinding(subspace.FrameMultivector);

            foreach (var id in subspace.AssociatedSubspace.SubspaceSignaturePattern.TrueIndexes)
            {
                mvPattern.BindCoefToVariable(id);
            }

            return(mvPattern);
        }
Example #3
0
 public void Visit(AstFrameSubspace subspace)
 {
     Graph
     .AddNode("Subspace " + subspace.Name)
     .SetLabel(
         Graph.Table(
             "Subspace",
             "Subspace: " + subspace.Name,
             subspace.BasisBlades.Select(item => item.Name).ToArray()
             )
         )
     .AddEdgeFrom("Basis Blades");
 }
Example #4
0
        public string Visit(AstFrameSubspace item)
        {
            var composer = CreateColumnsComposer();

            composer
            .AppendToColumns("Subspace Name:", item.AccessName)
            .AppendEmptyStringsToColumns()
            .AppendToColumns(
                "Basis Blades:",
                BasisBladesInformationTable(item.BasisBlades.OrderBy(b => b.Grade).ThenBy(b => b.Index))
                );

            return composer.GenerateText();
        }
Example #5
0
        /// <summary>
        /// Find a frame subspace given a text reference starting at the current scope information
        /// </summary>
        /// <param name="symbolName"></param>
        /// <returns></returns>
        public AstFrameSubspace Subspace(string symbolName)
        {
            symbolName = symbolName.Trim();

            AstFrameSubspace symbolInfo;

            LanguageSymbol symbol;

            if (_symbolsCache.TryGetValue(symbolName, out symbol))
            {
                symbolInfo = new AstFrameSubspace(symbol as GMacFrameSubspace);
            }
            else
            {
                symbolInfo = _expressionCompiler.GetSubspace(symbolName);

                AddToSymbolsCache(symbolName, symbolInfo.AssociatedSubspace);
            }

            this.ReportNormal("Request Frame Subspace " + symbolName.DoubleQuote(), symbolInfo.IsNotNullAndValid());

            return(symbolInfo);
        }
Example #6
0
 /// <summary>
 /// If this value access is a multivector this selects components belonging to the given subspace
 /// into a new value access of the same multivector type
 /// </summary>
 /// <param name="subspace"></param>
 /// <returns></returns>
 public AstDatastoreValueAccess SelectMultivectorComponents(AstFrameSubspace subspace)
 {
     return(SelectMultivectorComponents(subspace.BasisBladeIDs));
 }
 /// <summary>
 /// Sets the target variables names for a multivector input\output variable parameter in the code block
 /// </summary>
 /// <param name="valueAccessName"></param>
 /// <param name="subspace"></param>
 /// <param name="getTargetVarName"></param>
 /// <returns></returns>
 public GMacTargetVariablesNaming SetMultivectorParameters(string valueAccessName, AstFrameSubspace subspace, Func <int, string> getTargetVarName)
 {
     return(SetMultivectorParameters(BaseMacro.Parameter(valueAccessName), subspace.BasisBladeIDs, getTargetVarName));
 }
        /// <summary>
        /// Sets the target variables names for a multivector input\output variable parameter in the code block
        /// </summary>
        /// <param name="valueAccess"></param>
        /// <param name="subspace"></param>
        /// <param name="getTargetVarName"></param>
        /// <returns></returns>
        public GMacTargetVariablesNaming SetMultivectorParameters(AstDatastoreValueAccess valueAccess, AstFrameSubspace subspace, Func <int, string> getTargetVarName)
        {
            if (valueAccess.IsNullOrInvalid())
            {
                return(this);
            }

            return(SetMultivectorParameters(valueAccess, subspace.BasisBladeIDs, getTargetVarName));
        }
Example #9
0
 /// <summary>
 /// If the given value access is a multivector this binds a given subspace to variables
 /// </summary>
 /// <param name="valueAccessName"></param>
 /// <param name="subspace"></param>
 /// <returns></returns>
 public GMacMacroBinding BindMultivectorPartToVariables(string valueAccessName, AstFrameSubspace subspace)
 {
     return(BindMultivectorPartToVariables(ToValueAccess(valueAccessName), subspace));
 }
Example #10
0
        /// <summary>
        /// If the given value access is a multivector this binds a given subspace to variables
        /// </summary>
        /// <param name="valueAccess"></param>
        /// <param name="subspace"></param>
        /// <returns></returns>
        public GMacMacroBinding BindMultivectorPartToVariables(AstDatastoreValueAccess valueAccess, AstFrameSubspace subspace)
        {
            if (valueAccess.IsNullOrInvalid())
            {
                throw new ArgumentNullException(nameof(valueAccess));
            }

            if (subspace.IsNullOrInvalid())
            {
                throw new ArgumentNullException(nameof(subspace));
            }

            return(BindToVariables(valueAccess.SelectMultivectorComponents(subspace)));
        }