Beispiel #1
0
 internal static AstFrameMultivector ToAstFrameMultivector(this GMacFrameMultivector mvClass)
 {
     return(new AstFrameMultivector(mvClass));
 }
Beispiel #2
0
        public void Visit(GMacFrameMultivector mvType)
        {
            Log.AppendAtNewLine("frame multivector type ");

            Log.AppendLine(mvType.SymbolAccessName);
        }
Beispiel #3
0
 internal AstFrameMultivector(GMacFrameMultivector mvClass)
 {
     AssociatedFrameMultivector = mvClass;
 }
Beispiel #4
0
        private static ILanguageExpressionAtomic AtomicExpressionToMultivectorAtomicExpression(this CommandBlock commandBlock, GMacFrameMultivector mvType, ILanguageExpressionAtomic oldExpr)
        {
            if (oldExpr.ExpressionType.IsSameType(mvType))
            {
                return(oldExpr);
            }

            if (!oldExpr.ExpressionType.IsNumber())
            {
                throw new InvalidCastException("Cannot convert atomic expression of type " + oldExpr.ExpressionType.TypeSignature + " to a expression of type " + mvType.TypeSignature);
            }

            var valuePrimitive = oldExpr as ValuePrimitive <int>;

            if (valuePrimitive != null)
            {
                return(GMacValueMultivector.CreateScalar(
                           mvType,
                           MathematicaScalar.Create(SymbolicUtils.Cas, valuePrimitive.Value)
                           ));
            }

            var primitive = oldExpr as ValuePrimitive <MathematicaScalar>;

            if (primitive != null)
            {
                return(GMacValueMultivector.CreateScalar(
                           mvType,
                           primitive.Value
                           ));
            }

            //This should be a value access of type integer or scalar
            if (!(oldExpr is LanguageValueAccess))
            {
                throw new InvalidCastException(
                          "Cannot convert atomic expression " + oldExpr + " of type " +
                          oldExpr.ExpressionType.TypeSignature + " to a atomic expression of type" +
                          mvType.TypeSignature
                          );
            }

            //Create a cast operation
            var newRhsExpr = BasicUnary.Create(mvType, mvType, oldExpr);

            //The new expresssion is not atomic. Create a local variable to hold value and return the local variable
            //as a direct value access object
            return(NonAtomicExpressionToValueAccess(commandBlock, newRhsExpr));
        }
Beispiel #5
0
        public static ILanguageExpressionAtomic ExpressionToMultivectorAtomicExpression(this CommandBlock commandBlock, GMacFrameMultivector mvType, ILanguageExpression oldExpr)
        {
            //If the given expression is atomic cast it into a multivector atomic expression
            var expressionAtomic = oldExpr as ILanguageExpressionAtomic;

            if (expressionAtomic != null)
            {
                return
                    (AtomicExpressionToMultivectorAtomicExpression(
                         commandBlock,
                         mvType,
                         expressionAtomic
                         ));
            }

            //The expresssion is not atomic. Create a local variable to hold value and return the local variable
            //as a direct value access object
            var newValueAccess =
                NonAtomicExpressionToValueAccess(commandBlock, oldExpr);

            //Cast the value access object into a multivector atomic expression
            return
                (AtomicExpressionToMultivectorAtomicExpression(commandBlock, mvType, newValueAccess));
        }
Beispiel #6
0
 internal AstValueMultivectorTerm(GMacFrameMultivector mvClass, int termId, ValuePrimitive <MathematicaScalar> coef)
 {
     AssociatedFrameMultivector = mvClass;
     TermBasisBladeId           = termId;
     TermCoef = coef;
 }