internal bool LookupSubspaceBySignature(BooleanPattern signature, out GMacFrameSubspace outSymbol) { outSymbol = FrameSubspaces.FirstOrDefault(x => x.SubspaceSignaturePattern == signature); return(ReferenceEquals(outSymbol, null) == false); }
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); } }
/// <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)); }
/// <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); }
/// <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); }
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; }
/// <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)); }
/// <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); }
internal GMacFrameSubspace(string subspaceName, LanguageScope frameScope, BooleanPattern signature) : base(subspaceName, frameScope, RoleNames.FrameSubspace) { SubspaceSignaturePattern = signature; }