package org.rrd4j.core.jrrd;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
/**
* This class is used to read a unival from a file
* unival is a rrdtool type, defined in rrd_format.h
* @author Fabrice Bacchella <fbacchella@spamcop.net>
*
*/
class UnivalArray {
private final ByteBuffer buffer;
private final int sizeoflong;
/**
* Read an UnivalArray from a rrd native file at the current position
*
* @param file the RRdFile
* @param size the numer of elements in the array
* @throws java.io.IOException if any.
*/
public UnivalArray(RRDFile file, int size) throws IOException {
sizeoflong = file.getBits();
buffer = ByteBuffer.allocate(size * 8);
if(file.isBigEndian())
buffer.order(ByteOrder.BIG_ENDIAN);
else
buffer.order(ByteOrder.LITTLE_ENDIAN);
file.align();
file.read(buffer);
}
/**
* <p>getLong.</p>
*
* @param e a {@link java.lang.Enum} object.
* @return a long.
*/
public long getLong(Enum<?> e) {
buffer.position(8 * e.ordinal());
if(sizeoflong == 64)
return buffer.getLong();
else
return buffer.getInt();
}
/**
* <p>getDouble.</p>
*
* @param e a {@link java.lang.Enum} object.
* @return a double.
*/
public double getDouble(Enum<?> e) {
buffer.position(8 * e.ordinal());
return buffer.getDouble();
}
}