package com.ldbc.driver.generator;
import org.apache.commons.math3.random.RandomDataGenerator;
public class UniformByteGenerator extends Generator<Byte> {
private final RandomDataGenerator randomDataGenerator;
private final byte[] buffer;
private int currentIndexInBuffer;
UniformByteGenerator(RandomDataGenerator randomDataGenerator) {
this.randomDataGenerator = randomDataGenerator;
this.buffer = new byte[8];
this.currentIndexInBuffer = this.buffer.length;
fillBufferIfEmpty();
}
private void fillBufferIfEmpty() {
if (currentIndexInBuffer == buffer.length) {
doFillBufferWithBytesFromRandomLong(buffer);
currentIndexInBuffer = 0;
}
}
private void doFillBufferWithBytesFromRandomLong(byte[] buffer) {
long randomBytes = randomDataGenerator.nextLong(Long.MIN_VALUE, Long.MAX_VALUE);
buffer[0] = (byte) ((randomBytes >> 0) & 255);
buffer[1] = (byte) ((randomBytes >> 8) & 255);
buffer[2] = (byte) ((randomBytes >> 16) & 255);
buffer[3] = (byte) ((randomBytes >> 24) & 255);
buffer[4] = (byte) ((randomBytes >> 32) & 255);
buffer[5] = (byte) ((randomBytes >> 40) & 255);
buffer[6] = (byte) ((randomBytes >> 48) & 255);
buffer[7] = (byte) ((randomBytes >> 56) & 255);
}
@Override
protected Byte doNext() throws GeneratorException {
fillBufferIfEmpty();
return buffer[currentIndexInBuffer++];
}
}