@Override public IIndex reduce(int dim) { if (dim < mIndexArrayData.getRank()) { mIndexArrayData.reduce(dim); } else { mIndexStorage.reduce(dim - mIndexArrayData.getRank()); } return this; }
@Override public void setShape(int[] shape) { if (shape.length != getRank()) { throw new IllegalArgumentException(); } mIndexArrayData.setShape(java.util.Arrays.copyOfRange(shape, 0, mIndexArrayData.getRank())); mIndexStorage.setShape( java.util.Arrays.copyOfRange(shape, mIndexArrayData.getRank(), shape.length)); }
@Override public void setOrigin(int[] origin) { if (origin.length != getRank()) { throw new IllegalArgumentException(); } mIndexArrayData.setOrigin(java.util.Arrays.copyOfRange(origin, 0, mIndexArrayData.getRank())); mIndexStorage.setOrigin( java.util.Arrays.copyOfRange(origin, mIndexArrayData.getRank(), origin.length)); }
@Override public IIndex set(int[] index) { if (index.length != getRank()) { throw new IllegalArgumentException(); } mIndexArrayData.set(java.util.Arrays.copyOfRange(index, 0, mIndexArrayData.getRank())); mIndexStorage.set(java.util.Arrays.copyOfRange(index, mIndexArrayData.getRank(), index.length)); return this; }
@Override public void setStride(long[] stride) { if (stride.length != getRank()) { throw new IllegalArgumentException(); } int iRank = mIndexArrayData.getRank(); // Set the stride for the storage arrays mIndexStorage.setStride(java.util.Arrays.copyOfRange(stride, iRank, stride.length)); // Get the number of cells in storage arrays long[] iStride = mIndexStorage.getStride(); long current = iStride[0] * mIndexStorage.getShape()[0]; // Divide the stride by number of cells contained in storage arrays iStride = new long[iRank]; for (int i = iRank; i > 0; i--) { iStride[i - 1] = stride[i - 1] / current; if (iStride[i - 1] == 0) { iStride[i - 1] = 1; } } mIndexArrayData.setStride(iStride); }
@Override public void setIndexName(int dim, String indexName) { if (dim >= mIndexArrayData.getRank()) { mIndexStorage.setIndexName(dim, indexName); } else { mIndexArrayData.setIndexName(dim, indexName); } }
@Override public String getIndexName(int dim) { String name; if (dim >= mIndexArrayData.getRank()) { name = mIndexStorage.getIndexName(dim); } else { name = mIndexArrayData.getIndexName(dim); } return name; }
@Override public int getRank() { return mIndexArrayData.getRank() + mIndexStorage.getRank(); }