package mikera.vectorz.impl; import mikera.vectorz.AVector; import mikera.vectorz.util.ErrorMessages; /** * Abstract base class for vectors using a fixed final size * * @author Mike * */ @SuppressWarnings("serial") public abstract class ASizedVector extends AVector { protected final int length; protected ASizedVector(int length) { this.length=length; } @Override public final int length() { return length; } @Override public final long elementCount() { return length(); } @Override public final int sliceCount() { return length; } @Override public double get(long i) { if ((i<0)||(i>=length)) throw new IndexOutOfBoundsException(ErrorMessages.invalidIndex(this, i)); return unsafeGet((int)i); } @Override public final int[] getShape() { return new int[] {length}; } @Override public boolean isSameShape(AVector a) { return length==a.length(); } @Override protected final int checkSameLength(AVector v) { int len=length; if (len!=v.length()) throw new IllegalArgumentException(ErrorMessages.incompatibleShapes(this, v)); return len; } @Override public final int checkRange(int offset, int length) { int len=this.length; int end=offset+length; if ((offset<0)||(end>len)) { throw new IndexOutOfBoundsException(ErrorMessages.invalidRange(this, offset, length)); } return len; } @Override protected final int checkIndex(int i) { int len=length; if ((i<0)||(i>=len)) throw new IndexOutOfBoundsException(ErrorMessages.invalidIndex(this, i)); return len; } @Override public final int checkLength(int length) { if (this.length!=length) throw new IllegalArgumentException("Vector length mismatch, expected length = "+length+", but got length = "+this.length); return length; } @Override protected final int checkSameLength(ASizedVector v) { int len=length; if (len!=v.length) throw new IllegalArgumentException(ErrorMessages.incompatibleShapes(this, v)); return len; } @Override public final int[] getShapeClone() { return new int[] {length}; } @Override public final int getShape(int dim) { if (dim==0) { return length; } else { throw new IndexOutOfBoundsException(ErrorMessages.invalidDimension(this, dim)); } } @Override public boolean equalsArray(double[] data) { if (length!=data.length) return false; return equalsArray(data,0); } }