in src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java [116:150]
public static WritableMemory wrapByteBuffer(
final ByteBuffer byteBuffer,
final boolean localReadOnly,
final ByteOrder byteOrder,
final MemoryRequestServer memReqSvr) {
Objects.requireNonNull(byteBuffer, "ByteBuffer must not be null");
Objects.requireNonNull(byteOrder, "ByteOrder must not be null");
final ByteBuffer byteBufView;
if (localReadOnly) {
if (byteBuffer.isReadOnly()) {
byteBufView = byteBuffer.duplicate();
} else { //bb is writable
byteBufView = byteBuffer.asReadOnlyBuffer();
}
} else { //want writable
if (byteBuffer.isReadOnly()) {
throw new IllegalArgumentException("ByteBuffer must be writable.");
}
byteBufView = byteBuffer.duplicate();
}
byteBufView.clear(); //resets position to zero and limit to capacity. Does not impact data.
final MemorySegment seg = MemorySegment.ofBuffer(byteBufView); //from 0 to capacity
int type = MEMORY | BYTEBUF
| (localReadOnly ? READONLY : 0)
| (seg.isNative() ? DIRECT : 0)
| (seg.isMapped() ? MAP : 0);
final WritableMemory wmem;
if (byteOrder == NON_NATIVE_BYTE_ORDER) {
type |= NONNATIVE_BO;
wmem = new NonNativeWritableMemoryImpl(seg, type, memReqSvr, null);
} else {
wmem = new NativeWritableMemoryImpl(seg, type, memReqSvr, null);
}
return wmem;
}