Exemplo n.º 1
0
        /// <summary>
        /// Evaluate a multivector construction operation
        /// </summary>
        /// <param name="mvTypeCons"></param>
        /// <param name="operands"></param>
        /// <returns></returns>
        private GMacValueMultivector EvaluateBasicPolyadicMultivectorConstructor(GMacFrameMultivectorConstructor mvTypeCons, OperandsByIndex operands)
        {
            GMacValueMultivector value;

            if (mvTypeCons.HasDefaultValueSource)
            {
                value =
                    (GMacValueMultivector)mvTypeCons
                    .DefaultValueSource
                    .AcceptVisitor(this)
                    .DuplicateValue(true);
            }

            else
            {
                value =
                    (GMacValueMultivector)GMacRootAst
                    .CreateDefaultValue(mvTypeCons.MultivectorType);
            }

            foreach (var pair in operands.OperandsDictionary)
            {
                var rhsValue = (ValuePrimitive <MathematicaScalar>)pair.Value.AcceptVisitor(this);

                //TODO: Is it necessary to make a copy of the RHS value in all cases?
                value[pair.Key] = (ValuePrimitive <MathematicaScalar>)rhsValue.DuplicateValue(true);
            }

            return(value);
        }
Exemplo n.º 2
0
        private ILanguageExpression CompileMultivectorConstructor(GMacFrameMultivectorConstructor mvTypeCons, OperandsByIndex operands)
        {
            ILanguageExpressionAtomic compiledDefaultValueSource = null;

            if (mvTypeCons.HasDefaultValueSource)
            {
                compiledDefaultValueSource =
                    (ILanguageExpressionAtomic)CompileExpression(mvTypeCons.DefaultValueSource);
            }

            var compiledOperands = OperandsByIndex.Create();

            foreach (var pair in operands.OperandsDictionary)
            {
                var compiledRhsExpr =
                    (ILanguageExpressionAtomic)CompileExpression(pair.Value);

                compiledOperands.AddOperand(pair.Key, compiledRhsExpr);
            }

            return(mvTypeCons.MultivectorType.CreateConstructorExpression(compiledDefaultValueSource, compiledOperands));
        }
Exemplo n.º 3
0
        internal void Generate_BasicPolyadic_FrameMultivectorConstruction(GMacFrameMultivectorConstructor mvTypeCons, OperandsByIndex operands)
        {
            //this.Log.Append(mv_type_cons.OperatorName);
            Log.Append("{");

            if (mvTypeCons.HasDefaultValueSource)
            {
                mvTypeCons.DefaultValueSource.AcceptVisitor(this);
            }

            Log.Append("}");
            Log.Append("(");

            var flag = false;

            foreach (var pair in operands.OperandsDictionary)
            {
                if (flag)
                {
                    Log.Append(", ");
                }
                else
                {
                    flag = true;
                }

                Log.Append("#");
                Log.Append(mvTypeCons.MultivectorType.ParentFrame.BasisBladeName(pair.Key));
                Log.Append("#");

                Log.Append(" = ");

                pair.Value.AcceptVisitor(this);
            }

            Log.Append(")");
        }