package org.rrd4j.core;
import java.io.IOException;
class RrdDoubleMatrix extends RrdPrimitive {
private static final String LENGTH = ", length=";
private final int rows;
private final int columns;
RrdDoubleMatrix(RrdUpdater updater, int row, int column, boolean shouldInitialize) throws IOException {
super(updater, RrdPrimitive.RRD_DOUBLE, row * column, false);
this.rows = row;
this.columns = column;
if (shouldInitialize)
writeDouble(0, Double.NaN, rows * columns);
}
void set(int column, int index, double value) throws IOException {
writeDouble(columns * index + column, value);
}
void set(int column, int index, double value, int count) throws IOException {
// rollovers not allowed!
assert index + count <= rows : "Invalid robin index supplied: index=" + index +
", count=" + count + LENGTH + rows;
for (int i = columns * index + column, c = 0; c < count; i += columns, c++)
writeDouble(i, value);
}
/**
* <p>set.</p>
*
* @param column a int.
* @param index a int.
* @param newValues an array of double.
* @throws java.io.IOException if any.
*/
public void set(int column, int index, double[] newValues) throws IOException {
int count = newValues.length;
// rollovers not allowed!
assert index + count <= rows : "Invalid robin index supplied: index=" + index +
", count=" + count + LENGTH + rows;
for (int i = columns * index + column, c = 0; c < count; i += columns, c++)
writeDouble(i, newValues[c]);
}
double get(int column, int index) throws IOException {
assert index < rows : "Invalid index supplied: " + index + LENGTH + rows;
return readDouble(columns * index + column);
}
double[] get(int column, int index, int count) throws IOException {
assert index + count <= rows : "Invalid index/count supplied: " + index +
"/" + count + " (length=" + rows + ")";
double[] values = new double[count];
for (int i = columns * index + column, c = 0; c < count; i += columns, c++) {
values[c] = readDouble(i);
}
return values;
}
/**
* <p>Getter for the field <code>columns</code>.</p>
*
* @return a int.
*/
public int getColumns() {
return columns;
}
/**
* <p>Getter for the field <code>rows</code>.</p>
*
* @return a int.
*/
public int getRows() {
return rows;
}
}