Skip to content

Commit

Permalink
core: Add support for float and double arrays to im-/exporters
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Nothaas committed Dec 19, 2018
1 parent 26d3713 commit bc9d6f2
Show file tree
Hide file tree
Showing 7 changed files with 559 additions and 21 deletions.
76 changes: 76 additions & 0 deletions src/main/java/de/hhu/bsinfo/dxnet/core/LargeMessageExporter.java
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,16 @@ public int writeLongs(final long[] p_array) {
return writeLongs(p_array, 0, p_array.length);
}

@Override
public int writeFloats(final float[] p_array) {
return writeFloats(p_array, 0, p_array.length);
}

@Override
public int writeDoubles(final double[] p_array) {
return writeDoubles(p_array, 0, p_array.length);
}

@Override
public int writeBytes(final byte[] p_array, final int p_offset, final int p_length) {
if (m_skippedBytes < m_unfinishedOperation.getIndex()) {
Expand Down Expand Up @@ -649,6 +659,36 @@ public int writeLongs(final long[] p_array, final int p_offset, final int p_leng
return p_length;
}

@Override
public int writeFloats(final float[] p_array, final int p_offset, final int p_length) {
int floatsToSkip = 0;
if (m_skippedBytes < m_skipBytes) {
floatsToSkip = (m_skipBytes - m_skippedBytes) / Float.BYTES;
m_skippedBytes = m_skipBytes - (m_skipBytes - m_skippedBytes) % Float.BYTES;
}

for (int i = floatsToSkip; i < p_length; i++) {
writeFloat(p_array[p_offset + i]);
}

return p_length;
}

@Override
public int writeDoubles(final double[] p_array, final int p_offset, final int p_length) {
int doublesToSkip = 0;
if (m_skippedBytes < m_skipBytes) {
doublesToSkip = (m_skipBytes - m_skippedBytes) / Double.BYTES;
m_skippedBytes = m_skipBytes - (m_skipBytes - m_skippedBytes) % Double.BYTES;
}

for (int i = doublesToSkip; i < p_length; i++) {
writeDouble(p_array[p_offset + i]);
}

return p_length;
}

@Override
public void writeByteArray(final byte[] p_array) {
if (m_skippedBytes < m_unfinishedOperation.getIndex()) {
Expand Down Expand Up @@ -738,4 +778,40 @@ public void writeLongArray(final long[] p_array) {
}
}
}

@Override
public void writeFloatArray(final float[] p_array) {
if (m_skippedBytes < m_unfinishedOperation.getIndex()) {
// Array length and array were written before
m_skippedBytes += ObjectSizeUtil.sizeofCompactedNumber(p_array.length) + p_array.length * Float.BYTES;
} else {
int startPosition = getNumberOfWrittenBytes();
writeCompactNumber(p_array.length);
try {
writeFloats(p_array);
} catch (final ArrayIndexOutOfBoundsException e) {
// Not enough space in buffer currently -> abort
m_unfinishedOperation.setIndex(startPosition);
throw e;
}
}
}

@Override
public void writeDoubleArray(final double[] p_array) {
if (m_skippedBytes < m_unfinishedOperation.getIndex()) {
// Array length and array were written before
m_skippedBytes += ObjectSizeUtil.sizeofCompactedNumber(p_array.length) + p_array.length * Double.BYTES;
} else {
int startPosition = getNumberOfWrittenBytes();
writeCompactNumber(p_array.length);
try {
writeDoubles(p_array);
} catch (final ArrayIndexOutOfBoundsException e) {
// Not enough space in buffer currently -> abort
m_unfinishedOperation.setIndex(startPosition);
throw e;
}
}
}
}
42 changes: 40 additions & 2 deletions src/main/java/de/hhu/bsinfo/dxnet/core/MessageExporterDefault.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public int writeShorts(final short[] p_array) {
}

@Override
public int writeChars(char[] p_array) {
public int writeChars(final char[] p_array) {
return writeChars(p_array, 0, p_array.length);
}

Expand All @@ -159,6 +159,16 @@ public int writeLongs(final long[] p_array) {
return writeLongs(p_array, 0, p_array.length);
}

@Override
public int writeFloats(final float[] p_array) {
return writeFloats(p_array, 0, p_array.length);
}

@Override
public int writeDoubles(final double[] p_array) {
return writeDoubles(p_array, 0, p_array.length);
}

@Override
public int writeBytes(final byte[] p_array, final int p_offset, final int p_length) {
int ret = UnsafeMemory.writeBytes(m_bufferAddress + m_currentPosition, p_array, p_offset, p_length);
Expand Down Expand Up @@ -199,6 +209,22 @@ public int writeLongs(final long[] p_array, final int p_offset, final int p_leng
return ret;
}

@Override
public int writeFloats(final float[] p_array, final int p_offset, final int p_length) {
int ret = UnsafeMemory.writeFloats(m_bufferAddress + m_currentPosition, p_array, p_offset, p_length);
m_currentPosition += Float.BYTES * ret;

return ret;
}

@Override
public int writeDoubles(final double[] p_array, final int p_offset, final int p_length) {
int ret = UnsafeMemory.writeDoubles(m_bufferAddress + m_currentPosition, p_array, p_offset, p_length);
m_currentPosition += Double.BYTES * ret;

return ret;
}

@Override
public void writeByteArray(final byte[] p_array) {
writeCompactNumber(p_array.length);
Expand All @@ -212,7 +238,7 @@ public void writeShortArray(final short[] p_array) {
}

@Override
public void writeCharArray(char[] p_array) {
public void writeCharArray(final char[] p_array) {
writeCompactNumber(p_array.length);
writeChars(p_array);
}
Expand All @@ -229,4 +255,16 @@ public void writeLongArray(final long[] p_array) {
writeLongs(p_array);
}

@Override
public void writeFloatArray(final float[] p_array) {
writeCompactNumber(p_array.length);
writeFloats(p_array);
}

@Override
public void writeDoubleArray(final double[] p_array) {
writeCompactNumber(p_array.length);
writeDoubles(p_array);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,16 @@ public int writeLongs(final long[] p_array) {
return writeLongs(p_array, 0, p_array.length);
}

@Override
public int writeFloats(final float[] p_array) {
return writeFloats(p_array, 0, p_array.length);
}

@Override
public int writeDoubles(final double[] p_array) {
return writeDoubles(p_array, 0, p_array.length);
}

@Override
public int writeBytes(final byte[] p_array, final int p_offset, final int p_length) {
if (m_currentPosition + p_length <= m_bufferSize) {
Expand Down Expand Up @@ -278,6 +288,24 @@ public int writeLongs(final long[] p_array, final int p_offset, final int p_leng
return p_length;
}

@Override
public int writeFloats(final float[] p_array, final int p_offset, final int p_length) {
for (int i = 0; i < p_length; i++) {
writeFloat(p_array[p_offset + i]);
}

return p_length;
}

@Override
public int writeDoubles(final double[] p_array, final int p_offset, final int p_length) {
for (int i = 0; i < p_length; i++) {
writeDouble(p_array[p_offset + i]);
}

return p_length;
}

@Override
public void writeByteArray(final byte[] p_array) {
writeCompactNumber(p_array.length);
Expand Down Expand Up @@ -307,4 +335,16 @@ public void writeLongArray(final long[] p_array) {
writeCompactNumber(p_array.length);
writeLongs(p_array);
}

@Override
public void writeFloatArray(final float[] p_array) {
writeCompactNumber(p_array.length);
writeFloats(p_array);
}

@Override
public void writeDoubleArray(final double[] p_array) {
writeCompactNumber(p_array.length);
writeDoubles(p_array);
}
}
40 changes: 40 additions & 0 deletions src/main/java/de/hhu/bsinfo/dxnet/core/MessageImporterDefault.java
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,16 @@ public int readLongs(final long[] p_array) {
return readLongs(p_array, 0, p_array.length);
}

@Override
public int readFloats(final float[] p_array) {
return readFloats(p_array, 0, p_array.length);
}

@Override
public int readDoubles(final double[] p_array) {
return readDoubles(p_array, 0, p_array.length);
}

@Override
public int readBytes(final byte[] p_array, final int p_offset, final int p_length) {
int ret = UnsafeMemory.readBytes(m_bufferAddress + m_currentPosition, p_array, p_offset, p_length);
Expand Down Expand Up @@ -246,6 +256,22 @@ public int readLongs(final long[] p_array, final int p_offset, final int p_lengt
return ret;
}

@Override
public int readFloats(final float[] p_array, final int p_offset, final int p_length) {
int ret = UnsafeMemory.readFloats(m_bufferAddress + m_currentPosition, p_array, p_offset, p_length);
m_currentPosition += ret * Float.BYTES;

return ret;
}

@Override
public int readDoubles(final double[] p_array, final int p_offset, final int p_length) {
int ret = UnsafeMemory.readDoubles(m_bufferAddress + m_currentPosition, p_array, p_offset, p_length);
m_currentPosition += ret * Double.BYTES;

return ret;
}

@Override
public byte[] readByteArray(final byte[] p_array) {
byte[] arr = new byte[readCompactNumber(0)];
Expand Down Expand Up @@ -280,4 +306,18 @@ public long[] readLongArray(final long[] p_array) {
readLongs(arr);
return arr;
}

@Override
public float[] readFloatArray(final float[] p_array) {
float[] arr = new float[readCompactNumber(0)];
readFloats(arr);
return arr;
}

@Override
public double[] readDoubleArray(final double[] p_array) {
double[] arr = new double[readCompactNumber(0)];
readDoubles(arr);
return arr;
}
}
Loading

0 comments on commit bc9d6f2

Please sign in to comment.