Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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(")");
        }
Exemple #4
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        /// <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();
                }
            }
        }
Exemple #8
0
 internal static AstValueStructure ToAstValueStructure(this ValueStructureSparse expr)
 {
     return(new AstValueStructure(expr));
 }
Exemple #9
0
 internal AstValueStructure(ValueStructureSparse value)
 {
     AssociatedStructureValue = value;
 }