package water.fvec; import water.util.UnsafeUtils; public class C16Chunk extends Chunk { static final long _LO_NA = Long.MIN_VALUE; static final long _HI_NA = 0; C16Chunk( byte[] bs ) { _mem=bs; _start = -1; set_len(_mem.length>>4); } @Override protected final long at8_impl( int i ) { throw new IllegalArgumentException("at8_abs but 16-byte UUID"); } @Override protected final double atd_impl( int i ) { throw new IllegalArgumentException("atd but 16-byte UUID"); } @Override protected final boolean isNA_impl( int i ) { return isNA(loAt(i), hiAt(i)); } public static boolean isNA(long lo, long hi) { return lo ==_LO_NA && hi ==_HI_NA; } private long loAt(int idx) { return UnsafeUtils.get8(_mem, idx*16); } private long hiAt(int idx) { return UnsafeUtils.get8(_mem, idx*16+8); } @Override protected long at16l_impl(int idx) { long lo = loAt(idx); if (lo == _LO_NA && hiAt(idx) == _HI_NA) { throw new IllegalArgumentException("at16l but value is missing at " + idx); } return lo; } @Override protected long at16h_impl(int idx) { long hi = hiAt(idx); if (hi == _HI_NA && loAt(idx) == _LO_NA) { throw new IllegalArgumentException("at16h but value is missing at " + idx); } return hi; } @Override boolean set_impl(int i, long lo, long hi) { if (isNA(lo, hi)) throw new IllegalArgumentException("Illegal uid value"); UnsafeUtils.set8(_mem, i*16, lo); UnsafeUtils.set8(_mem, i*16 + 8, hi); return true; } @Override boolean set_impl(int idx, long l) { return false; } @Override boolean set_impl(int i, double d) { return false; } @Override boolean set_impl(int i, float f ) { return false; } @Override boolean setNA_impl(int idx) { return set_impl(idx, _LO_NA, _HI_NA); } @Override public <T extends ChunkVisitor> T processRows(T v, int from, int to) { for(int i = from; i < to; i++) { if(isNA(i)) v.addNAs(1); else v.addValue(UnsafeUtils.get8(_mem, 16 * i), UnsafeUtils.get8(_mem, 16 * i + 8)); } return v; } @Override public <T extends ChunkVisitor> T processRows(T v, int[] ids) { for(int i:ids) v.addValue(UnsafeUtils.get8(_mem,16*i),UnsafeUtils.get8(_mem,16*i+8)); return v; } @Override protected final void initFromBytes () { _start = -1; _cidx = -1; set_len(_mem.length>>4); assert _mem.length == _len * 16; } // @Override protected int pformat_len0() { return 36; } }