public void init(int[] s, int[] o)
	{
		int len = start.length;
		this.rstart = new int[len];
		this.roff = new int[len];
		for(int i = 0 ; i < len; i++)
		{
			this.rstart[i] = Math.max(s[i],start[i]);
			this.roff[i] = Math.min(s[i]+o[i], start[i]+shape[i]);
			this.roff[i] -= this.rstart[i];
		}
		
		this.fjump = new int[start.length];
		fpos = 0;
		for (int i = 0; i < start.length ; i++) {
			fpos = fpos * shape[i] + rstart[i] - start[i];
		}
		fjump[start.length - 1] = shape[start.length - 1];
		for (int i = start.length - 2; i >= 0; i--) {
			fjump[i] = shape[i] * fjump[i + 1];
		}
		len = start.length - 1;
		itr = new int[len + 1];
		itr[len]=-1;
	}