public static WritableBuffer wrapByteBuffer()

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;
  }