@Override public Iterator<ValueVector> iterator() { return Collections.<ValueVector>unmodifiableCollection(vectors.values()).iterator(); }
@Override public void reAlloc() { for (final ValueVector v : vectors.values()) { v.reAlloc(); } }
/** * Get primitive child vectors. * @return a list of scalar child vectors recursing the entire vector hierarchy. */ public List<ValueVector> getPrimitiveVectors() { final List<ValueVector> primitiveVectors = new ArrayList<>(); for (final ValueVector v : vectors.values()) { if (v instanceof AbstractStructVector) { AbstractStructVector structVector = (AbstractStructVector) v; primitiveVectors.addAll(structVector.getPrimitiveVectors()); } else { primitiveVectors.add(v); } } return primitiveVectors; }
@Override public int getBufferSize() { int actualBufSize = 0; for (final ValueVector v : vectors.values()) { for (final ArrowBuf buf : v.getBuffers(false)) { actualBufSize += buf.writerIndex(); } } return actualBufSize; } }
@Override public ArrowBuf[] getBuffers(boolean clear) { final List<ArrowBuf> buffers = new ArrayList<>(); for (final ValueVector vector : vectors.values()) { for (final ArrowBuf buf : vector.getBuffers(false)) { buffers.add(buf); if (clear) { buf.retain(1); } } if (clear) { vector.clear(); } } return buffers.toArray(new ArrowBuf[buffers.size()]); }
@Override public void close() { for (final ValueVector valueVector : vectors.values()) { valueVector.close(); } vectors.clear(); super.close(); }
@Override public boolean allocateNewSafe() { /* boolean to keep track if all the memory allocation were successful * Used in the case of composite vectors when we need to allocate multiple * buffers for multiple vectors. If one of the allocations failed we need to * clear all the memory that we allocated */ boolean success = false; try { for (final ValueVector v : vectors.values()) { if (!v.allocateNewSafe()) { return false; } } success = true; } finally { if (!success) { clear(); } } return true; }