Skip to content
This repository has been archived by the owner on May 3, 2022. It is now read-only.

Commit

Permalink
ChunkTesterImExporter: Implement handling of float and double arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Nothaas committed Dec 19, 2018
1 parent 2efae7d commit fc50635
Showing 1 changed file with 103 additions and 5 deletions.
108 changes: 103 additions & 5 deletions src/main/java/de/hhu/bsinfo/dxmem/data/ChunkTesterImExporter.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ class ChunkTesterImExporter implements Importer, Exporter {
/**
* Constructor
*
* @param p_buffer ByteBuffer with serialized chunk data for importing
* @param p_randomAbort True to randomly abort serialization, false otherwise
* @param p_buffer
* ByteBuffer with serialized chunk data for importing
* @param p_randomAbort
* True to randomly abort serialization, false otherwise
*/
ChunkTesterImExporter(final ByteBuffer p_buffer, final boolean p_randomAbort) {
m_buffer = ByteBuffer.allocate(p_buffer.capacity());
Expand All @@ -50,8 +52,10 @@ class ChunkTesterImExporter implements Importer, Exporter {
/**
* Constructor
*
* @param p_chunk Chunk to export
* @param p_randomAbort True to randomly abort serialization, false otherwise
* @param p_chunk
* Chunk to export
* @param p_randomAbort
* True to randomly abort serialization, false otherwise
*/
ChunkTesterImExporter(final AbstractChunk p_chunk, final boolean p_randomAbort) {
m_initialSize = p_chunk.sizeofObject();
Expand Down Expand Up @@ -189,6 +193,22 @@ public int writeLongs(final long[] p_array) {
return ret;
}

@Override
public int writeFloats(final float[] p_array) {
checkIfRandomAbort();
int ret = m_imExporter.writeFloats(p_array);
m_currentPos += p_array.length * Float.BYTES;
return ret;
}

@Override
public int writeDoubles(final double[] p_array) {
checkIfRandomAbort();
int ret = m_imExporter.writeDoubles(p_array);
m_currentPos += p_array.length * Double.BYTES;
return ret;
}

@Override
public int writeBytes(final byte[] p_array, final int p_offset, final int p_length) {
checkIfRandomAbort();
Expand Down Expand Up @@ -229,6 +249,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) {
checkIfRandomAbort();
int ret = m_imExporter.writeFloats(p_array, p_offset, p_length);
m_currentPos += p_length * Float.BYTES;
return ret;
}

@Override
public int writeDoubles(final double[] p_array, final int p_offset, final int p_length) {
checkIfRandomAbort();
int ret = m_imExporter.writeDoubles(p_array, p_offset, p_length);
m_currentPos += p_length * Double.BYTES;
return ret;
}

@Override
public void writeByteArray(final byte[] p_array) {
checkIfRandomAbort();
Expand Down Expand Up @@ -264,6 +300,20 @@ public void writeLongArray(final long[] p_array) {
m_currentPos += ObjectSizeUtil.sizeofCompactedNumber(p_array.length) + p_array.length * Long.BYTES;
}

@Override
public void writeFloatArray(final float[] p_array) {
checkIfRandomAbort();
m_imExporter.writeFloatArray(p_array);
m_currentPos += ObjectSizeUtil.sizeofCompactedNumber(p_array.length) + p_array.length * Float.BYTES;
}

@Override
public void writeDoubleArray(final double[] p_array) {
checkIfRandomAbort();
m_imExporter.writeDoubleArray(p_array);
m_currentPos += ObjectSizeUtil.sizeofCompactedNumber(p_array.length) + p_array.length * Double.BYTES;
}

@Override
public void importObject(final Importable p_object) {
checkIfRandomAbort();
Expand Down Expand Up @@ -391,6 +441,22 @@ public int readLongs(final long[] p_array) {
return ret;
}

@Override
public int readFloats(final float[] p_array) {
checkIfRandomAbort();
int ret = m_imExporter.readFloats(p_array);
m_currentPos += p_array.length * Float.BYTES;
return ret;
}

@Override
public int readDoubles(final double[] p_array) {
checkIfRandomAbort();
int ret = m_imExporter.readDoubles(p_array);
m_currentPos += p_array.length * Double.BYTES;
return ret;
}

@Override
public int readBytes(final byte[] p_array, final int p_offset, final int p_length) {
checkIfRandomAbort();
Expand Down Expand Up @@ -431,6 +497,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) {
checkIfRandomAbort();
int ret = m_imExporter.readFloats(p_array, p_offset, p_length);
m_currentPos += p_length * Float.BYTES;
return ret;
}

@Override
public int readDoubles(final double[] p_array, final int p_offset, final int p_length) {
checkIfRandomAbort();
int ret = m_imExporter.readDoubles(p_array, p_offset, p_length);
m_currentPos += p_length * Double.BYTES;
return ret;
}

@Override
public byte[] readByteArray(final byte[] p_array) {
checkIfRandomAbort();
Expand Down Expand Up @@ -471,13 +553,29 @@ public long[] readLongArray(final long[] p_array) {
return ret;
}

@Override
public float[] readFloatArray(final float[] p_array) {
checkIfRandomAbort();
float[] ret = readFloatArray(p_array);
m_currentPos += ObjectSizeUtil.sizeofCompactedNumber(ret.length) + ret.length * Long.BYTES;
return ret;
}

@Override
public double[] readDoubleArray(final double[] p_array) {
checkIfRandomAbort();
double[] ret = readDoubleArray(p_array);
m_currentPos += ObjectSizeUtil.sizeofCompactedNumber(ret.length) + ret.length * Long.BYTES;
return ret;
}

/**
* Check if we have to abort the serialization and throw an ArrayIndexOutOfBoundsException
*/
private void checkIfRandomAbort() {
if (m_randomAbortAtPos != -1) {
if (m_currentPos >= m_randomAbortAtPos) {
throw new ArrayIndexOutOfBoundsException("Random abort at "+ m_randomAbortAtPos);
throw new ArrayIndexOutOfBoundsException("Random abort at " + m_randomAbortAtPos);
}
}
}
Expand Down

0 comments on commit fc50635

Please sign in to comment.