public OptimusInterator(OptimusData data, OptimusShape start,
			OptimusShape off) {
		this.data = data;
		this.rstart = start;
		this.roff = off;

		jump = new int[this.rstart.getShape().length];
		int[] fsize = this.data.getOff().getShape();

		jump[0] = fsize[0];
		for (int i = 1; i < jump.length; i++) {
			jump[i] = fsize[i] * jump[i - 1];
		}

		itr = new int[jump.length];
	
		int [] fstart = data.getStart().getShape();
		int [] rdstart = rstart.getShape();
		for( int i =itr.length - 1 ;  i >= 0 ; --i )
		{
			pos = (pos == 0 ) ? rdstart[i] -fstart[i] : pos * fsize[i] + rdstart[i] - fstart[i];
		}
	
	}