in src/main/java/org/apache/datasketches/memory/internal/ResourceImpl.java [565:593]
public MemorySegment toMemorySegment(final Arena arena, final long alignment) {
final long len = seg.byteSize();
final boolean arenaValid = arena != null;
final MemorySegment out;
if (arenaValid) { //off-heap
if (len == 0) {
out = MemorySegment.NULL;
return out;
}
out = arena.allocate(seg.byteSize(), alignment);
}
else { //on-heap
if (len == 0) {
out = MemorySegment.ofArray(new byte[0]);
return out;
}
if (len % Long.BYTES == 0) {
out = MemorySegment.ofArray(new long[(int)(len >>> LONG_SHIFT)]);
} else if (len % Integer.BYTES == 0) {
out = MemorySegment.ofArray(new int[(int)(len >>> INT_SHIFT)]);
} else if (len % Short.BYTES == 0) {
out = MemorySegment.ofArray(new short[(int)(len >>> SHORT_SHIFT)]);
} else {
out = MemorySegment.ofArray(new byte[(int)len]);
}
}
out.copyFrom(seg);
return out;
}