2525import static java .lang .foreign .ValueLayout .JAVA_INT_UNALIGNED ;
2626import static java .lang .foreign .ValueLayout .JAVA_LONG_UNALIGNED ;
2727import static java .lang .foreign .ValueLayout .JAVA_SHORT_UNALIGNED ;
28- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .getCharArr ;
29- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .getDoubleArr ;
30- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .getFloatArr ;
31- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .getIntArr ;
32- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .getLongArr ;
33- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .getShortArr ;
34- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .putCharArr ;
35- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .putDoubleArr ;
36- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .putFloatArr ;
37- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .putIntArr ;
38- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .putLongArr ;
39- import static org .apache .datasketches .memory .internal .NativeWritableMemoryImpl .putShortArr ;
4028
4129import java .lang .foreign .Arena ;
4230import java .lang .foreign .MemorySegment ;
4331
4432import org .apache .datasketches .memory .MemoryRequestServer ;
4533import org .apache .datasketches .memory .WritableBuffer ;
4634
47- /*
48- * Developer notes: The heavier methods, such as put/get arrays, duplicate, region, clear, fill,
49- * compareTo, etc., use hard checks (check*() and incrementAndCheck*() methods), which execute at
50- * runtime and throw exceptions if violated. The cost of the runtime checks are minor compared to
51- * the rest of the work these methods are doing.
52- *
53- * <p>The light weight methods, such as put/get primitives, use asserts (assert*() and
54- * incrementAndAssert*() methods), which only execute when asserts are enabled and JIT will remove
55- * them entirely from production runtime code. The offset versions of the light weight methods will
56- * simplify to a single unsafe call, which is further simplified by JIT to an intrinsic that is
57- * often a single CPU instruction.
58- */
59-
6035/**
6136 * Implementation of {@link WritableBuffer} for native endian byte order.
6237 * @author Roman Leventov
6338 * @author Lee Rhodes
6439 */
6540final class NativeWritableBufferImpl extends WritableBufferImpl {
6641
42+ //Pass-through ctor
6743 NativeWritableBufferImpl (
6844 final Arena arena ,
6945 final MemorySegment seg ,
@@ -88,8 +64,8 @@ public char getChar(final long offsetBytes) {
8864 @ Override
8965 public void getCharArray (final char [] dstArray , final int dstOffsetChars , final int lengthChars ) {
9066 final long pos = getPosition ();
91- getCharArr (seg , pos , dstArray , dstOffsetChars , lengthChars );
92- setPosition (pos + (lengthChars ) << CHAR_SHIFT );
67+ MemorySegment . copy (seg , JAVA_CHAR_UNALIGNED , pos , dstArray , dstOffsetChars , lengthChars );
68+ setPosition (pos + (lengthChars << CHAR_SHIFT ) );
9369 }
9470
9571 @ Override
@@ -107,8 +83,8 @@ public double getDouble(final long offsetBytes) {
10783 @ Override
10884 public void getDoubleArray (final double [] dstArray , final int dstOffsetDoubles , final int lengthDoubles ) {
10985 final long pos = getPosition ();
110- getDoubleArr (seg , pos , dstArray , dstOffsetDoubles , lengthDoubles );
111- setPosition (pos + (lengthDoubles ) << DOUBLE_SHIFT );
86+ MemorySegment . copy (seg , JAVA_DOUBLE_UNALIGNED , pos , dstArray , dstOffsetDoubles , lengthDoubles );
87+ setPosition (pos + (lengthDoubles << DOUBLE_SHIFT ) );
11288 }
11389
11490 @ Override
@@ -126,8 +102,8 @@ public float getFloat(final long offsetBytes) {
126102 @ Override
127103 public void getFloatArray (final float [] dstArray , final int dstOffsetFloats , final int lengthFloats ) {
128104 final long pos = getPosition ();
129- getFloatArr (seg , pos , dstArray , dstOffsetFloats , lengthFloats );
130- setPosition (pos + (lengthFloats ) << FLOAT_SHIFT );
105+ MemorySegment . copy (seg , JAVA_FLOAT_UNALIGNED , pos , dstArray , dstOffsetFloats , lengthFloats );
106+ setPosition (pos + (lengthFloats << FLOAT_SHIFT ) );
131107 }
132108
133109 @ Override
@@ -145,8 +121,8 @@ public int getInt(final long offsetBytes) {
145121 @ Override
146122 public void getIntArray (final int [] dstArray , final int dstOffsetInts , final int lengthInts ) {
147123 final long pos = getPosition ();
148- getIntArr (seg , pos , dstArray , dstOffsetInts , lengthInts );
149- setPosition (pos + (lengthInts ) << INT_SHIFT );
124+ MemorySegment . copy (seg , JAVA_INT_UNALIGNED , pos , dstArray , dstOffsetInts , lengthInts );
125+ setPosition (pos + (lengthInts << INT_SHIFT ) );
150126 }
151127
152128 @ Override
@@ -164,8 +140,8 @@ public long getLong(final long offsetBytes) {
164140 @ Override
165141 public void getLongArray (final long [] dstArray , final int dstOffsetLongs , final int lengthLongs ) {
166142 final long pos = getPosition ();
167- getLongArr (seg , pos , dstArray , dstOffsetLongs , lengthLongs );
168- setPosition (pos + (lengthLongs ) << LONG_SHIFT );
143+ MemorySegment . copy (seg , JAVA_LONG_UNALIGNED , pos , dstArray , dstOffsetLongs , lengthLongs );
144+ setPosition (pos + (lengthLongs << LONG_SHIFT ) );
169145 }
170146
171147 @ Override
@@ -183,8 +159,8 @@ public short getShort(final long offsetBytes) {
183159 @ Override
184160 public void getShortArray (final short [] dstArray , final int dstOffsetShorts , final int lengthShorts ) {
185161 final long pos = getPosition ();
186- getShortArr (seg , pos , dstArray , dstOffsetShorts , lengthShorts );
187- setPosition (pos + (lengthShorts ) << SHORT_SHIFT );
162+ MemorySegment . copy (seg , JAVA_SHORT_UNALIGNED , pos , dstArray , dstOffsetShorts , lengthShorts );
163+ setPosition (pos + (lengthShorts << SHORT_SHIFT ) );
188164 }
189165
190166 //PRIMITIVE putX() and putXArray()
@@ -203,8 +179,8 @@ public void putChar(final long offsetBytes, final char value) {
203179 @ Override
204180 public void putCharArray (final char [] srcArray , final int srcOffsetChars , final int lengthChars ) {
205181 final long pos = getPosition ();
206- putCharArr ( seg , pos , srcArray , srcOffsetChars , lengthChars );
207- setPosition (pos + (lengthChars ) << CHAR_SHIFT );
182+ MemorySegment . copy ( srcArray , srcOffsetChars , seg , JAVA_CHAR_UNALIGNED , pos , lengthChars );
183+ setPosition (pos + (lengthChars << CHAR_SHIFT ) );
208184 }
209185
210186 @ Override
@@ -222,8 +198,8 @@ public void putDouble(final long offsetBytes, final double value) {
222198 @ Override
223199 public void putDoubleArray (final double [] srcArray , final int srcOffsetDoubles , final int lengthDoubles ) {
224200 final long pos = getPosition ();
225- putDoubleArr ( seg , pos , srcArray , srcOffsetDoubles , lengthDoubles );
226- setPosition (pos + (lengthDoubles ) << DOUBLE_SHIFT );
201+ MemorySegment . copy ( srcArray , srcOffsetDoubles , seg , JAVA_DOUBLE_UNALIGNED , pos , lengthDoubles );
202+ setPosition (pos + (lengthDoubles << DOUBLE_SHIFT ) );
227203 }
228204
229205 @ Override
@@ -241,8 +217,8 @@ public void putFloat(final long offsetBytes, final float value) {
241217 @ Override
242218 public void putFloatArray (final float [] srcArray , final int srcOffsetFloats , final int lengthFloats ) {
243219 final long pos = getPosition ();
244- putFloatArr ( seg , pos , srcArray , srcOffsetFloats , lengthFloats );
245- setPosition (pos + (lengthFloats ) << FLOAT_SHIFT );
220+ MemorySegment . copy ( srcArray , srcOffsetFloats , seg , JAVA_FLOAT_UNALIGNED , pos , lengthFloats );
221+ setPosition (pos + (lengthFloats << FLOAT_SHIFT ) );
246222 }
247223
248224 @ Override
@@ -260,8 +236,8 @@ public void putInt(final long offsetBytes, final int value) {
260236 @ Override
261237 public void putIntArray (final int [] srcArray , final int srcOffsetInts , final int lengthInts ) {
262238 final long pos = getPosition ();
263- putIntArr ( seg , pos , srcArray , srcOffsetInts , lengthInts );
264- setPosition (pos + (lengthInts ) << INT_SHIFT );
239+ MemorySegment . copy ( srcArray , srcOffsetInts , seg , JAVA_INT_UNALIGNED , pos , lengthInts );
240+ setPosition (pos + (lengthInts << INT_SHIFT ) );
265241 }
266242
267243 @ Override
@@ -279,8 +255,8 @@ public void putLong(final long offsetBytes, final long value) {
279255 @ Override
280256 public void putLongArray (final long [] srcArray , final int srcOffsetLongs , final int lengthLongs ) {
281257 final long pos = getPosition ();
282- putLongArr ( seg , pos , srcArray , srcOffsetLongs , lengthLongs );
283- setPosition (pos + (lengthLongs ) << LONG_SHIFT );
258+ MemorySegment . copy ( srcArray , srcOffsetLongs , seg , JAVA_LONG_UNALIGNED , pos , lengthLongs );
259+ setPosition (pos + (lengthLongs << LONG_SHIFT ) );
284260 }
285261
286262 @ Override
@@ -298,7 +274,8 @@ public void putShort(final long offsetBytes, final short value) {
298274 @ Override
299275 public void putShortArray (final short [] srcArray , final int srcOffsetShorts , final int lengthShorts ) {
300276 final long pos = getPosition ();
301- putShortArr ( seg , pos , srcArray , srcOffsetShorts , lengthShorts );
302- setPosition (pos + (lengthShorts ) << SHORT_SHIFT );
277+ MemorySegment . copy ( srcArray , srcOffsetShorts , seg , JAVA_SHORT_UNALIGNED , pos , lengthShorts );
278+ setPosition (pos + (lengthShorts << SHORT_SHIFT ) );
303279 }
280+
304281}
0 commit comments