in src/main/java/org/apache/datasketches/vector/decomposition/FrequentDirections.java [115:148]
static FrequentDirections heapify(final Memory srcMem, final MatrixType type) {
final int preLongs = getAndCheckPreLongs(srcMem);
final int serVer = extractSerVer(srcMem);
if (serVer != SER_VER) {
throw new IllegalArgumentException("Invalid serialization version: " + serVer);
}
final int family = extractFamilyID(srcMem);
if (family != MatrixFamily.FREQUENTDIRECTIONS.getID()) {
throw new IllegalArgumentException("Possible corruption: Family id (" + family + ") "
+ "is not a FrequentDirections sketch");
}
final int k = extractK(srcMem);
final int numRows = extractNumRows(srcMem);
final int d = extractNumColumns(srcMem);
final boolean empty = (extractFlags(srcMem) & EMPTY_FLAG_MASK) > 0;
if (empty) {
return new FrequentDirections(k, d);
}
final long offsetBytes = (long)preLongs * Long.BYTES;
final long mtxBytes = srcMem.getCapacity() - offsetBytes;
final Matrix B = Matrix.heapify(srcMem.region(offsetBytes, mtxBytes), type);
assert B != null;
final FrequentDirections fd = new FrequentDirections(k, d, B, B.getMatrixType());
fd.n_ = extractN(srcMem);
fd.nextZeroRow_ = numRows;
fd.svAdjustment_ = extractSVAdjustment(srcMem);
return fd;
}