@Override public void assign(long[] indices, float[] data, boolean contiguous, long inc) { if (indices.length != data.length) throw new IllegalArgumentException("Indices and data length must be the same"); if (indices.length > length()) throw new IllegalArgumentException("More elements than space to assign. This buffer is of length " + length() + " where the indices are of length " + data.length); for (int i = 0; i < indices.length; i++) { put(indices[i], data[i]); } }
@Override public void assign(long[] indices, double[] data, boolean contiguous, long inc) { if (indices.length != data.length) throw new IllegalArgumentException("Indices and data length must be the same"); if (indices.length > length()) throw new IllegalArgumentException("More elements than space to assign. This buffer is of length " + length() + " where the indices are of length " + data.length); for (int i = 0; i < indices.length; i += inc) { put(indices[i], data[i]); } }
@Override public float[] getFloatsAt(long offset, long inc, int length) { if (offset + length > length()) length -= offset; float[] ret = new float[length]; for (int i = 0; i < length; i++) { ret[i] = getFloat(i + offset); } return ret; }
@Override public void assign(long[] offsets, long[] strides, DataBuffer... buffers) { assign(offsets, strides, length(), buffers); }
@Override public void assign(Number value) { for (int i = 0; i < length(); i++) assign(value, i); }
@Override public double[] getDoublesAt(long offset, long inc, int length) { if (offset + length > length()) length -= offset; double[] ret = new double[length]; for (int i = 0; i < length; i++) { ret[i] = getDouble(i + offset); } return ret; }
@Override public void assign(Number value, long offset) { //note here that the final put will take care of the offset for (long i = offset; i < length(); i++) put(i, value.doubleValue()); }
@Override public String toString() { StringBuilder ret = new StringBuilder(); ret.append("["); int max; if (TO_STRING_MAX >= 0) { max = (int)Math.min(length(), TO_STRING_MAX); } else { max = (int)Math.min(length(), Integer.MAX_VALUE); } for (int i = 0; i < max; i++) { ret.append(getNumber(i)); if (i < max - 1) ret.append(","); } if(max < length()){ ret.append(",<") .append(length()-max) .append(" more elements>"); } ret.append("]"); return ret.toString(); }
@Override public boolean equals(Object o) { // FIXME: this is BAD. it takes too long to work, and it breaks general equals contract if (o instanceof DataBuffer) { DataBuffer d = (DataBuffer) o; if (d.length() != length()) return false; for (int i = 0; i < length(); i++) { double eps = Math.abs(getDouble(i) - d.getDouble(i)); if (eps > 1e-12) return false; } } return true; }
@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 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)); } } }
protected void readContent(DataInputStream s, Type currentType, Type globalType) { try { if (currentType == Type.DOUBLE) { for (int i = 0; i < length(); i++) { putByGlobalType(i, s.readDouble(), globalType); for (int i = 0; i < length(); i++) { putByGlobalType(i, s.readFloat(), globalType); for (int i = 0; i < length(); i++) { putByGlobalType(i, toFloat(s.readShort()), globalType); for (int i = 0; i < length(); i++) { putByGlobalType(i, s.readLong(), globalType); for (int i = 0; i < length(); i++) { putByGlobalType(i, s.readInt(), globalType);
private void fillPointerWithZero() { Pointer.memset(this.pointer(), 0, getElementSize() * length()); }
public void pointerIndexerByGlobalType(Type currentType) { if (currentType == Type.LONG) { pointer = new LongPointer(length()); setIndexer(LongRawIndexer.create((LongPointer) pointer)); type = Type.LONG; } else if (currentType == Type.INT) { pointer = new IntPointer(length()); setIndexer(IntIndexer.create((IntPointer) pointer)); type = Type.INT; } else { if (DataTypeUtil.getDtypeFromContext() == Type.DOUBLE) { pointer = new DoublePointer(length()); indexer = DoubleIndexer.create((DoublePointer) pointer); } else if (DataTypeUtil.getDtypeFromContext() == Type.FLOAT) { pointer = new FloatPointer(length()); setIndexer(FloatIndexer.create((FloatPointer) pointer)); } else if (DataTypeUtil.getDtypeFromContext() == Type.LONG) { pointer = new LongPointer(length()); setIndexer(LongIndexer.create((LongPointer) pointer)); } } }
pointer = new DoublePointer(length()); indexer = DoubleIndexer.create((DoublePointer) pointer); if (initialize) fillPointerWithZero(); } else if (dataType() == Type.FLOAT) { pointer = new FloatPointer(length()); setIndexer(FloatIndexer.create((FloatPointer) pointer)); pointer = new IntPointer(length()); setIndexer(IntIndexer.create((IntPointer) pointer)); if (initialize) fillPointerWithZero(); } else if (dataType() == Type.LONG) { pointer = new LongPointer(length()); setIndexer(LongIndexer.create((LongPointer) pointer));
Pointer.memcpy(pointer, oldPointer, this.length() * getElementSize());