public ValueStructureSparse ToValue(StringSequenceTemplate varNameTemplate) { var structValue = ValueStructureSparse.Create(BaseStructure.AssociatedStructure); foreach (var pair in _patternDictionary) { var scalarPattern = pair.Value as GMacScalarBinding; if (scalarPattern != null) { structValue[pair.Key] = scalarPattern.ToValue(varNameTemplate).AssociatedValue; continue; } var mvPattern = pair.Value as GMacMultivectorBinding; if (mvPattern != null) { structValue[pair.Key] = mvPattern.ToValue(varNameTemplate).AssociatedValue; continue; } var structPattern = pair.Value as GMacStructureBinding; if (structPattern != null) { structValue[pair.Key] = structPattern.ToValue(varNameTemplate); } } return(structValue); }
/// <summary> /// Construct the composite value of a structure value access from the table items. /// If no low-level items are found this method returns a default structure sparse value /// </summary> /// <param name="valueAccess"></param> /// <returns></returns> public ValueStructureSparse ReadRhsStructureValue(LanguageValueAccess valueAccess) { var structure = (GMacStructure)valueAccess.ExpressionType; var structValue = ValueStructureSparse.Create(structure); foreach (var dataMember in structure.DataMembers) { ILanguageValue dataMemberValue = null; var childValueAccess = valueAccess.Duplicate().Append(dataMember.ObjectName, dataMember.SymbolType); if (dataMember.SymbolType is TypePrimitive) { dataMemberValue = ReadRHSPrimitiveValue_ExistingOnly(childValueAccess); } else if (dataMember.SymbolType is GMacFrameMultivector) { dataMemberValue = ReadRHSMultivectorValue_ExistingOnly(childValueAccess); } else if (dataMember.SymbolType is GMacStructure) { dataMemberValue = ReadRHSStructureValue_ExistingOnly(childValueAccess); } if (ReferenceEquals(dataMemberValue, null) == false) { structValue[dataMember.ObjectName] = dataMemberValue; } } return(structValue); }
public void Visit(ValueStructureSparse value) { Log.Append(value.ValueStructureType.SymbolAccessName); Log.Append("("); var flag = false; foreach (var pair in value) { if (flag) { Log.Append(", "); } else { flag = true; } Log.Append(pair.Key); Log.Append(" = "); pair.Value.AcceptVisitor(this); } Log.Append(")"); }
public override ILanguageValue CreateDefaultValue(ILanguageType langType) { if (ReferenceEquals(langType, null)) { throw new ArgumentNullException(); } if (langType.IsSameType(BooleanType)) { return(ValuePrimitive <bool> .Create((TypePrimitive)langType, false)); } if (langType.IsSameType(IntegerType)) { return(ValuePrimitive <int> .Create((TypePrimitive)langType, 0)); } if (langType.IsSameType(ScalarType)) { return(ValuePrimitive <MathematicaScalar> .Create((TypePrimitive)langType, SymbolicUtils.Constants.Zero)); } var typeStructure = langType as GMacStructure; if (typeStructure != null) { var structure = typeStructure; var valueSparse = ValueStructureSparse.Create(structure); //This code is not required for a sparse structure value //foreach (var data_member in structure.DataMembers) // value_sparse[data_member.ObjectName] = this.CreateDefaultValue(data_member.SymbolType); return(valueSparse); } if (!(langType is GMacFrameMultivector)) { throw new InvalidOperationException("GMac type not recognized!"); } var mvType = (GMacFrameMultivector)langType; var value = GMacValueMultivector.CreateZero(mvType); //This code is not required for a sparse multivector value //for (int id = 0; id < mv_type.ParentFrame.GASpaceDimension; id++) // value[id] = SymbolicUtils.Constants.Zero; return(value); }
public TreeNode Visit(ValueStructureSparse value) { var node = new TreeNode("<STRUCTURE_VALUE> " + value.ValueStructureType.TypeSignature) { Tag = value }; foreach (var pair in value) { node.Nodes.Add(Visit(pair.Key, pair.Value)); } return(node); }
internal static SimpleTreeBranchDictionaryByName <string> ToSimpleStringTree(this ValueStructureSparse value) { var structure = value.ValueStructureType; var tree = new SimpleTreeBranchDictionaryByName <string>(); foreach (var pair in value) { var dataMember = structure.GetDataMember(pair.Key); var node = ToSimpleStringTree(pair.Value); tree.Add(dataMember.DefinitionIndex, dataMember.ObjectName, dataMember.SymbolTypeSignature, node); } return(tree); }
/// <summary> /// Set the values associated with a composite structure local variable or output parameter's low-level items /// </summary> /// <param name="valueAccess"></param> /// <param name="structValue"></param> public void WriteLhsStructureValue(LanguageValueAccess valueAccess, ValueStructureSparse structValue) { var structure = (GMacStructure)valueAccess.ExpressionType; foreach (var dataMember in structure.DataMembers) { ILanguageValue dataMemberValue; if (!structValue.TryGetValue(dataMember.ObjectName, out dataMemberValue)) { continue; } var childValueAccess = valueAccess.Duplicate().Append(dataMember.ObjectName, dataMember.SymbolType); if (dataMember.SymbolType is TypePrimitive) { WriteLhsPrimitiveValue(childValueAccess, (ValuePrimitive <MathematicaScalar>)dataMemberValue); } else if (dataMember.SymbolType is GMacFrameMultivector) { WriteLhsMultivectorValue(childValueAccess, (GMacValueMultivector)dataMemberValue); } else if (dataMember.SymbolType is GMacStructure) { WriteLhsStructureValue(childValueAccess, (ValueStructureSparse)dataMemberValue); } else { throw new InvalidOperationException(); } } }
internal static AstValueStructure ToAstValueStructure(this ValueStructureSparse expr) { return(new AstValueStructure(expr)); }
internal AstValueStructure(ValueStructureSparse value) { AssociatedStructureValue = value; }