package mikera.vectorz.impl;

import mikera.arrayz.INDArray;
import mikera.vectorz.AVector;
import mikera.vectorz.Op2;
import mikera.vectorz.util.ErrorMessages;

/**
 * Base class for joined vectors
 * 
 * Joined vectors are represented as the concatenation of a number of segments.
 * 
 * @author Mike
 *
 */
public abstract class AJoinedVector extends ASizedVector {
	private static final long serialVersionUID = -1931862469605499077L;

	public AJoinedVector(int length) {
		super(length);
	}
	
	@Override
	public abstract int componentCount();
	
	@Override
	public abstract AVector getComponent(int k);
	
	/**
	 * Reconstructs a new joined vector of the same type and shape with the given segments.
	 * 
	 * The segments must be the same shape as the original segments
	 * 
	 * @param aVectors
	 * @return
	 */
	@Override
	public abstract AJoinedVector withComponents(INDArray... segments);

	@Override
	public boolean isView() {
		return true;
	}
	
	@Override
	public boolean isMutable() {
		long n=componentCount();
		for (int i=0; i=(offset+length)) {
				return;
			}
			vstart+=vlen;
		}
	}
	
	@Override
	public void copyTo(int offset, double[] dest, int destOffset, int length, int stride) {
		long n=componentCount();
		int vstart=0;
		for (int i=0; i=(offset+length)) {
				return;
			}
			vstart+=vlen;
		}
	}
	
	@Override
	public boolean equals(AVector a) {
		if (this==a) return true;
		if (length()!=a.length()) return false;
		if (a instanceof ADenseArrayVector) {
			ADenseArrayVector dav=(ADenseArrayVector)a;
			return equalsArray(dav.getArray(),dav.getArrayOffset());
		}
		long n=componentCount();
		int offset=0;
		for (int i=0; in) throw new IllegalArgumentException(ErrorMessages.zeroElementReduce(this));
		for (; i 

Ads help maintain this website.