private static boolean isNullRow(IndexedInts row, int size) { for (int i = 0; i < size; i++) { if (row.get(i) != 0) { return false; } } return true; }
@Override public int get(int index) { if (index < 0 || index >= size) { throw new IAE("Index[%d] >= size[%d] or < 0", index, size); } return base.get(offset + index); }
protected int getSingleValue(IndexedInts indexedInts) { Preconditions.checkArgument(indexedInts.size() < 2, "should be single value"); return indexedInts.size() == 1 ? indexedInts.get(0) : GroupByColumnSelectorStrategy.GROUP_BY_MISSING_VALUE; }
default void forEach(IntConsumer action) { int size = size(); for (int i = 0; i < size; i++) { action.accept(get(i)); } }
@Override public void addValues(IndexedInts ints) throws IOException { if (numBytesForMaxWritten) { throw new IllegalStateException("written out already"); } for (int i = 0, size = ints.size(); i < size; i++) { int value = ints.get(i); Preconditions.checkState(value >= 0 && value <= maxId); writeInt.write(valuesOut, value); } headerOut.writeInt(Ints.checkedCast(valuesOut.size())); ++numWritten; }
@Override public void addValues(IndexedInts ints) throws IOException { if (lastOffsetWritten) { throw new IllegalStateException("written out already"); } offsetWriter.addValue(offset); int numValues = ints.size(); for (int i = 0; i < numValues; i++) { valueWriter.addValue(ints.get(i)); } offset += numValues; }
@Override public Object getOnlyValue(ColumnValueSelector selector) { final DimensionSelector dimSelector = (DimensionSelector) selector; final IndexedInts row = dimSelector.getRow(); Preconditions.checkState(row.size() < 2, "Not supported for multi-value dimensions"); return row.size() == 1 ? row.get(0) : GROUP_BY_MISSING_VALUE; }
@Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public void uncompressed(Blackhole blackhole) { for (int i = filter.nextSetBit(0); i >= 0; i = filter.nextSetBit(i + 1)) { blackhole.consume(uncompressed.get(i)); } }
@Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public void compressed(Blackhole blackhole) { for (int i = filter.nextSetBit(0); i >= 0; i = filter.nextSetBit(i + 1)) { blackhole.consume(compressed.get(i)); } } }
@Override public Supplier<Comparable> makeInputRawSupplier(DimensionSelector selector) { return () -> { IndexedInts index = selector.getRow(); return index.size() == 0 ? null : selector.lookupName(index.get(0)); }; } }
@Override public void aggregate() { IndexedInts row = selector.getRow(); for (int i = 0, rowSize = row.size(); i < rowSize; i++) { int index = row.get(i); mutableBitmap.add(index); } }
@Nullable @Override public Object getObject() { final int valueIndex = findValueIndicesIndexForSubColumn(); if (valueIndex < 0) { return null; } else { final DimensionSelector valueSelector = getValueSelector(); final IndexedInts valueIndices = valueSelector.getRow(); return valueSelector.lookupName(valueIndices.get(valueIndex)); } }
@Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public void uncompressed(Blackhole blackhole) { for (int i = filter.nextSetBit(0); i >= 0; i = filter.nextSetBit(i + 1)) { IndexedInts row = uncompressed.get(i); for (int j = 0, rowSize = row.size(); j < rowSize; j++) { blackhole.consume(row.get(j)); } } }
@Override public void aggregate(ByteBuffer buf, int position) { MutableBitmap mutableBitmap = getMutableBitmap(position); IndexedInts row = selector.getRow(); for (int i = 0, rowSize = row.size(); i < rowSize; i++) { int index = row.get(i); mutableBitmap.add(index); } buf.putLong(position, mutableBitmap.size()); }
@Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public void compressed(Blackhole blackhole) { for (int i = filter.nextSetBit(0); i >= 0; i = filter.nextSetBit(i + 1)) { IndexedInts row = compressed.get(i); for (int j = 0, rowSize = row.size(); j < rowSize; j++) { blackhole.consume(row.get(j)); } } } }
@Override public void setValueFrom(ColumnValueSelector<?> selector) { DimensionSelector dimensionSelector = (DimensionSelector) selector; keptSelector = dimensionSelector; IndexedInts row = dimensionSelector.getRow(); int rowSize = row.size(); keptRow.ensureSize(rowSize); for (int i = 0; i < rowSize; i++) { keptRow.setValue(i, row.get(i)); } keptRow.setSize(rowSize); }
@Test(expected = IllegalArgumentException.class) public void testGetInvalidElementInRow() { columnarMultiIntsSupplier.get().get(3).get(15); }
private void assertSame(List<int[]> someInts, ColumnarMultiInts columnarMultiInts) { Assert.assertEquals(someInts.size(), columnarMultiInts.size()); for (int i = 0; i < columnarMultiInts.size(); ++i) { final int[] ints = someInts.get(i); final IndexedInts vSizeIndexedInts = columnarMultiInts.get(i); Assert.assertEquals(ints.length, vSizeIndexedInts.size()); for (int j = 0; j < ints.length; j++) { Assert.assertEquals(ints[j], vSizeIndexedInts.get(j)); } } }
@Test public void testSanity() { Assert.assertEquals(array.length, indexed.size()); for (int i = 0; i < array.length; i++) { Assert.assertEquals(array[i], indexed.get(i)); } } }
@Test public void testGetRow() { IndexedInts row = NULL_SELECTOR.getRow(); Assert.assertEquals(1, row.size()); Assert.assertEquals(0, row.get(0)); }