@Override public int next(int records) { int count = Math.min(rows - idx, records); if (count == 0) { return 0; } int[] validities = new int[] {1, 1, 0, 0}; int[] values = new int[] {1, 0, 1, 0}; result.allocateNew(); ArrowBuf validityBuf = bitVector.getValidityBuffer(); ArrowBuf valueBuf = bitVector.getDataBuffer(); for (int i = 0; i < count; ++i) { BitVectorHelper.setValidityBit(validityBuf, i, validities[idx]); BitVectorHelper.setValidityBit(valueBuf, i, values[idx]); ++idx; } result.setAllCount(count); return count; }
@Test public void testConvertBitsToBytes() { try ( BufferAllocator allocator = new RootAllocator(Integer.MAX_VALUE); BitVector bits = new BitVector("$bits$", allocator); UInt1Vector bytes = new UInt1Vector("$bits$", allocator); ) { int count = 100; for (int i = 0; i < count ; i++) { bits.setSafe(i, i % 2); } bits.setValueCount(count); ArrowBuf oldBuf = bits.getDataBuffer(); oldBuf.retain(); SerializedField.Builder fieldBuilder = TypeHelper.getMetadataBuilder(bits); ArrowBuf newBuf = convertBitsToBytes(allocator, fieldBuilder, oldBuf); bytes.setValueCount(count); SerializedField.Builder newfieldBuilder = TypeHelper.getMetadataBuilder(bytes); TypeHelper.loadData(bytes, newfieldBuilder.build(), newBuf); for (int i = 0; i < count ; i++) { assertEquals(i % 2, bytes.get(i)); } newBuf.release(); } }