@Override public IComplexNumber getComplex(long i) { return dataType() == Type.FLOAT ? getComplexFloat(i) : getComplexDouble(i); }
/** * Special method for * @param i * @return */ protected short getShort(long i) { if (dataType() != Type.HALF) throw new UnsupportedOperationException("getShort() is supported for Half-precision buffers only"); return fromFloat(((HalfIndexer) indexer).get(offset() + i)); }
@Override public long getLong(long i) { if (dataType() == Type.FLOAT) { return (long) ((FloatIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return (long) ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.DOUBLE) { return (long) ((DoubleIndexer) indexer).get(offset() + i); } else { return ((LongIndexer) indexer).get(offset() + i); } }
@Override public byte[] asBytes() { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); if (dataType() == Type.DOUBLE) { for (int i = 0; i < length(); i++) { try { dos.writeDouble(getDouble(i)); } catch (IOException e) { e.printStackTrace(); } } } else { for (int i = 0; i < length(); i++) { try { dos.writeFloat(getFloat(i)); } catch (IOException e) { e.printStackTrace(); } } } return bos.toByteArray(); }
@Override public int getInt(long i) { if (dataType() == Type.DOUBLE) { return (int) ((DoubleIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.LONG) { return (int) ((LongIndexer) indexer).get(offset() + i); } else { return (int) ((FloatIndexer) indexer).get(offset() + i); } }
@Override public float getFloat(long i) { if (dataType() == Type.DOUBLE) { return (float) ((DoubleIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.LONG) { return ((LongRawIndexer) indexer).get(offset() + i); } else if (dataType() == Type.HALF) { return ((HalfIndexer) indexer).get(offset() + i); } else { return ((FloatIndexer) indexer).get(offset() + i); } }
@Override public double getDouble(long i) { if (indexer == null) { throw new IllegalStateException("Indexer must never be null"); } if (dataType() == Type.FLOAT) { return ((FloatIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.LONG) { return ((LongRawIndexer) indexer).get(offset() + i); } else { return ((DoubleIndexer) indexer).get(offset() + i); } }
@Override public void put(long i, long element) { if (dataType() == Type.DOUBLE) { ((DoubleIndexer) indexer).put(offset() + i, (double) element); } else if (dataType() == Type.INT) { ((IntIndexer) indexer).put(offset() + i, (int) element); } else if (dataType() == Type.LONG) { ((LongRawIndexer) indexer).put(offset() + i, element); } else { ((FloatIndexer) indexer).put(offset() + i, (float) element); } if (i == length) { length++; } }
@Override public void write(DataOutputStream out) throws IOException { if (length() >= Integer.MAX_VALUE) throw new IllegalArgumentException("Length of data buffer can not be >= Integer.MAX_VALUE on output"); // log.info("Saving dType: {}", dataType().name()); out.writeUTF(allocationMode.name()); out.writeLong(length()); out.writeUTF(dataType().name()); if (dataType() == Type.DOUBLE) { for (int i = 0; i < length(); i++) out.writeDouble(getDouble(i)); } else if (dataType() == Type.LONG) { for (int i = 0; i < length(); i++) out.writeLong(getLong(i)); } else if (dataType() == Type.INT) { for (int i = 0; i < length(); i++) out.writeInt(getInt(i)); } else if (dataType() == Type.HALF) { for (int i = 0; i < length(); i++) { out.writeShort(getShort(i)); } } else { for (int i = 0; i < length(); i++) { out.writeFloat(getFloat(i)); } } }
@Override public void put(long i, int element) { if (dataType() == Type.DOUBLE) { ((DoubleIndexer) indexer).put(offset() + i, element); } else if (dataType() == Type.INT) { ((IntIndexer) indexer).put(offset() + i, element); } else if (dataType() == Type.LONG) { ((LongRawIndexer) indexer).put(offset() + i, element); } else { ((FloatIndexer) indexer).put(offset() + i, element); } if (i == length) { length++; } }
@Override public void put(long i, double element) { if (dataType() == Type.DOUBLE) { ((DoubleIndexer) indexer).put(offset() + i, element); } else if (dataType() == Type.INT) { ((IntIndexer) indexer).put(offset() + i, (int) element); } else if (dataType() == Type.LONG) { ((LongRawIndexer) indexer).put(offset() + i, (long) element); } else if (dataType() == Type.HALF) { ((HalfIndexer) indexer).put(offset() + i, (float) element); } else { ((FloatIndexer) indexer).put(offset() + i, (float) element); } if (i == length) { length++; } }
@Override public void put(long i, float element) { if (dataType() == Type.DOUBLE) { ((DoubleIndexer) indexer).put(offset() + i, element); } else if (dataType() == Type.INT) { ((IntIndexer) indexer).put(offset() + i, (int) element); } else if (dataType() == Type.LONG) { ((LongRawIndexer) indexer).put(offset() + i, (long) element); } else { ((FloatIndexer) indexer).put(offset() + i, element); } if (i >= length) { length++; } if (i == length) { length++; } }
/** * Create a data buffer from * the given length * * @param buffer * @param length */ public BaseDataBuffer(ByteBuffer buffer, long length) { if (length < 1) throw new IllegalArgumentException("Length must be >= 1"); initTypeAndSize(); this.length = length; allocationMode = AllocUtil.getAllocationModeFromContext(); if (dataType() == Type.DOUBLE) { pointer = new DoublePointer(buffer.asDoubleBuffer()); setIndexer(DoubleIndexer.create((DoublePointer) pointer)); } else if (dataType() == Type.FLOAT) { pointer = new FloatPointer(buffer.asFloatBuffer()); setIndexer(FloatIndexer.create((FloatPointer) pointer)); } else if (dataType() == Type.INT) { pointer = new IntPointer(buffer.asIntBuffer()); setIndexer(IntIndexer.create((IntPointer) pointer)); } else if (dataType() == Type.LONG) { pointer = new LongPointer(buffer.asLongBuffer()); setIndexer(LongIndexer.create((LongPointer) pointer)); } // log.info("Creating new buffer of size: {}; dtype: {}; D", length, dataType()); }
@Override public void copyAtStride(DataBuffer buf, long n, long stride, long yStride, long offset, long yOffset) { if (dataType() == Type.FLOAT) { for (int i = 0; i < n; i++) { put(offset + i * stride, buf.getFloat(yOffset + i * yStride)); } } else { for (int i = 0; i < n; i++) { put(offset + i * stride, buf.getDouble(yOffset + i * yStride)); } } }
/** * * @param length * @param elementSize */ public BaseDataBuffer(long length, int elementSize) { if (length < 1) throw new IllegalArgumentException("Length must be >= 1"); initTypeAndSize(); allocationMode = AllocUtil.getAllocationModeFromContext(); this.length = length; this.underlyingLength = length; this.elementSize = (byte) elementSize; if (dataType() == Type.DOUBLE) { pointer = new DoublePointer(length); indexer = DoubleIndexer.create((DoublePointer) pointer); } else if (dataType() == Type.FLOAT) { pointer = new FloatPointer(length); setIndexer(FloatIndexer.create((FloatPointer) pointer)); } else if (dataType() == Type.INT) { pointer = new IntPointer(length); setIndexer(IntIndexer.create((IntPointer) pointer)); } else if (dataType() == Type.LONG) { pointer = new LongPointer(length); setIndexer(LongIndexer.create((LongPointer) pointer)); } // log.info("Creating new buffer of size: {}; dtype: {}; C", length, dataType()); }
@Override public Pointer addressPointer() { if (offset() > 0) { if (dataType() == Type.DOUBLE) { return new DoublePointer(pointer()) { } else if (dataType() == Type.FLOAT) { return new FloatPointer(pointer()) { } else if (dataType() == Type.INT) { return new IntPointer(pointer()) { } else if (dataType() == Type.LONG) { return new LongPointer(pointer()) {
public BaseDataBuffer(int[] data, boolean copy, MemoryWorkspace workspace) { allocationMode = AllocUtil.getAllocationModeFromContext(); length = data.length; underlyingLength = data.length; attached = true; parentWorkspace = workspace; initTypeAndSize(); //log.info("Allocating FloatPointer from array of {} elements", data.length); pointer = workspace.alloc(data.length * getElementSize(), dataType(), false).asIntPointer().put(data); workspaceGenerationId = workspace.getGenerationId(); indexer = IntIndexer.create((IntPointer) pointer); //wrappedBuffer = pointer.asByteBuffer(); }
public BaseDataBuffer(double[] data, boolean copy, MemoryWorkspace workspace) { allocationMode = AllocUtil.getAllocationModeFromContext(); length = data.length; underlyingLength = data.length; attached = true; parentWorkspace = workspace; initTypeAndSize(); //log.info("Allocating FloatPointer from array of {} elements", data.length); pointer = workspace.alloc(data.length * getElementSize(), dataType(), false).asDoublePointer().put(data); workspaceGenerationId = workspace.getGenerationId(); indexer = DoubleIndexer.create((DoublePointer) pointer); //wrappedBuffer = pointer.asByteBuffer(); }
public BaseDataBuffer(float[] data, boolean copy, MemoryWorkspace workspace) { allocationMode = AllocUtil.getAllocationModeFromContext(); length = data.length; underlyingLength = data.length; attached = true; parentWorkspace = workspace; initTypeAndSize(); //log.info("Allocating FloatPointer from array of {} elements", data.length); pointer = workspace.alloc(data.length * getElementSize(), dataType(), false).asFloatPointer().put(data); workspaceGenerationId = workspace.getGenerationId(); setIndexer(FloatIndexer.create((FloatPointer) pointer)); //wrappedBuffer = pointer.asByteBuffer(); }