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();
    }

}
