in src/main/java/org/apache/datasketches/memory/internal/WritableBufferImpl.java [62:97]
public static WritableBuffer 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 byteBuf;
if (localReadOnly) {
if (byteBuffer.isReadOnly()) {
byteBuf = byteBuffer.duplicate();
} else { //bb writable
byteBuf = byteBuffer.asReadOnlyBuffer();
}
} else { //want writable
if (byteBuffer.isReadOnly()) {
throw new IllegalArgumentException("ByteBuffer must be writable.");
}
byteBuf = byteBuffer.duplicate();
}
byteBuf.clear(); //resets position to zero and limit to capacity. Does not clear data.
final MemorySegment seg = MemorySegment.ofBuffer(byteBuf); //from 0 to capacity
int type = BUFFER | BYTEBUF
| (localReadOnly ? READONLY : 0)
| (seg.isNative() ? DIRECT : 0)
| (seg.isMapped() ? MAP : 0);
final WritableBuffer wbuf;
if (byteOrder == NON_NATIVE_BYTE_ORDER) {
type |= NONNATIVE_BO;
wbuf = new NonNativeWritableBufferImpl(seg, type, memReqSvr, null);
} else {
wbuf = new NativeWritableBufferImpl(seg, type, memReqSvr, null);
}
wbuf.setStartPositionEnd(0, byteBuffer.position(), byteBuffer.limit());
return wbuf;
}