package mikera.vectorz.impl;
import mikera.vectorz.util.ErrorMessages;
/**
* Base class for computed vectors. Assumed to be immutable and fixed size.
*
* @author Mike
*
*/
@SuppressWarnings("serial")
public abstract class AComputedVector extends ASizedVector {
protected AComputedVector(int length) {
super(length);
}
@Override
public abstract double get(int i);
@Override
public final void set(int i, double value) {
throw new UnsupportedOperationException(ErrorMessages.immutable(this));
}
@Override
public final void unsafeSet(int i, double value) {
throw new UnsupportedOperationException(ErrorMessages.immutable(this));
}
@Override
public ImmutableScalar slice(int i) {
return ImmutableScalar.create(get(i));
}
@Override
public boolean isMutable() {
return false; // i.e. immutable
}
@Override
public AComputedVector exactClone() {
return this;
}
@Override
public double dotProduct(double[] data, int offset) {
double result=0.0;
for (int i=0; i<length; i++) {
result+=data[offset+i]*unsafeGet(i);
}
return result;
}
}