package mikera.matrixx.impl;
import mikera.arrayz.INDArray;
import mikera.matrixx.AMatrix;
import mikera.vectorz.AVector;
import mikera.vectorz.IOperator;
import mikera.vectorz.Op;
/**
* Abstract base class that delegates certain elementwise methods to a source matrix.
*
* Suitable for implementing transposes and reshaping views that preserve all elements with a 1-1 mapping.
*
* @author Mike
*/
abstract class ADelegatedMatrix extends ARectangularMatrix {
private static final long serialVersionUID = 7424713597425793457L;
protected final AMatrix source;
protected ADelegatedMatrix(int rows, int cols,AMatrix source) {
super(rows,cols);
this.source=source;
}
@Override
public boolean isView() {
return true;
}
@Override
public boolean isZero() {
return source.isZero();
}
@Override
public boolean isBoolean() {
return source.isBoolean();
}
@Override
public abstract double get(int row, int column);
@Override
public abstract void set(int row, int column, double value);
@Override
public abstract double unsafeGet(int row, int column);
@Override
public abstract void unsafeSet(int row, int column, double value);
@Override
public int componentCount() {
return source.componentCount();
}
@Override
public INDArray getComponent(int k) {
return source.getComponent(k);
}
@Override
public INDArray[] getComponents() {
return source.getComponents();
}
@Override
public void applyOp(Op op) {
source.applyOp(op);
}
@Override
public void applyOp(IOperator op) {
source.applyOp(op);
}
@Override
public void multiply(double factor) {
source.multiply(factor);
}
@Override
public void set(double value) {
source.set(value);
}
@Override
public AVector getLeadingDiagonal() {
return source.getLeadingDiagonal();
}
@Override
public double elementSum() {
return source.elementSum();
}
@Override
public double elementMin() {
return source.elementMin();
}
@Override
public double elementMax() {
return source.elementMax();
}
@Override
public long nonZeroCount() {
return source.nonZeroCount();
}
@Override
public void abs() {
source.abs();
}
@Override
public void square() {
source.square();
}
@Override
public void sqrt() {
source.sqrt();
}
@Override
public void signum() {
source.signum();
}
@Override
public void negate() {
source.negate();
}
@Override
public void log() {
source.log();
}
@Override
public void exp() {
source.exp();
}
@Override
public void reciprocal() {
source.reciprocal();
}
@Override
public void fill(double value) {
source.fill(value);
}
}