< prev index next > src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java
Print this page
checkRange(0, length, true);
UNSAFE.setMemory(base(), min(), length, value);
return this;
}
+ public void copyFrom(MemorySegment src) {
+ long size = src.byteSize();
+ ((AbstractMemorySegmentImpl)src).checkRange(0, size, true);
+ checkRange(0, size, false);
+ long offsetSrc = ((AbstractMemorySegmentImpl) src).min();
+ long offsetDst = min();
+ Object baseSrc = ((AbstractMemorySegmentImpl) src).base();
+ Object baseDst = base();
+ UNSAFE.copyMemory(baseSrc, offsetSrc, baseDst, offsetDst, size);
+ }
+
@Override
@ForceInline
public final MemoryAddress baseAddress() {
return new MemoryAddressImpl(this, 0);
}
@Override
public final byte[] toByteArray() {
checkIntSize("byte[]");
byte[] arr = new byte[(int)length];
MemorySegment arrSegment = MemorySegment.ofArray(arr);
- MemoryAddress.copy(baseAddress(), arrSegment.baseAddress(), length);
+ arrSegment.copyFrom(this);
return arr;
}
boolean isSmall() {
return isSet(SMALL);
< prev index next >