Skip to content

Commit ec29e56

Browse files
authored
Merge pull request #255 from apache/6.0.X_cherrypick_tgt
6.0.x cherrypick tgt
2 parents a10806d + 42b45a5 commit ec29e56

11 files changed

+705
-751
lines changed

src/main/java/org/apache/datasketches/memory/MemoryRequestServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public interface MemoryRequestServer {
3838
* @param alignmentBytes requested segment alignment. Typically 1, 2, 4 or 8.
3939
* @param byteOrder the given <i>ByteOrder</i>. It must be non-null.
4040
* @param arena the given arena to manage the new off-heap WritableMemory.
41-
* If arena is null, the requested WritableMemory will be off-heap.
41+
* If arena is null, the requested WritableMemory will be on-heap.
4242
* Warning: This class is not thread-safe. Specifying an Arena that allows multiple threads is not recommended.
4343
* @return new WritableMemory with the requested capacity.
4444
*/

src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java

Lines changed: 26 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -25,45 +25,21 @@
2525
import static java.lang.foreign.ValueLayout.JAVA_INT_UNALIGNED;
2626
import static java.lang.foreign.ValueLayout.JAVA_LONG_UNALIGNED;
2727
import 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

4129
import java.lang.foreign.Arena;
4230
import java.lang.foreign.MemorySegment;
4331

4432
import org.apache.datasketches.memory.MemoryRequestServer;
4533
import 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
*/
6540
final 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

Comments
 (0)