in src/main/java/org/apache/datasketches/vector/matrix/MatrixImplOjAlgo.java [60:101]
static Matrix heapifyInstance(final Memory srcMem) {
final int minBytes = MatrixFamily.MATRIX.getMinPreLongs() * Long.BYTES;
final long memCapBytes = srcMem.getCapacity();
if (memCapBytes < minBytes) {
throw new IllegalArgumentException("Source Memory too small: " + memCapBytes
+ " < " + minBytes);
}
final int preLongs = extractPreLongs(srcMem);
final int serVer = extractSerVer(srcMem);
final int familyID = extractFamilyID(srcMem);
if (serVer != 1) {
throw new IllegalArgumentException("Invalid SerVer reading srcMem. Expected 1, found: "
+ serVer);
}
if (familyID != MatrixFamily.MATRIX.getID()) {
throw new IllegalArgumentException("srcMem does not point to a Matrix");
}
final int flags = extractFlags(srcMem);
final boolean isCompact = (flags & COMPACT_FLAG_MASK) > 0;
int nRows = extractNumRows(srcMem);
int nCols = extractNumColumns(srcMem);
final MatrixImplOjAlgo matrix = new MatrixImplOjAlgo(nRows, nCols);
if (isCompact) {
nRows = extractNumRowsUsed(srcMem);
nCols = extractNumColumnsUsed(srcMem);
}
int memOffset = preLongs * Long.BYTES;
for (int c = 0; c < nCols; ++c) {
for (int r = 0; r < nRows; ++r) {
matrix.mtx_.set(r, c, srcMem.getDouble(memOffset));
memOffset += Double.BYTES;
}
}
return matrix;
}