package mikera.vectorz.impl;
import java.util.Arrays;
import mikera.randomz.Hash;
import mikera.vectorz.AVector;
import mikera.vectorz.Op;
import mikera.vectorz.util.DoubleArrays;
/**
* Vector referring to a fixed offset into a double[] array
*
* @author Mike
*
*/
public final class ArraySubVector extends ADenseArrayVector {
private static final long serialVersionUID = 1262951505515197105L;
private final int offset;
private ArraySubVector(double[] values) {
this(values,0,values.length);
}
private ArraySubVector(double[] data, int offset, int length) {
super(length,data);
this.offset=offset;
}
/**
* Wraps a double array as a dense ArraySubVector
*/
public static ArraySubVector wrap(double[] values) {
return new ArraySubVector(values);
}
/**
* Wraps a segment of a double array as a dense ArraySubVector
* @param data
* @param offset
* @param length
* @return
*/
public static ArraySubVector wrap(double[] data, int offset, int length) {
return new ArraySubVector(data,offset,length);
}
/**
* Constructs a vector directly referencing a sub-vector of an existing
* array-based Vector
*
* @param source
* @param offset
* @param length
*/
public ArraySubVector(ADenseArrayVector source, int offset, int length) {
super(length,source.getArray());
source.checkRange(offset,length);
this.offset = source.getArrayOffset() + offset;
}
@Override
public double get(int i) {
checkIndex(i);
return data[offset + i];
}
@Override
public void set(int i, double value) {
checkIndex(i);
data[offset + i] = value;
}
@Override
public void fill(double value) {
Arrays.fill(data, offset, offset+length, value);
}
@Override
public double unsafeGet(int i) {
return data[offset + i];
}
@Override
public void unsafeSet(int i, double value) {
data[offset + i] = value;
}
@Override
public void add(AVector v) {
checkSameLength(v);
v.addToArray(data, offset);
}
@Override
public void addMultiple(AVector v, double factor) {
checkSameLength(v);
v.addMultipleToArray(factor, data, offset);
}
@Override
public void addAt(int i, double v) {
assert((i>=0)&&(i
Ads help maintain this website.