Select Git revision
BasicLoader.java
BasicLoader.java 16.02 KiB
package azgracompress.io.loader;
import azgracompress.data.*;
import java.io.IOException;
public abstract class BasicLoader {
protected final V3i dims;
protected int threadCount = 1;
private DataWrappingStrategy wrappingStrategy = DataWrappingStrategy.MirroredRepeat;
protected BasicLoader(final V3i datasetDims) {
this.dims = datasetDims;
}
public V3i getImageDimensions() {
return dims;
}
public DataWrappingStrategy getWrappingStrategy() {
return wrappingStrategy;
}
public void setWrappingStrategy(final DataWrappingStrategy strategy) {
wrappingStrategy = strategy;
}
/**
* Abstract method to load specified plane data.
*
* @param plane Zero based plane index.
* @return Plane data.
* @throws IOException when fails to load plane data for some reason.
*/
public abstract int[] loadPlaneData(final int plane) throws IOException;
protected int valueAt(final int plane, final int offset) {
new Exception().printStackTrace(System.err);
assert (false) : "Unimplemented overload of BasicLoader::valueAt()";
return Integer.MIN_VALUE;
}
protected int[][] loadRowVectorsImplByLoadPlaneData(final int vectorSize, final Range<Integer> planeRange) throws IOException {
final int rowVectorCount = (int) Math.ceil((double) dims.getX() / (double) vectorSize);
final int planeCount = planeRange.getTo() - planeRange.getFrom();
final int vectorCount = planeCount * dims.getY() * rowVectorCount;
final int[][] rowVectors = new int[vectorCount][vectorSize];
int vectorIndex = 0;
int baseX;
for (int plane = planeRange.getFrom(); plane < planeRange.getTo(); plane++) {
final int[] planeData = loadPlaneData(plane);
for (int row = 0; row < dims.getY(); row++) {
for (int rowVectorIndex = 0; rowVectorIndex < rowVectorCount; rowVectorIndex++) {
// Copy single vector.
baseX = rowVectorIndex * vectorSize;
for (int vectorX = 0; vectorX < vectorSize; vectorX++) {
if ((baseX + vectorX) >= dims.getY())
break;
rowVectors[vectorIndex][vectorX] = planeData[Block.index((baseX + vectorX), row, dims.getX())];
}
++vectorIndex;
}
}
}