package mikera.transformz.impl;
import mikera.transformz.ATransform;
import mikera.vectorz.AVector;
import mikera.vectorz.Vectorz;
/**
* Class to represent a compound transform when it is not known how to
* combine the transforms directly.
*
* @author Mike
*
*/
public class CompoundTransform extends ATransform {
private ATransform outer;
private ATransform inner;
public CompoundTransform(ATransform outer, ATransform inner) {
if (inner.outputDimensions()!=outer.inputDimensions()) {
throw new IllegalArgumentException("Transform dimensionality not compatible");
}
this.outer=outer;
this.inner=inner;
}
@Override
public boolean isLinear() {
return inner.isLinear()&&outer.isLinear();
}
@Override
public void transform(AVector source, AVector dest) {
AVector temp=Vectorz.newVector(inner.outputDimensions());
inner.transform(source,temp);
outer.transform(temp,dest);
}
@Override
public int inputDimensions() {
return inner.inputDimensions();
}
@Override
public CompoundTransform compose(ATransform trans) {
return new CompoundTransform(outer,inner.compose(trans));
}
@Override
public int outputDimensions() {
return outer.outputDimensions();
}
}