/** * @param floatPointer * @param length * @return */ @Override public DataBuffer create(FloatPointer floatPointer, long length) { floatPointer.capacity(length); floatPointer.limit(length); floatPointer.position(0); return new FloatBuffer(floatPointer, FloatIndexer.create(floatPointer), length); }
@Override public FloatIndexer createIndexer(boolean direct) { int[] w = {0}, h = {0}; fpixGetDimensions((FPIX)this, w, h); int wpl = fpixGetWpl((FPIX)this); long[] sizes = {h[0], w[0], wpl / w[0]}; long[] strides = {wpl, wpl / w[0], 1}; FloatPointer data = new FloatPointer(fpixGetData((FPIX)this)).capacity(h[0] * wpl); return FloatIndexer.create(data, sizes, strides, direct); }
/** @return {@link FPIX#data()} wrapped in a {@link FloatBuffer} starting at given byte index. */ public FloatBuffer createBuffer(int index) { int[] w = {0}, h = {0}; fpixGetDimensions((FPIX)this, w, h); int wpl = fpixGetWpl((FPIX)this); FloatPointer data = new FloatPointer(fpixGetData((FPIX)this)).position(index).capacity(h[0] * wpl); return data.asBuffer(); }
/** Returns {@link #tensor_data()} wrapped in a {@link Buffer} of appropriate type starting at given index. */ public <B extends Buffer> B createBuffer(long index) { BytePointer ptr = tensor_data(); long size = TotalBytes(); switch (dtype()) { case DT_COMPLEX64: case DT_FLOAT: return (B)new FloatPointer(ptr).position(index).capacity(size/4).asBuffer(); case DT_DOUBLE: return (B)new DoublePointer(ptr).position(index).capacity(size/8).asBuffer(); case DT_QINT32: case DT_INT32: return (B)new IntPointer(ptr).position(index).capacity(size/4).asBuffer(); case DT_BOOL: case DT_QUINT8: case DT_UINT8: case DT_QINT8: case DT_INT8: return (B)ptr.position(index).capacity(size).asBuffer(); case DT_BFLOAT16: case DT_INT16: return (B)new ShortPointer(ptr).position(index).capacity(size/2).asBuffer(); case DT_INT64: return (B)new LongPointer(ptr).position(index).capacity(size/8).asBuffer(); case DT_STRING: default: assert false; } return null; }
case DT_FLOAT: return (I)FloatIndexer.create(new FloatPointer(ptr).capacity(size/4), sizes, strides, direct).indexable(this); case DT_DOUBLE: return (I)DoubleIndexer.create(new DoublePointer(ptr).capacity(size/8), sizes, strides, direct).indexable(this); case DT_QINT32: