public VecDataBuffer(VecReader reader, int coordsPerElem, BufferFactory bufferFactory, int numRows, int elementsPerRow) { int bufferLength = Math.Max(1, elementsPerRow); BufferWrapper buffer = bufferFactory.newBuffer((1 + numRows) * coordsPerElem * bufferLength); this.reader = reader; this.buffer = new VecBufferSequence(new VecBuffer(coordsPerElem, buffer), 1 + numRows); // Insert an empty coordinate so that the coordinate N cooresponds to row id N. this.buffer.append(VecBuffer.emptyVecBuffer(coordsPerElem)); }
public void read(ByteBuffer byteBuffer, int length) { VecBuffer vecBuffer = this.reader.read(byteBuffer, length); if (vecBuffer != null) { this.buffer.append(vecBuffer); } else { this.buffer.append(VecBuffer.emptyVecBuffer(this.buffer.getCoordsPerVec())); } }
public static VPFBoundingBox fromVecBuffer(VecBuffer buffer) { if (buffer == null) { String message = Logging.getMessage("nullValue.BufferIsNull"); Logging.logger().severe(message); throw new ArgumentException(message); } if (buffer.getCoordsPerVec() < 2) { String message = Logging.getMessage("generic.BufferIncompatible", buffer); Logging.logger().severe(message); throw new ArgumentException(message); } double xmin = Double.MaxValue; double ymin = Double.MaxValue; double xmax = -Double.MaxValue; double ymax = -Double.MaxValue; int bufferSize = buffer.getSize(); double[] compArray = new double[2]; for (int i = 0; i < bufferSize; i++) { buffer.get(i, compArray); if (xmin > compArray[0]) { xmin = compArray[0]; } if (xmax < compArray[0]) { xmax = compArray[0]; } if (ymin > compArray[1]) { ymin = compArray[1]; } if (ymax < compArray[1]) { ymax = compArray[1]; } } return(new VPFBoundingBox(xmin, ymin, xmax, ymax)); }
public VecBuffer read(ByteBuffer byteBuffer, int length) { VecBuffer vecBuffer = null; int prevLimit = byteBuffer.limit(); int limit = byteBuffer.position() + (this.coordsPerElem * this.bytesPerCoord * length); try { byteBuffer.limit(limit); BufferWrapper newBuffer = this.doRead(byteBuffer); vecBuffer = new VecBuffer(this.coordsPerElem, newBuffer); } finally { byteBuffer.limit(prevLimit); byteBuffer.position(limit); } return(vecBuffer); }