package mikera.vectorz.impl;
import mikera.vectorz.AScalar;
import mikera.vectorz.AVector;
import mikera.vectorz.util.ErrorMessages;
/**
* A length 1 vector, as a view wrapping a single AScalar
*
* Main purpose is to provide an efficient view for AScalar.asVector()
*
* @author Mike
*/
public class WrappedScalarVector extends AWrappedVector<AScalar> {
private static final long serialVersionUID = 1912695454407729415L;
public final AScalar scalar;
public WrappedScalarVector(AScalar s) {
this.scalar=s;
}
@Override
public boolean isMutable() {
return scalar.isMutable();
}
@Override
public boolean isFullyMutable() {
return scalar.isFullyMutable();
}
@Override
public int componentCount() {
return 1;
}
@Override
public AScalar getComponent(int k) {
if (k!=0) throw new IndexOutOfBoundsException(ErrorMessages.invalidComponent(this,k));
return scalar;
}
@Override
public int length() {
return 1;
}
@Override
public double get(int i) {
if (i!=0) throw new IndexOutOfBoundsException("Index: "+i);
return scalar.get();
}
@Override
public boolean isBoolean() {
return scalar.isBoolean();
}
@Override
public boolean isZero() {
return scalar.isZero();
}
@Override
public double unsafeGet(int i) {
return scalar.get();
}
@Override
public void set(int i, double value) {
if (i!=0) throw new IndexOutOfBoundsException();
scalar.set(value);
}
@Override
public double elementSum() {
return scalar.get();
}
@Override
public double elementMax(){
return scalar.get();
}
@Override
public double elementMin(){
return scalar.get();
}
@Override
public double dotProduct(double[] data, int offset) {
return data[offset]*scalar.get();
}
@Override
public WrappedScalarVector exactClone() {
return new WrappedScalarVector(scalar.exactClone());
}
@Override
public AScalar getWrappedObject() {
return scalar;
}
@Override
public void addAt(int i, double v) {
scalar.add(v);
}
}