package water.fvec;
import water.*;
// A filtered Chunk; passed in the original data and a (chunk-relative) set of
// rows (also in Chunk for, for maximum compression).
public class SubsetChunk extends Chunk {
final Chunk _data; // All the data
final Chunk _rows; // The selected rows
public SubsetChunk( Chunk data, Chunk rows, Vec subset_vec ) {
_data = data; _rows = rows;
set_len(rows._len);
_start = rows._start; _vec = subset_vec; _cidx = rows._cidx;
_mem = new byte[0];
}
@Override
public ChunkVisitor processRows(ChunkVisitor nc, int from, int to) {
int [] rows = _rows.getIntegers(new int[to-from],from,to,-1);
return _data.processRows(nc, rows);
}
@Override
public ChunkVisitor processRows(ChunkVisitor nc, int... rows) {
int [] expandedRows = _rows.getIntegers(new int[rows[rows.length-1]-rows[0]],rows[0],rows[rows.length-1],-1);
int off = rows[0];
int [] selectedRows = new int[rows.length];
for(int i = 0; i < rows.length; ++i)
selectedRows[i] = expandedRows[rows[i]-off];
return _data.processRows(nc, selectedRows);
}
@Override protected double atd_impl(int idx) { return _data.atd_impl((int)_rows.at8_impl(idx)); }
@Override protected long at8_impl(int idx) { return _data.at8_impl((int)_rows.at8_impl(idx)); }
// Returns true if the masterVec is missing, false otherwise
@Override protected boolean isNA_impl(int idx) { return _data.isNA_impl((int)_rows.at8_impl(idx)); }
@Override boolean set_impl(int idx, long l) { return false; }
@Override boolean set_impl(int idx, double d) { return false; }
@Override boolean set_impl(int idx, float f) { return false; }
@Override boolean setNA_impl(int idx) { return false; }
public static AutoBuffer write_impl(SubsetChunk sc, AutoBuffer bb) { throw water.H2O.fail(); }
@Override protected final void initFromBytes () { throw water.H2O.fail(); }
}