internal static AstFrameMultivector ToAstFrameMultivector(this GMacFrameMultivector mvClass) { return(new AstFrameMultivector(mvClass)); }
public void Visit(GMacFrameMultivector mvType) { Log.AppendAtNewLine("frame multivector type "); Log.AppendLine(mvType.SymbolAccessName); }
internal AstFrameMultivector(GMacFrameMultivector mvClass) { AssociatedFrameMultivector = mvClass; }
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)); }
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)); }
internal AstValueMultivectorTerm(GMacFrameMultivector mvClass, int termId, ValuePrimitive <MathematicaScalar> coef) { AssociatedFrameMultivector = mvClass; TermBasisBladeId = termId; TermCoef = coef; }