コード例 #1
0
        internal bool LookupSubspaceBySignature(BooleanPattern signature, out GMacFrameSubspace outSymbol)
        {
            outSymbol =
                FrameSubspaces.FirstOrDefault(x => x.SubspaceSignaturePattern == signature);

            return(ReferenceEquals(outSymbol, null) == false);
        }
コード例 #2
0
ファイル: GMacFrameGenerator.cs プロジェクト: phreed/GMac
        private void translate_Frame_Subspace(ParseTreeNode node)
        {
            try
            {
                Context.MarkCheckPointState();

                Context.PushState(_generatedFrame.ChildSymbolScope, RoleNames.FrameSubspace);

                //Read the name of the new subspace
                var subspaceName = TranslateChildSymbolName(node.ChildNodes[0]);

                BooleanPattern subspacePattern =
                    GMacFrameSubspacePatternGenerator.Translate(Context, node.ChildNodes[1], _generatedFrame);

                var frameSubspace = _generatedFrame.DefineSubspace(subspaceName, subspacePattern);

                frameSubspace.CodeLocation = Context.GetCodeLocation(node);

                Context.PopState();

                Context.UnmarkCheckPointState();
                Context.CompilationLog.ReportNormal("Translated Frame Subspace: " + frameSubspace.SymbolAccessName, ProgressEventArgsResult.Success);
            }
            catch (CompilerException)
            {
                Context.RestoreToCheckPointState();
                Context.CompilationLog.ReportNormal("Translate Frame Subspace Failed: " + _generatedFrame.SymbolAccessName, ProgressEventArgsResult.Failure);
            }
            catch (Exception e)
            {
                Context.RestoreToCheckPointState();
                Context.CompilationLog.ReportError("Translate Frame Subspace Failed With Error: " + _generatedFrame.SymbolAccessName, e);
            }
        }
コード例 #3
0
        /// <summary>
        /// Create a subspace of this frame
        /// </summary>
        /// <param name="symbolName"></param>
        /// <param name="signature"></param>
        /// <returns></returns>
        internal GMacFrameSubspace DefineSubspace(string symbolName, BooleanPattern signature)
        {
            //new FrameSubspace(symbol_name, this.ChildScope, signature)

            //This is to reduce memory usage for frames with high dimensions
            BooleanPattern newSignature;

            LookupSubspaceSignaturePattern(signature, out newSignature);

            return(new GMacFrameSubspace(symbolName, ChildSymbolScope, newSignature));
        }
コード例 #4
0
        /// <summary>
        /// Create the Full GA subspace named @ga@
        /// </summary>
        /// <returns></returns>
        private GMacFrameSubspace DefineDefaultSubspaces_FullGA(GMacFrame frame)
        {
            var idsList = Enumerable.Range(0, frame.GaSpaceDimension).ToList();

            const string subspaceName      = "GA";
            var          subspaceSignature = BooleanPattern.CreateFromTrueIndexes(frame.GaSpaceDimension, idsList);

            var subspace = frame.DefineSubspace(subspaceName, subspaceSignature);

            subspace.AddCodeLocation(Context.GetCodeLocation(frame.ParseNode));

            return(subspace);
        }
コード例 #5
0
        /// <summary>
        /// Search for a child subspace in this frame having the given signature.
        /// If a subspace is found return its signature alse return the given input signature
        /// </summary>
        /// <param name="signature"></param>
        /// <param name="outSignature"></param>
        /// <returns></returns>
        private bool LookupSubspaceSignaturePattern(BooleanPattern signature, out BooleanPattern outSignature)
        {
            var outSymbol =
                FrameSubspaces.FirstOrDefault(x => x.SubspaceSignaturePattern == signature);

            if (ReferenceEquals(outSymbol, null))
            {
                outSignature = signature;
                return(false);
            }

            outSignature = outSymbol.SubspaceSignaturePattern;
            return(true);
        }
コード例 #6
0
ファイル: CheckboxGrid.cs プロジェクト: carlhuth/GenXSource
        private void pm_OnPatternSelectionChanged(object sender, PatternPositionEventArgs e)
        {
            eventLock = true;
            BooleanPattern p = e.Pattern as BooleanPattern;

            if (p == null)
            {
                p = (e.Pattern as DoublePattern).ToBooleanPattern(pm.BasicConfiguration);
            }
            for (int i = 0; i < p.InputPattern.Length && i < grid.Length; i++)
            {
                grid[i].IsChecked = p.InputPattern[i];
            }
            eventLock = false;
        }
コード例 #7
0
        /// <summary>
        /// Create a default subspaces of k-vectors with a given grade and name
        /// </summary>
        private void DefineDefaultSubspaces_KVectors(GMacFrame frame, int grade, string subspaceName)
        {
            var basisCount = FrameUtils.KvSpaceDimension(frame.VSpaceDimension, grade);
            var idsList    = new List <int>(basisCount);

            for (var index = 0; index < basisCount; index++)
            {
                idsList.Add(FrameUtils.BasisBladeId(grade, index));
            }

            var subspaceSignature = BooleanPattern.CreateFromTrueIndexes(frame.GaSpaceDimension, idsList);

            var subspace = frame.DefineSubspace(subspaceName, subspaceSignature);

            subspace.AddCodeLocation(Context.GetCodeLocation(frame.ParseNode));
        }
コード例 #8
0
        /// <summary>
        /// Create the default subspace of odd multivectors named @odd@
        /// </summary>
        /// <returns></returns>
        private GMacFrameSubspace DefineDefaultSubspaces_Odd(GMacFrame frame)
        {
            var idsList = new List <int>(frame.GaSpaceDimension);

            for (var grade = 1; grade <= frame.VSpaceDimension; grade = grade + 2)
            {
                var basisCount = FrameUtils.KvSpaceDimension(frame.VSpaceDimension, grade);

                for (var index = 0; index < basisCount; index++)
                {
                    idsList.Add(FrameUtils.BasisBladeId(grade, index));
                }
            }

            const string subspaceName      = "Odd";
            var          subspaceSignature = BooleanPattern.CreateFromTrueIndexes(frame.GaSpaceDimension, idsList);

            var subspace = frame.DefineSubspace(subspaceName, subspaceSignature);

            subspace.AddCodeLocation(Context.GetCodeLocation(frame.ParseNode));

            return(subspace);
        }
コード例 #9
0
ファイル: GMacFrameSubspace.cs プロジェクト: phreed/GMac
 internal GMacFrameSubspace(string subspaceName, LanguageScope frameScope, BooleanPattern signature)
     : base(subspaceName, frameScope, RoleNames.FrameSubspace)
 {
     SubspaceSignaturePattern = signature;
 }