/** * Facade method for copying a value holder object * @param valueHolder The object to copy * @return The copied object */ public static GAPPValueHolder copyValueHolder(GAPPValueHolder valueHolder) { GAPPValueHolderCopier visitor = new GAPPValueHolderCopier(); return (GAPPValueHolder) valueHolder.accept(visitor, null); }
@Override public Object visitMultivectorComponent(GAPPMultivectorComponent gappMultivectorComponent, Object arg) { return new GAPPMultivectorComponent( gappMultivectorComponent.getName(), gappMultivectorComponent.getBladeIndex()); //Strings are immutable! }
@Override public Object accept(GAPPVariableVisitor visitor, Object arg) { return visitor.visitVector(this, arg); } }
public GAPPDotVectors(GAPPMultivectorComponent destination, LinkedList<GAPPVector> parts, String bladeName) { this.destination = new GAPPMultivector(destination.getName()); this.destSelector = new Selector(destination.getBladeIndex(), (byte) 1, bladeName); this.parts = parts; }
/** * Creates a temporary multivector with one entry and returns the according GAPPMultivectorComponent * @return The GAPPMultivectorComponent */ public GAPPMultivectorComponent createMvComp() { GAPPMultivector mv = new GAPPMultivector(createTMP(PREFIX_TMPMV)); gapp.addInstruction(new GAPPResetMv(mv, 1)); return new GAPPMultivectorComponent(mv.getName(), 0); }
@Override public Object visitVector(GAPPVector gappVector, Object arg) { return new GAPPVector(gappVector.getName()); } }
@Override public Object visitMultivector(GAPPMultivector gappMultivector, Object arg) { return new GAPPMultivector(gappMultivector.getName()); //Strings are immutable! }
@Override public Object visitCalculateMvCoeff(GAPPCalculateMvCoeff gappCalculateMvCoeff, Object arg) { curLine++; access(new GAPPMultivector(gappCalculateMvCoeff.getDestination().getName())); access(gappCalculateMvCoeff.getOperand1()); if (gappCalculateMvCoeff.getOperand2() != null) { access(gappCalculateMvCoeff.getOperand2()); } return null; }
@Override public Object visitConstant(GAPPConstant gappConstant, Object arg) { return new GAPPConstant(gappConstant.getValue()); }
@Override public Object visitScalarVariable(GAPPScalarVariable gappScalarVariable, Object arg) { return new GAPPScalarVariable(gappScalarVariable.getName()); //Strings are immutable! }
/** * Copies a list of vectors (deep copy) * @param vectors The list of vectors to be copied * @return The copied list */ private LinkedList<GAPPVector> copyVectors(LinkedList<GAPPVector> vectors) { LinkedList<GAPPVector> result = new LinkedList<GAPPVector>(); for (GAPPVector part : vectors) { result.add((GAPPVector) GAPPValueHolderCopier.copyValueHolder(part)); } return result; }
@Override public Object accept(GAPPVariableVisitor visitor, Object arg) { return visitor.visitScalarVariable(this, arg); } }
@Override public Object accept(GAPPVariableVisitor visitor, Object arg) { return visitor.visitConstant(this, arg); } }
@Override public Object accept(GAPPVariableVisitor visitor, Object arg) { return visitor.visitMultivectorComponent(this, arg); } }
@Override public Object accept(GAPPVariableVisitor visitor, Object arg) { return visitor.visitMultivector(this, arg); } }
/** * Pretty prints a GAPPSetOfVariables at the end of result * @param setOfVariables The GAPPSetOfVariables */ private void printSetOfVariables(GAPPSetOfVariables setOfVariables) { result.append(setOfVariables.prettyPrint()); }
/** * Pretty prints a vector at the end of result * @param vector The vector */ private void printVector(GAPPVector vector) { result.append(vector.prettyPrint()); }
@Override public Object visitCalculateMv(GAPPCalculateMv gappCalculateMv, Object arg) { return new GAPPCalculateMv(gappCalculateMv.getType(), (GAPPMultivector) GAPPValueHolderCopier.copyValueHolder(gappCalculateMv.getDestination()), (GAPPMultivector) GAPPValueHolderCopier.copyValueHolder(gappCalculateMv.getOperand1()), (GAPPMultivector) GAPPValueHolderCopier.copyValueHolder(gappCalculateMv.getOperand2())); }
/** * Copies a variableset * @param var The variableset to be copied * @return The copy */ private Variableset copyVariableset(Variableset var) { Variableset copy = new Variableset(); for (GAPPValueHolder cur : var) { copy.add(GAPPValueHolderCopier.copyValueHolder(cur)); } return copy; }
/** * Copies a variableset * @param var The variableset to be copied * @return The copy */ private Valueset copyValueset(Valueset var) { Valueset copy = new Valueset(); for (GAPPConstant cur : var) { copy.add((GAPPConstant) GAPPValueHolderCopier.copyValueHolder(cur)); } return copy; }