org.roaringbitmap.IntIterator - java examples

Here are the examples of the java api org.roaringbitmap.IntIterator taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

71 Examples 7

19 View Complete Implementation : RBMBackedTimestampSet.java
Copyright Apache License 2.0
Author : gchq
@Override
public Instant getEarliest() {
    final Inreplacederator it = rbm.getInreplacederator();
    if (!it.hasNext()) {
        return null;
    }
    return getInstantFromInt(it.next());
}

19 View Complete Implementation : RoaringIteratorWrapper.java
Copyright Apache License 2.0
Author : RoaringBitmap
final clreplaced RoaringIteratorWrapper implements BitmapIterator {

    private final Inreplacederator iterator;

    RoaringIteratorWrapper(Inreplacederator iterator) {
        this.iterator = iterator;
    }

    @Override
    public boolean hasNext() {
        return iterator.hasNext();
    }

    @Override
    public int next() {
        return iterator.next();
    }
}

19 View Complete Implementation : NaiveScanCountTopK.java
Copyright Apache License 2.0
Author : lemire
@Override
public RoaringBitmap top(int k, int universe, RoaringBitmap... bsi) {
    if ((k < 0) || (k > universe))
        throw new IllegalArgumentException("bad k");
    if (bsi.length == 0)
        throw new IllegalArgumentException("no bitmap");
    int[] counters = new int[universe];
    for (RoaringBitmap rb : bsi) {
        Inreplacederator i = rb.getInreplacederator();
        while (i.hasNext()) counters[i.next()]++;
    }
    RoaringBitmap[] rb = new RoaringBitmap[bsi.length + 1];
    for (int l = 0; l < rb.length; ++l) rb[l] = new RoaringBitmap();
    for (int l = 0; l < counters.length; ++l) rb[counters[l]].add(l);
    RoaringBitmap answer = rb[rb.length - 1];
    int J = rb.length - 1;
    while (answer.getCardinality() < k) {
        J--;
        answer.or(rb[J]);
    }
    int n = answer.getCardinality() - k;
    if (n > 0) {
        Inreplacederator i = answer.getInreplacederator();
        RoaringBitmap turnoff = new RoaringBitmap();
        while (i.hasNext() && n > 0) {
            turnoff.add(i.next());
            --n;
        }
        answer.andNot(turnoff);
    }
    if (answer.getCardinality() != k)
        throw new RuntimeException("bug");
    return answer;
}

19 View Complete Implementation : MiruAuthzIndexTest.java
Copyright Apache License 2.0
Author : jivesoftware
@Test(dataProvider = "miruAuthzIndexDataProviderWithData")
public void storeAndGetAuthz(MiruAuthzIndex<RoaringBitmap, RoaringBitmap> miruAuthzIndex, MiruAuthzUtils miruAuthzUtils, Map<String, List<Integer>> bitsIn) throws Exception {
    StackBuffer stackBuffer = new StackBuffer();
    for (Map.Entry<String, List<Integer>> entry : bitsIn.entrySet()) {
        String authz = entry.getKey();
        MiruAuthzExpression miruAuthzExpression = new MiruAuthzExpression(ImmutableList.of(authz));
        RoaringBitmap bitsOut = miruAuthzIndex.getCompositeAuthz(miruAuthzExpression, stackBuffer);
        List<Integer> actual = Lists.newArrayList();
        Inreplacederator iter = bitsOut.getInreplacederator();
        while (iter.hasNext()) {
            actual.add(iter.next());
        }
        replacedertEquals(actual, entry.getValue());
    }
}

19 View Complete Implementation : BitmapIterationBenchmark.java
Copyright Apache License 2.0
Author : apache
private static int iter(ImmutableBitmap bitmap) {
    int consume = 0;
    for (Inreplacederator it = bitmap.iterator(); it.hasNext(); ) {
        consume ^= it.next();
    }
    return consume;
}

19 View Complete Implementation : RealtimeSegmentImpl.java
Copyright Apache License 2.0
Author : Hanmourang
public Iterator<Integer> getSortedDocIdIteratorOnColumn(final String columnToSortOn) {
    Inreplacederator[] iterators = null;
    switch(dataSchema.getFieldSpecFor(columnToSortOn).getDataType()) {
        case INT:
            iterators = getSortedBitmapInreplacederatorsForIntegerColumn(columnToSortOn);
            break;
        case LONG:
            iterators = getSortedBitmapInreplacederatorsForLongColumn(columnToSortOn);
            break;
        case FLOAT:
            iterators = getSortedBitmapInreplacederatorsForFloatColumn(columnToSortOn);
            break;
        case DOUBLE:
            iterators = getSortedBitmapInreplacederatorsForDoubleColumn(columnToSortOn);
            break;
        case STRING:
        case BOOLEAN:
            iterators = getSortedBitmapInreplacederatorsForStringColumn(columnToSortOn);
            break;
        default:
            iterators = null;
            break;
    }
    final Inreplacederator[] inreplacederators = iterators;
    return new Iterator<Integer>() {

        int arrayIndex = 0;

        @Override
        public boolean hasNext() {
            return inreplacederators[inreplacederators.length - 1].hasNext();
        }

        @Override
        public Integer next() {
            if (inreplacederators[arrayIndex].hasNext()) {
                return inreplacederators[arrayIndex].next();
            }
            arrayIndex += 1;
            return inreplacederators[arrayIndex].next();
        }

        @Override
        public void remove() {
            throw new UnsupportedOperationException("remove not supported");
        }
    };
}

19 View Complete Implementation : RangelessBitmapDocIdIterator.java
Copyright Apache License 2.0
Author : apache
public clreplaced RangelessBitmapDocIdIterator implements IndexBasedDocIdIterator {

    private Inreplacederator iterator;

    int currentDocId = -1;

    public RangelessBitmapDocIdIterator(Inreplacederator iterator) {
        this.iterator = iterator;
    }

    @Override
    public int currentDocId() {
        return currentDocId;
    }

    @Override
    public int next() {
        // Empty?
        if (currentDocId == Constants.EOF || !iterator.hasNext()) {
            currentDocId = Constants.EOF;
            return Constants.EOF;
        }
        currentDocId = iterator.next();
        return currentDocId;
    }

    @Override
    public int advance(int targetDocId) {
        if (targetDocId < currentDocId) {
            throw new IllegalArgumentException("Trying to move backwards to docId " + targetDocId + ", current position " + currentDocId);
        }
        if (currentDocId == targetDocId) {
            return currentDocId;
        } else {
            int curr = next();
            while (curr < targetDocId && curr != Constants.EOF) {
                curr = next();
            }
            return curr;
        }
    }
}

19 View Complete Implementation : BitmapDocIdIterator.java
Copyright Apache License 2.0
Author : apache
public final clreplaced BitmapDocIdIterator implements IndexBasedDocIdIterator {

    final private Inreplacederator iterator;

    private int endDocId = Integer.MAX_VALUE;

    private int startDocId;

    private int currentDocId = -1;

    public BitmapDocIdIterator(Inreplacederator iterator) {
        this.iterator = iterator;
    }

    @Override
    public int currentDocId() {
        return currentDocId;
    }

    public void setStartDocId(int startDocId) {
        this.startDocId = startDocId;
    }

    public void setEndDocId(int endDocId) {
        this.endDocId = endDocId;
    }

    @Override
    public int next() {
        // Empty?
        if (currentDocId == Constants.EOF || !iterator.hasNext()) {
            currentDocId = Constants.EOF;
            return Constants.EOF;
        }
        currentDocId = iterator.next();
        // Advance to startDocId if necessary
        while (currentDocId < startDocId && iterator.hasNext()) {
            currentDocId = iterator.next();
        }
        // Current docId outside of the valid range?
        if (currentDocId < startDocId || endDocId < currentDocId) {
            currentDocId = Constants.EOF;
        }
        return currentDocId;
    }

    @Override
    public int advance(int targetDocId) {
        if (targetDocId < currentDocId) {
            throw new IllegalArgumentException("Trying to move backwards to docId " + targetDocId + ", current position " + currentDocId);
        }
        if (currentDocId == targetDocId) {
            return currentDocId;
        } else {
            int curr = next();
            while (curr < targetDocId && curr != Constants.EOF) {
                curr = next();
            }
            return curr;
        }
    }

    public String toString() {
        return BitmapDocIdIterator.clreplaced.getSimpleName();
    }
}

19 View Complete Implementation : TestIntIteratorFlyweight.java
Copyright Apache License 2.0
Author : RoaringBitmap
private static List<Integer> asList(Inreplacederator ints) {
    int[] values = new int[10];
    int size = 0;
    while (ints.hasNext()) {
        if (!(size < values.length)) {
            values = Arrays.copyOf(values, values.length * 2);
        }
        values[size++] = ints.next();
    }
    return Ints.asList(Arrays.copyOf(values, size));
}

19 View Complete Implementation : BufferBitSetUtil.java
Copyright Apache License 2.0
Author : RoaringBitmap
/**
 * Compares a RoaringBitmap and a BitSet. They are equal if and only if they contain the same set
 * of integers.
 *
 * @param bitset first object to be compared
 * @param bitmap second object to be compared
 * @return whether they are equal
 */
public static boolean equals(final BitSet bitset, final ImmutableRoaringBitmap bitmap) {
    if (bitset.cardinality() != bitmap.getCardinality()) {
        return false;
    }
    final Inreplacederator it = bitmap.getInreplacederator();
    while (it.hasNext()) {
        int val = it.next();
        if (!bitset.get(val)) {
            return false;
        }
    }
    return true;
}

19 View Complete Implementation : RBMBackedTimestampSet.java
Copyright Apache License 2.0
Author : gchq
@Override
public Instant getLatest() {
    final Inreplacederator it = rbm.getReverseInreplacederator();
    if (!it.hasNext()) {
        return null;
    }
    return getInstantFromInt(it.next());
}

19 View Complete Implementation : BatchIteratorAdapter.java
Copyright Apache License 2.0
Author : apache
public final clreplaced BatchIteratorAdapter implements BatchIterator {

    private final Inreplacederator iterator;

    public BatchIteratorAdapter(Inreplacederator iterator) {
        this.iterator = Preconditions.checkNotNull(iterator, "iterator");
    }

    @Override
    public int nextBatch(int[] buffer) {
        int i;
        for (i = 0; i < buffer.length && iterator.hasNext(); i++) {
            buffer[i] = iterator.next();
        }
        return i;
    }

    @Override
    public boolean hasNext() {
        return iterator.hasNext();
    }

    @Override
    public BatchIterator clone() {
        // It's okay to make a "new BatchIteratorAdapter" instead of calling super.clone(), since this clreplaced is final.
        return new BatchIteratorAdapter(iterator.clone());
    }
}

19 View Complete Implementation : BitmapOffset.java
Copyright Apache License 2.0
Author : apache
private static Inreplacederator safeClone(Inreplacederator iterator) {
    // Calling clone() on empty iterators from RoaringBitmap library sometimes fails with NPE,
    // see https://github.com/apache/druid/issues/4709, https://github.com/RoaringBitmap/RoaringBitmap/issues/177
    return iterator.hasNext() ? iterator.clone() : EmptyInreplacederator.instance();
}

18 View Complete Implementation : RoaringBitmapFactoryTest.java
Copyright Apache License 2.0
Author : apache
// used by issue 26
private void checkEmptyComplement(BitmapFactory bitmapFactory) {
    int numRow = 5104234;
    ImmutableBitmap bitmap = bitmapFactory.complement(bitmapFactory.makeEmptyImmutableBitmap(), numRow);
    ImmutableBitmap notBitmap = bitmapFactory.complement(bitmap, numRow);
    replacedert.replacedertTrue(notBitmap.size() == 0);
    replacedert.replacedertTrue(notBitmap.isEmpty());
    Inreplacederator inreplaceder = notBitmap.iterator();
    replacedert.replacedertFalse(inreplaceder.hasNext());
}

18 View Complete Implementation : WrappedBitSetBitmapBitSetTest.java
Copyright Apache License 2.0
Author : apache
@Test
public void tesreplacederator() {
    WrappedBitSetBitmap bitSet = new WrappedBitSetBitmap();
    for (int i : IntSetTestUtility.getSetBits()) {
        bitSet.add(i);
    }
    Inreplacederator inreplaced = bitSet.iterator();
    for (int i : IntSetTestUtility.getSetBits()) {
        replacedert.replacedertTrue(inreplaced.hasNext());
        replacedert.replacedertEquals(i, inreplaced.next());
    }
}

18 View Complete Implementation : MiruBitmapsRoaringBuffer.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public int lastSetBit(ImmutableRoaringBitmap bitmap) {
    Inreplacederator iterator = bitmap.getReverseInreplacederator();
    return iterator.hasNext() ? iterator.next() : -1;
}

18 View Complete Implementation : MiruBitmapsRoaringBuffer.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public MiruInreplacederator inreplacederator(ImmutableRoaringBitmap bitmap) {
    final Inreplacederator inreplacederator = bitmap.getInreplacederator();
    return new MiruInreplacederator() {

        @Override
        public boolean hasNext() {
            return inreplacederator.hasNext();
        }

        @Override
        public int next() {
            return inreplacederator.next();
        }
    };
}

18 View Complete Implementation : MiruBitmapsRoaringBuffer.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public MiruInreplacederator descendingInreplacederator(ImmutableRoaringBitmap bitmap) {
    final Inreplacederator inreplacederator = bitmap.getReverseInreplacederator();
    return new MiruInreplacederator() {

        @Override
        public boolean hasNext() {
            return inreplacederator.hasNext();
        }

        @Override
        public int next() {
            return inreplacederator.next();
        }
    };
}

18 View Complete Implementation : MiruBitmapsRoaringBuffer.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public int firstSetBit(ImmutableRoaringBitmap bitmap) {
    Inreplacederator iterator = bitmap.getInreplacederator();
    return iterator.hasNext() ? iterator.next() : -1;
}

18 View Complete Implementation : MiruBitmapsRoaring.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public MiruInreplacederator inreplacederator(RoaringBitmap bitmap) {
    final Inreplacederator inreplacederator = bitmap.getInreplacederator();
    return new MiruInreplacederator() {

        @Override
        public boolean hasNext() {
            return inreplacederator.hasNext();
        }

        @Override
        public int next() {
            return inreplacederator.next();
        }
    };
}

18 View Complete Implementation : MiruBitmapsRoaring.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public int firstSetBit(RoaringBitmap bitmap) {
    Inreplacederator iterator = bitmap.getInreplacederator();
    return iterator.hasNext() ? iterator.next() : -1;
}

18 View Complete Implementation : RinfretONeilTopK.java
Copyright Apache License 2.0
Author : lemire
@Override
public RoaringBitmap top(final int k, int universe, RoaringBitmap... b) {
    if ((k < 0) || (k > universe))
        throw new IllegalArgumentException("bad k");
    BSTMAdder adder = new BSTMAdder();
    RoaringBitmap[] bsi = adder.add(b);
    RoaringBitmap G = new RoaringBitmap();
    RoaringBitmap E = null;
    for (int i = bsi.length - 1; i >= 0; i--) {
        RoaringBitmap X;
        if (E == null) {
            X = bsi[i];
        } else {
            X = RoaringBitmap.or(G, RoaringBitmap.and(E, bsi[i]));
        }
        int n = X.getCardinality();
        if (n > k)
            if (E == null)
                E = bsi[i].clone();
            else
                E.and(bsi[i]);
        else if (n < k) {
            G = X;
            if (E == null)
                E = RoaringBitmap.flip(bsi[i], 0, universe);
            else
                E.andNot(bsi[i]);
        } else {
            if (E == null)
                E = bsi[i];
            else
                E.and(bsi[i]);
            break;
        }
    }
    G.or(E);
    int n = G.getCardinality() - k;
    if (n > 0) {
        // TODO: make faster
        Inreplacederator i = G.getInreplacederator();
        RoaringBitmap turnoff = new RoaringBitmap();
        while (i.hasNext() && n > 0) {
            turnoff.add(i.next());
            --n;
        }
        G.andNot(turnoff);
    }
    if (G.getCardinality() != k)
        throw new RuntimeException("bug");
    return G;
}

18 View Complete Implementation : SSUMTopK.java
Copyright Apache License 2.0
Author : lemire
@Override
public RoaringBitmap top(int k, int universe, RoaringBitmap... b) {
    if ((k < 0) || (k > universe))
        throw new IllegalArgumentException("bad k");
    SSUMAdder adder = new SSUMAdder();
    RoaringBitmap[] bsi = adder.add(b);
    RoaringBitmap G = new RoaringBitmap();
    RoaringBitmap E = null;
    for (int i = bsi.length - 1; i >= 0; i--) {
        RoaringBitmap X;
        if (E == null) {
            X = bsi[i];
        } else {
            X = RoaringBitmap.or(G, RoaringBitmap.and(E, bsi[i]));
        }
        int n = X.getCardinality();
        if (n > k)
            if (E == null)
                E = bsi[i].clone();
            else
                E.and(bsi[i]);
        else if (n < k) {
            G = X;
            if (E == null)
                E = RoaringBitmap.flip(bsi[i], 0, universe);
            else
                E.andNot(bsi[i]);
        } else {
            if (E == null)
                E = bsi[i];
            else
                E.and(bsi[i]);
            break;
        }
    }
    G.or(E);
    int n = G.getCardinality() - k;
    if (n > 0) {
        // TODO: make faster
        Inreplacederator i = G.getInreplacederator();
        RoaringBitmap turnoff = new RoaringBitmap();
        while (i.hasNext() && n > 0) {
            turnoff.add(i.next());
            --n;
        }
        G.andNot(turnoff);
    }
    if (G.getCardinality() != k)
        throw new RuntimeException("bug");
    return G;
}

18 View Complete Implementation : RoaringBitmapFactoryTest.java
Copyright Apache License 2.0
Author : metamx
// used by issue 26
private void checkEmptyComplement(BitmapFactory bitmapFactory) throws Exception {
    int numRow = 5104234;
    ImmutableBitmap bitmap = bitmapFactory.complement(bitmapFactory.makeEmptyImmutableBitmap(), numRow);
    ImmutableBitmap notBitmap = bitmapFactory.complement(bitmap, numRow);
    replacedert.replacedertTrue(notBitmap.size() == 0);
    replacedert.replacedertTrue(notBitmap.isEmpty());
    Inreplacederator inreplaceder = notBitmap.iterator();
    replacedert.replacedertFalse(inreplaceder.hasNext());
}

18 View Complete Implementation : HugeMask.java
Copyright Apache License 2.0
Author : richardstartin
@Override
public IntStream stream() {
    Inreplacederator it = bitmap.getInreplacederator();
    return IntStream.range(0, bitmap.getCardinality()).map(i -> it.next());
}

18 View Complete Implementation : ImmutableRoaringBitmapBatchIteratorTest.java
Copyright Apache License 2.0
Author : RoaringBitmap
@Test
public void testBatchIteratorAsInreplacederator() {
    Inreplacederator it = bitmap.getBatchIterator().asInreplacederator(new int[128]);
    RoaringBitmapWriter<MutableRoaringBitmap> w = bufferWriter().constantMemory().initialCapacity(bitmap.highLowContainer.size()).get();
    while (it.hasNext()) {
        w.add(it.next());
    }
    MutableRoaringBitmap copy = w.get();
    replacedertEquals(bitmap, copy);
}

18 View Complete Implementation : BitmapOffset.java
Copyright Apache License 2.0
Author : apache
static Inreplacederator getReverseBitmapOffsereplacederator(ImmutableBitmap bitmapIndex) {
    ImmutableBitmap roaringBitmap = bitmapIndex;
    if (!(bitmapIndex instanceof WrappedImmutableRoaringBitmap)) {
        final MutableBitmap bitmap = ROARING_BITMAP_FACTORY.makeEmptyMutableBitmap();
        final Inreplacederator iterator = bitmapIndex.iterator();
        while (iterator.hasNext()) {
            bitmap.add(iterator.next());
        }
        roaringBitmap = ROARING_BITMAP_FACTORY.makeImmutableBitmap(bitmap);
    }
    return ((WrappedImmutableRoaringBitmap) roaringBitmap).getBitmap().getReverseInreplacederator();
}

18 View Complete Implementation : TestRange.java
Copyright Apache License 2.0
Author : RoaringBitmap
@Test
public void flip64() {
    MutableRoaringBitmap rb = new MutableRoaringBitmap();
    rb.add(0);
    rb.flip(1L, 2L);
    Inreplacederator i = rb.getInreplacederator();
    replacedertTrue(i.next() == 0);
    replacedertTrue(i.next() == 1);
    replacedertFalse(i.hasNext());
}

18 View Complete Implementation : BitmapOffset.java
Copyright Apache License 2.0
Author : apache
/**
 */
public clreplaced BitmapOffset extends Offset {

    private static final int INVALID_VALUE = -1;

    private static final BitmapFactory ROARING_BITMAP_FACTORY = new RoaringBitmapSerdeFactory(false).getBitmapFactory();

    /**
     * Currently the default stops are not consciously optimized for the goals described in {@link #factorizeFullness}.
     * They are chosen intuitively. There was no experimentation with different bitmapFullnessFactorizationStops.
     * Experimentation and performance feedback with a different set of stops is welcome.
     */
    private static final String DEFAULT_FULLNESS_FACTORIZATION_STOPS = "0.01,0.1,0.3,0.5,0.7,0.9,0.99";

    private static final double[] BITMAP_FULLNESS_FACTORIZATION_STOPS;

    private static final String[] FACTORIZED_FULLNESS;

    static {
        String stopString = System.getProperty("bitmapFullnessFactorizationStops", DEFAULT_FULLNESS_FACTORIZATION_STOPS);
        String[] stopsArray = stopString.split(",");
        if (stopsArray.length == 0) {
            throw new RE("Empty bitmapFullnessFactorizationStops: " + stopString);
        }
        if (new HashSet<>(Arrays.asList(stopsArray)).size() != stopsArray.length) {
            throw new RE("Non unique bitmapFullnessFactorizationStops: " + stopString);
        }
        BITMAP_FULLNESS_FACTORIZATION_STOPS = new double[stopsArray.length];
        for (int i = 0; i < stopsArray.length; i++) {
            String stop = stopsArray[i];
            BITMAP_FULLNESS_FACTORIZATION_STOPS[i] = Double.parseDouble(stop);
        }
        Arrays.sort(BITMAP_FULLNESS_FACTORIZATION_STOPS);
        double firstStop = BITMAP_FULLNESS_FACTORIZATION_STOPS[0];
        if (Double.isNaN(firstStop) || firstStop <= 0.0) {
            throw new RE("First bitmapFullnessFactorizationStop[%d] should be > 0", firstStop);
        }
        double lastStop = BITMAP_FULLNESS_FACTORIZATION_STOPS[stopsArray.length - 1];
        if (Double.isNaN(lastStop) || lastStop >= 1) {
            throw new RE("Last bitmapFullnessFactorizationStop[%d] should be < 1", lastStop);
        }
        String prevStop = "0";
        FACTORIZED_FULLNESS = new String[stopsArray.length + 1];
        for (int i = 0; i < stopsArray.length; i++) {
            String stop = String.valueOf(BITMAP_FULLNESS_FACTORIZATION_STOPS[i]);
            FACTORIZED_FULLNESS[i] = "(" + prevStop + ", " + stop + "]";
            prevStop = stop;
        }
        FACTORIZED_FULLNESS[stopsArray.length] = "(" + prevStop + ", 1)";
    }

    /**
     * Processing of queries with BitmapOffsets, whose Bitmaps has different factorized fullness (bucket), reported from
     * this method, uses different copies of the same code, so JIT compiler replacedyzes and compiles the code for different
     * factorized fullness separately. The goal is to capture frequency of abstraction usage in compressed bitmap
     * algorithms, i. e.
     *    - "Zero sequence" vs. "Literal" vs. "One sequence" in {@link org.apache.druid.extendedset.intset.ImmutableConciseSet}
     *    - {@link org.roaringbitmap.ArrayContainer} vs {@link org.roaringbitmap.BitmapContainer} in Roaring
     * and then https://shipilev.net/blog/2015/black-magic-method-dispatch/ comes into play. The secondary goal is to
     * capture HotSpot's thresholds, which it uses to compile conditional blocks differently inside bitmap impls. See
     * https://bugs.openjdk.java.net/browse/JDK-6743900. The default BlockLayoutMinDiamondPercentage=20, i. e. if
     * probability of taking some branch is less than 20%, it is moved out of the hot path (to save some icache?).
     *
     * On the other hand, we don't want to factor fullness into too small pieces, because
     *  - too little queries may fall into those small buckets, and they are not compiled with Hotspot's C2 compiler
     *  - if there are a lot of queries for each small factorized fullness and their copies of the code is compiled by
     *  C2, this pollutes code cache and takes time to perform too many compilations, while some of them likely produce
     *  identical code.
     *
     *  Ideally there should be as much buckets as possible as long as Hotspot's C2 output for each bucket is different.
     */
    private static String factorizeFullness(long bitmapCardinality, long numRows) {
        if (bitmapCardinality == 0) {
            return "0";
        } else if (bitmapCardinality == numRows) {
            return "1";
        } else {
            double fullness = bitmapCardinality / (double) numRows;
            int index = Arrays.binarySearch(BITMAP_FULLNESS_FACTORIZATION_STOPS, fullness);
            if (index < 0) {
                index = ~index;
            }
            return FACTORIZED_FULLNESS[index];
        }
    }

    private final String fullness;

    private Inreplacederator iterator;

    private final Inreplacederator iteratorForReset;

    private final int valueForReset;

    private int value;

    static Inreplacederator getReverseBitmapOffsereplacederator(ImmutableBitmap bitmapIndex) {
        ImmutableBitmap roaringBitmap = bitmapIndex;
        if (!(bitmapIndex instanceof WrappedImmutableRoaringBitmap)) {
            final MutableBitmap bitmap = ROARING_BITMAP_FACTORY.makeEmptyMutableBitmap();
            final Inreplacederator iterator = bitmapIndex.iterator();
            while (iterator.hasNext()) {
                bitmap.add(iterator.next());
            }
            roaringBitmap = ROARING_BITMAP_FACTORY.makeImmutableBitmap(bitmap);
        }
        return ((WrappedImmutableRoaringBitmap) roaringBitmap).getBitmap().getReverseInreplacederator();
    }

    public static BitmapOffset of(ImmutableBitmap bitmapIndex, boolean descending, long numRows) {
        return new BitmapOffset(bitmapIndex, descending, numRows);
    }

    private BitmapOffset(ImmutableBitmap bitmapIndex, boolean descending, long numRows) {
        this.fullness = factorizeFullness(bitmapIndex.size(), numRows);
        this.iterator = newIterator(bitmapIndex, descending);
        increment();
        // It's important to set iteratorForReset and valueForReset after calling increment(), because only after that the
        // iterator and the value are in proper initial state.
        this.iteratorForReset = safeClone(iterator);
        this.valueForReset = value;
    }

    private Inreplacederator newIterator(ImmutableBitmap bitmapIndex, boolean descending) {
        if (!descending) {
            return bitmapIndex.iterator();
        } else {
            return getReverseBitmapOffsereplacederator(bitmapIndex);
        }
    }

    /**
     * Constructor for {@link #clone()}.
     */
    private BitmapOffset(String fullness, Inreplacederator iterator, int value) {
        this.fullness = fullness;
        this.iterator = iterator;
        this.iteratorForReset = safeClone(iterator);
        this.valueForReset = value;
        this.value = value;
    }

    @Override
    public void increment() {
        if (iterator.hasNext()) {
            value = iterator.next();
        } else {
            value = INVALID_VALUE;
        }
    }

    @Override
    public boolean withinBounds() {
        return value > INVALID_VALUE;
    }

    @Override
    public void reset() {
        iterator = safeClone(iteratorForReset);
        value = valueForReset;
    }

    @Override
    public ReadableOffset getBaseReadableOffset() {
        return this;
    }

    @SuppressWarnings("MethodDoesntCallSuperMethod")
    @Override
    public Offset clone() {
        return new BitmapOffset(fullness, safeClone(iterator), value);
    }

    @Override
    public int getOffset() {
        return value;
    }

    @Override
    public void inspectRuntimeShape(RuntimeShapeInspector inspector) {
        inspector.visit("iterator", iterator);
        inspector.visit("fullness", fullness);
    }

    private static Inreplacederator safeClone(Inreplacederator iterator) {
        // Calling clone() on empty iterators from RoaringBitmap library sometimes fails with NPE,
        // see https://github.com/apache/druid/issues/4709, https://github.com/RoaringBitmap/RoaringBitmap/issues/177
        return iterator.hasNext() ? iterator.clone() : EmptyInreplacederator.instance();
    }
}

17 View Complete Implementation : MiruBitmapsRoaring.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public int lastSetBit(RoaringBitmap bitmap) {
    Inreplacederator iterator = bitmap.getReverseInreplacederator();
    return iterator.hasNext() ? iterator.next() : -1;
}

17 View Complete Implementation : TreeTopK.java
Copyright Apache License 2.0
Author : lemire
@Override
public RoaringBitmap top(int k, int universe, RoaringBitmap... b) {
    if ((k < 0) || (k > universe))
        throw new IllegalArgumentException("bad k");
    TreeAdder adder = new TreeAdder();
    RoaringBitmap[] bsi = adder.add(b);
    RoaringBitmap G = new RoaringBitmap();
    RoaringBitmap E = null;
    for (int i = bsi.length - 1; i >= 0; i--) {
        RoaringBitmap X;
        if (E == null) {
            X = bsi[i];
        } else {
            X = RoaringBitmap.or(G, RoaringBitmap.and(E, bsi[i]));
        }
        int n = X.getCardinality();
        if (n > k)
            if (E == null)
                E = bsi[i].clone();
            else
                E.and(bsi[i]);
        else if (n < k) {
            G = X;
            if (E == null)
                E = RoaringBitmap.flip(bsi[i], 0, universe);
            else
                E.andNot(bsi[i]);
        } else {
            if (E == null)
                E = bsi[i];
            else
                E.and(bsi[i]);
            break;
        }
    }
    G.or(E);
    int n = G.getCardinality() - k;
    if (n > 0) {
        // TODO: make faster
        Inreplacederator i = G.getInreplacederator();
        RoaringBitmap turnoff = new RoaringBitmap();
        while (i.hasNext() && n > 0) {
            turnoff.add(i.next());
            --n;
        }
        G.andNot(turnoff);
    }
    if (G.getCardinality() != k)
        throw new RuntimeException("bug");
    return G;
}

17 View Complete Implementation : NullHandlingBitmapGetVsIteratorBenchmark.java
Copyright Apache License 2.0
Author : apache
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public void iterator(final Blackhole blackhole) {
    Inreplacederator nullIterator = bitmap.iterator();
    int offsetMark = -1;
    int nullMark = -1;
    for (int i = pretendFilterOffsets.nextSetBit(0); i >= 0; i = pretendFilterOffsets.nextSetBit(i + 1)) {
        // this is totally useless, hopefully this doesn't get optimized out, try to mimic what the selector is doing
        if (i < offsetMark) {
            nullMark = -1;
            nullIterator = bitmap.iterator();
        }
        offsetMark = i;
        while (nullMark < i && nullIterator.hasNext()) {
            nullMark = nullIterator.next();
        }
        final boolean isNull = nullMark == offsetMark;
        if (isNull) {
            blackhole.consume(isNull);
        } else {
            blackhole.consume(offsetMark);
        }
    }
}

17 View Complete Implementation : MiruBitmapsRoaring.java
Copyright Apache License 2.0
Author : jivesoftware
@Override
public MiruInreplacederator descendingInreplacederator(RoaringBitmap bitmap) {
    final Inreplacederator inreplacederator = bitmap.getReverseInreplacederator();
    return new MiruInreplacederator() {

        @Override
        public boolean hasNext() {
            return inreplacederator.hasNext();
        }

        @Override
        public int next() {
            return inreplacederator.next();
        }
    };
}

16 View Complete Implementation : MutableSegmentImpl.java
Copyright Apache License 2.0
Author : apache
/**
 * Returns the docIds to use for iteration when the data is sorted by the given column.
 * <p>Called only by realtime record reader.
 *
 * @param column The column to use for sorting
 * @return The docIds to use for iteration
 */
public int[] getSortedDocIdIterationOrderWithSortedColumn(String column) {
    BaseMutableDictionary dictionary = _dictionaryMap.get(column);
    int numValues = dictionary.length();
    int[] dictIds = new int[numValues];
    for (int i = 0; i < numValues; i++) {
        dictIds[i] = i;
    }
    IntArrays.quickSort(dictIds, (dictId1, dictId2) -> dictionary.compare(dictId1, dictId2));
    RealtimeInvertedIndexReader invertedIndex = _invertedIndexMap.get(column);
    int[] docIds = new int[_numDocsIndexed];
    int docIdIndex = 0;
    for (int dictId : dictIds) {
        Inreplacederator inreplacederator = invertedIndex.getDocIds(dictId).getInreplacederator();
        while (inreplacederator.hasNext()) {
            docIds[docIdIndex++] = inreplacederator.next();
        }
    }
    // Sanity check
    Preconditions.checkState(_numDocsIndexed == docIdIndex, "The number of doreplacedents indexed: %s is not equal to the number of sorted doreplacedents: %s", _numDocsIndexed, docIdIndex);
    return docIds;
}

16 View Complete Implementation : SVScanDocIdIterator.java
Copyright Apache License 2.0
Author : apache
@Override
public MutableRoaringBitmap applyAnd(MutableRoaringBitmap answer) {
    MutableRoaringBitmap result = new MutableRoaringBitmap();
    if (_evaluator.isAlwaysFalse()) {
        return result;
    }
    Inreplacederator inreplacederator = answer.getInreplacederator();
    int docId = -1;
    while (inreplacederator.hasNext() && docId < _endDocId) {
        docId = inreplacederator.next();
        if (docId >= _startDocId) {
            _valueIterator.skipTo(docId);
            _numEntriesScanned++;
            if (_valueMatcher.doesCurrentEntryMatch(_valueIterator)) {
                result.add(docId);
            }
        }
    }
    return result;
}

16 View Complete Implementation : AndBlockDocIdSet.java
Copyright Apache License 2.0
Author : apache
public BlockDocIdIterator slowIterator() {
    List<BlockDocIdIterator> rawIterators = new ArrayList<>();
    boolean useBitmapBasedIntersection = false;
    for (BlockDocIdSet docIdSet : blockDocIdSets) {
        if (docIdSet instanceof BitmapDocIdSet) {
            useBitmapBasedIntersection = true;
        }
    }
    BlockDocIdIterator[] docIdIterators;
    if (useBitmapBasedIntersection) {
        List<ImmutableRoaringBitmap> allBitmaps = new ArrayList<ImmutableRoaringBitmap>();
        for (BlockDocIdSet docIdSet : blockDocIdSets) {
            if (docIdSet instanceof SortedDocIdSet) {
                MutableRoaringBitmap bitmap = new MutableRoaringBitmap();
                SortedDocIdSet sortedDocIdSet = (SortedDocIdSet) docIdSet;
                List<IntPair> pairs = sortedDocIdSet.getRaw();
                for (IntPair pair : pairs) {
                    // add takes [start, end) i.e inclusive
                    bitmap.add(pair.getLeft(), pair.getRight() + 1);
                // start, exclusive end.
                }
                allBitmaps.add(bitmap);
            } else if (docIdSet instanceof BitmapDocIdSet) {
                BitmapDocIdSet bitmapDocIdSet = (BitmapDocIdSet) docIdSet;
                ImmutableRoaringBitmap childBitmap = bitmapDocIdSet.getRaw();
                allBitmaps.add(childBitmap);
            } else {
                BlockDocIdIterator iterator = docIdSet.iterator();
                rawIterators.add(iterator);
            }
        }
        Inreplacederator inreplacederator;
        if (allBitmaps.size() > 1) {
            MutableRoaringBitmap answer = (MutableRoaringBitmap) allBitmaps.get(0).clone();
            for (int i = 1; i < allBitmaps.size(); i++) {
                answer.and(allBitmaps.get(i));
            }
            inreplacederator = answer.getInreplacederator();
        } else {
            inreplacederator = allBitmaps.get(0).getInreplacederator();
        }
        BitmapDocIdIterator singleBitmapBlockIdIterator = new BitmapDocIdIterator(inreplacederator);
        singleBitmapBlockIdIterator.setStartDocId(minDocId);
        singleBitmapBlockIdIterator.setEndDocId(maxDocId);
        rawIterators.add(0, singleBitmapBlockIdIterator);
        docIdIterators = new BlockDocIdIterator[rawIterators.size()];
        rawIterators.toArray(docIdIterators);
    } else {
        docIdIterators = new BlockDocIdIterator[blockDocIdSets.size()];
        for (int srcId = 0; srcId < blockDocIdSets.size(); srcId++) {
            docIdIterators[srcId] = blockDocIdSets.get(srcId).iterator();
        }
    }
    return new AndDocIdIterator(docIdIterators);
}

15 View Complete Implementation : MVScanDocIdIterator.java
Copyright Apache License 2.0
Author : apache
@Override
public MutableRoaringBitmap applyAnd(MutableRoaringBitmap answer) {
    MutableRoaringBitmap result = new MutableRoaringBitmap();
    if (evaluator.isAlwaysFalse()) {
        return result;
    }
    Inreplacederator inreplacederator = answer.getInreplacederator();
    int docId = -1, length;
    while (inreplacederator.hasNext() && docId < endDocId) {
        docId = inreplacederator.next();
        if (docId >= startDocId) {
            valueIterator.skipTo(docId);
            length = valueIterator.nextIntVal(intArray);
            if (evaluator.applyMV(intArray, length, _numEntriesScanned)) {
                result.add(docId);
            }
        }
    }
    return result;
}

15 View Complete Implementation : OrBlockDocIdSet.java
Copyright Apache License 2.0
Author : apache
@Override
public BlockDocIdIterator iterator() {
    boolean useBitmapOr = false;
    for (BlockDocIdSet docIdSet : _docIdSets) {
        if (docIdSet instanceof BitmapDocIdSet) {
            useBitmapOr = true;
            break;
        }
    }
    if (useBitmapOr) {
        List<BlockDocIdIterator> iterators = new ArrayList<>();
        MutableRoaringBitmap bitmap = new MutableRoaringBitmap();
        for (BlockDocIdSet docIdSet : _docIdSets) {
            if (docIdSet instanceof SortedDocIdSet) {
                List<Pairs.IntPair> pairs = docIdSet.getRaw();
                for (Pairs.IntPair pair : pairs) {
                    // Add takes [start, end) i.e inclusive start, exclusive end
                    bitmap.add(pair.getLeft(), pair.getRight() + 1);
                }
            } else if (docIdSet instanceof BitmapDocIdSet) {
                bitmap.or((ImmutableRoaringBitmap) docIdSet.getRaw());
            } else {
                iterators.add(docIdSet.iterator());
            }
        }
        Inreplacederator inreplacederator = bitmap.getInreplacederator();
        BitmapDocIdIterator bitmapDocIdIterator = new BitmapDocIdIterator(inreplacederator);
        bitmapDocIdIterator.setStartDocId(_minDocId);
        bitmapDocIdIterator.setEndDocId(_maxDocId);
        if (iterators.isEmpty()) {
            return bitmapDocIdIterator;
        } else {
            iterators.add(bitmapDocIdIterator);
        }
        return new OrDocIdIterator(iterators.toArray(new BlockDocIdIterator[iterators.size()]), _minDocId, _maxDocId);
    } else {
        int numDocIdSets = _docIdSets.size();
        BlockDocIdIterator[] iterators = new BlockDocIdIterator[numDocIdSets];
        for (int i = 0; i < numDocIdSets; i++) {
            iterators[i] = _docIdSets.get(i).iterator();
        }
        return new OrDocIdIterator(iterators, _minDocId, _maxDocId);
    }
}

14 View Complete Implementation : RealtimeSegmentImpl.java
Copyright Apache License 2.0
Author : Hanmourang
private Inreplacederator[] getSortedBitmapInreplacederatorsForStringColumn(final String columnToSortOn) {
    final RealtimeInvertedIndex index = invertedIndexMap.get(columnToSortOn);
    final MutableDictionaryReader dictionary = dictionaryMap.get(columnToSortOn);
    final Inreplacederator[] inreplacederators = new Inreplacederator[dictionary.length()];
    final List<String> rawValues = new ArrayList<String>();
    for (int i = 0; i < dictionary.length(); i++) {
        rawValues.add((String) dictionary.get(i));
    }
    long start = System.currentTimeMillis();
    Collections.sort(rawValues);
    LOGGER.info("dictionary len : {}, time to sort : {} ", dictionary.length(), (System.currentTimeMillis() - start));
    for (int i = 0; i < rawValues.size(); i++) {
        inreplacederators[i] = index.getDocIdSetFor(dictionary.indexOf(rawValues.get(i))).getInreplacederator();
    }
    return inreplacederators;
}

14 View Complete Implementation : RealtimeSegmentImpl.java
Copyright Apache License 2.0
Author : Hanmourang
private Inreplacederator[] getSortedBitmapInreplacederatorsForLongColumn(final String columnToSortOn) {
    final RealtimeInvertedIndex index = invertedIndexMap.get(columnToSortOn);
    final MutableDictionaryReader dictionary = dictionaryMap.get(columnToSortOn);
    final Inreplacederator[] inreplacederators = new Inreplacederator[dictionary.length()];
    final List<Long> rawValues = new ArrayList<Long>();
    for (int i = 0; i < dictionary.length(); i++) {
        rawValues.add((Long) dictionary.get(i));
    }
    long start = System.currentTimeMillis();
    Collections.sort(rawValues);
    LOGGER.info("dictionary len : {}, time to sort : {} ", dictionary.length(), (System.currentTimeMillis() - start));
    for (int i = 0; i < rawValues.size(); i++) {
        inreplacederators[i] = index.getDocIdSetFor(dictionary.indexOf(rawValues.get(i))).getInreplacederator();
    }
    return inreplacederators;
}

14 View Complete Implementation : RealtimeSegmentImpl.java
Copyright Apache License 2.0
Author : Hanmourang
private Inreplacederator[] getSortedBitmapInreplacederatorsForDoubleColumn(final String columnToSortOn) {
    final RealtimeInvertedIndex index = invertedIndexMap.get(columnToSortOn);
    final MutableDictionaryReader dictionary = dictionaryMap.get(columnToSortOn);
    final Inreplacederator[] inreplacederators = new Inreplacederator[dictionary.length()];
    final List<Double> rawValues = new ArrayList<Double>();
    for (int i = 0; i < dictionary.length(); i++) {
        rawValues.add((Double) dictionary.get(i));
    }
    long start = System.currentTimeMillis();
    Collections.sort(rawValues);
    LOGGER.info("dictionary len : {}, time to sort : {} ", dictionary.length(), (System.currentTimeMillis() - start));
    for (int i = 0; i < rawValues.size(); i++) {
        inreplacederators[i] = index.getDocIdSetFor(dictionary.indexOf(rawValues.get(i))).getInreplacederator();
    }
    return inreplacederators;
}

14 View Complete Implementation : RealtimeSegmentImpl.java
Copyright Apache License 2.0
Author : Hanmourang
private Inreplacederator[] getSortedBitmapInreplacederatorsForIntegerColumn(final String columnToSortOn) {
    final RealtimeInvertedIndex index = invertedIndexMap.get(columnToSortOn);
    final MutableDictionaryReader dictionary = dictionaryMap.get(columnToSortOn);
    final Inreplacederator[] inreplacederators = new Inreplacederator[dictionary.length()];
    int[] rawValuesArr = new int[dictionary.length()];
    for (int i = 0; i < dictionary.length(); i++) {
        rawValuesArr[i] = (Integer) dictionary.get(i);
    }
    Arrays.sort(rawValuesArr);
    long start = System.currentTimeMillis();
    LOGGER.info("dictionary len : {}, time to sort : {} ", dictionary.length(), (System.currentTimeMillis() - start));
    for (int i = 0; i < rawValuesArr.length; i++) {
        inreplacederators[i] = index.getDocIdSetFor(dictionary.indexOf(rawValuesArr[i])).getInreplacederator();
    }
    return inreplacederators;
}

14 View Complete Implementation : RealtimeSegmentImpl.java
Copyright Apache License 2.0
Author : Hanmourang
private Inreplacederator[] getSortedBitmapInreplacederatorsForFloatColumn(final String columnToSortOn) {
    final RealtimeInvertedIndex index = invertedIndexMap.get(columnToSortOn);
    final MutableDictionaryReader dictionary = dictionaryMap.get(columnToSortOn);
    final Inreplacederator[] inreplacederators = new Inreplacederator[dictionary.length()];
    final List<Float> rawValues = new ArrayList<Float>();
    for (int i = 0; i < dictionary.length(); i++) {
        rawValues.add((Float) dictionary.get(i));
    }
    long start = System.currentTimeMillis();
    Collections.sort(rawValues);
    LOGGER.info("dictionary len : {}, time to sort : {} ", dictionary.length(), (System.currentTimeMillis() - start));
    for (int i = 0; i < rawValues.size(); i++) {
        inreplacederators[i] = index.getDocIdSetFor(dictionary.indexOf(rawValues.get(i))).getInreplacederator();
    }
    return inreplacederators;
}

13 View Complete Implementation : BitmapInvertedIndexCreatorTest.java
Copyright Apache License 2.0
Author : apache
private void validate(File invertedIndex, Set<Integer>[] postingLists) throws IOException {
    try (BitmapInvertedIndexReader reader = new BitmapInvertedIndexReader(PinotDataBuffer.mapReadOnlyBigEndianFile(invertedIndex), CARDINALITY)) {
        for (int dictId = 0; dictId < CARDINALITY; dictId++) {
            ImmutableRoaringBitmap bitmap = reader.getDocIds(dictId);
            Set<Integer> expected = postingLists[dictId];
            replacedert.replacedertEquals(bitmap.getCardinality(), expected.size());
            Inreplacederator inreplacederator = bitmap.getInreplacederator();
            while (inreplacederator.hasNext()) {
                replacedert.replacedertTrue(expected.contains(inreplacederator.next()));
            }
        }
    }
}

13 View Complete Implementation : ResultDocuments.java
Copyright GNU General Public License v3.0
Author : jaeksoft
private static int[] reverseDoc(ReaderLocal reader, String fieldName, Collection<String> uniqueKeys) throws IOException {
    final TermDocsHigherConsumer higherConsumer = new TermDocsHigherConsumer();
    for (String uniqueKey : uniqueKeys) reader.termDocs(new Term(fieldName, uniqueKey), higherConsumer);
    higherConsumer.bitSet.flip(0L, higherConsumer.higher + 1);
    IntBufferedArrayInterface intBufferArray = IntBufferedArrayFactory.INSTANCE.newInstance(higherConsumer.bitSet.getCardinality());
    Inreplacederator iterator = higherConsumer.bitSet.getInreplacederator();
    while (iterator.hasNext()) {
        int docId = iterator.next();
        if (!reader.isDeletedNoLock(docId))
            intBufferArray.add(docId);
    }
    return intBufferArray.getFinalArray();
}

12 View Complete Implementation : ImmutableRTreeTest.java
Copyright Apache License 2.0
Author : metamx
@Test
public void testSearchNoSplit() {
    BitmapFactory bf = new ConciseBitmapFactory();
    RTree tree = new RTree(2, new LinearGutmanSplitStrategy(0, 50, bf), bf);
    tree.insert(new float[] { 0, 0 }, 1);
    tree.insert(new float[] { 10, 10 }, 10);
    tree.insert(new float[] { 1, 3 }, 2);
    tree.insert(new float[] { 27, 34 }, 20);
    tree.insert(new float[] { 106, 19 }, 30);
    tree.insert(new float[] { 4, 2 }, 3);
    tree.insert(new float[] { 5, 0 }, 4);
    tree.insert(new float[] { 4, 72 }, 40);
    tree.insert(new float[] { -4, -3 }, 5);
    tree.insert(new float[] { 119, -78 }, 50);
    replacedert.replacedertEquals(tree.getRoot().getChildren().size(), 10);
    ImmutableRTree searchTree = ImmutableRTree.newImmutableFromMutable(tree);
    Iterable<ImmutableBitmap> points = searchTree.search(new RadiusBound(new float[] { 0, 0 }, 5));
    ImmutableBitmap finalSet = bf.union(points);
    replacedert.replacedertTrue(finalSet.size() >= 5);
    Set<Integer> expected = Sets.newHashSet(1, 2, 3, 4, 5);
    Inreplacederator iter = finalSet.iterator();
    while (iter.hasNext()) {
        replacedert.replacedertTrue(expected.contains(iter.next()));
    }
}

12 View Complete Implementation : ImmutableRTreeTest.java
Copyright Apache License 2.0
Author : metamx
@Test
public void testSearchWithSplit3Roaring() {
    BitmapFactory bf = new RoaringBitmapFactory();
    RTree tree = new RTree(2, new LinearGutmanSplitStrategy(0, 50, bf), bf);
    tree.insert(new float[] { 0.0f, 0.0f }, 0);
    tree.insert(new float[] { 1.0f, 3.0f }, 1);
    tree.insert(new float[] { 4.0f, 2.0f }, 2);
    tree.insert(new float[] { 7.0f, 3.0f }, 3);
    tree.insert(new float[] { 8.0f, 6.0f }, 4);
    Random rand = new Random();
    for (int i = 5; i < 5000; i++) {
        tree.insert(new float[] { (float) (rand.nextFloat() * 10 + 10.0), (float) (rand.nextFloat() * 10 + 10.0) }, i);
    }
    ImmutableRTree searchTree = ImmutableRTree.newImmutableFromMutable(tree);
    Iterable<ImmutableBitmap> points = searchTree.search(new RadiusBound(new float[] { 0.0f, 0.0f }, 5));
    ImmutableBitmap finalSet = bf.union(points);
    replacedert.replacedertTrue(finalSet.size() >= 3);
    Set<Integer> expected = Sets.newHashSet(0, 1, 2);
    Inreplacederator iter = finalSet.iterator();
    while (iter.hasNext()) {
        replacedert.replacedertTrue(expected.contains(iter.next()));
    }
}

12 View Complete Implementation : ImmutableRTreeTest.java
Copyright Apache License 2.0
Author : metamx
@Test
public void testSearchWithSplitLimitedBoundRoaring() {
    BitmapFactory bf = new RoaringBitmapFactory();
    RTree tree = new RTree(2, new LinearGutmanSplitStrategy(0, 50, bf), bf);
    tree.insert(new float[] { 0, 0 }, 1);
    tree.insert(new float[] { 1, 3 }, 2);
    tree.insert(new float[] { 4, 2 }, 3);
    tree.insert(new float[] { 5, 0 }, 4);
    tree.insert(new float[] { -4, -3 }, 5);
    Random rand = new Random();
    for (int i = 0; i < 4995; i++) {
        tree.insert(new float[] { (float) (rand.nextDouble() * 10 + 10.0), (float) (rand.nextDouble() * 10 + 10.0) }, i);
    }
    ImmutableRTree searchTree = ImmutableRTree.newImmutableFromMutable(tree);
    Iterable<ImmutableBitmap> points = searchTree.search(new RadiusBound(new float[] { 0, 0 }, 5, 2));
    ImmutableBitmap finalSet = bf.union(points);
    replacedert.replacedertTrue(finalSet.size() >= 5);
    Set<Integer> expected = Sets.newHashSet(1, 2, 3, 4, 5);
    Inreplacederator iter = finalSet.iterator();
    while (iter.hasNext()) {
        replacedert.replacedertTrue(expected.contains(iter.next()));
    }
}

12 View Complete Implementation : ImmutableRTreeTest.java
Copyright Apache License 2.0
Author : metamx
@Test
public void testSearchWithSplitLimitedBound() {
    BitmapFactory bf = new ConciseBitmapFactory();
    RTree tree = new RTree(2, new LinearGutmanSplitStrategy(0, 50, bf), bf);
    tree.insert(new float[] { 0, 0 }, 1);
    tree.insert(new float[] { 1, 3 }, 2);
    tree.insert(new float[] { 4, 2 }, 3);
    tree.insert(new float[] { 5, 0 }, 4);
    tree.insert(new float[] { -4, -3 }, 5);
    Random rand = new Random();
    for (int i = 0; i < 4995; i++) {
        tree.insert(new float[] { (float) (rand.nextDouble() * 10 + 10.0), (float) (rand.nextDouble() * 10 + 10.0) }, i);
    }
    ImmutableRTree searchTree = ImmutableRTree.newImmutableFromMutable(tree);
    Iterable<ImmutableBitmap> points = searchTree.search(new RadiusBound(new float[] { 0, 0 }, 5, 2));
    ImmutableBitmap finalSet = bf.union(points);
    replacedert.replacedertTrue(finalSet.size() >= 5);
    Set<Integer> expected = Sets.newHashSet(1, 2, 3, 4, 5);
    Inreplacederator iter = finalSet.iterator();
    while (iter.hasNext()) {
        replacedert.replacedertTrue(expected.contains(iter.next()));
    }
}

12 View Complete Implementation : ImmutableRTreeTest.java
Copyright Apache License 2.0
Author : metamx
@Test
public void testToAndFromByteBuffer() {
    BitmapFactory bf = new ConciseBitmapFactory();
    RTree tree = new RTree(2, new LinearGutmanSplitStrategy(0, 50, bf), bf);
    tree.insert(new float[] { 0, 0 }, 1);
    tree.insert(new float[] { 1, 1 }, 2);
    tree.insert(new float[] { 2, 2 }, 3);
    tree.insert(new float[] { 3, 3 }, 4);
    tree.insert(new float[] { 4, 4 }, 5);
    ImmutableRTree firstTree = ImmutableRTree.newImmutableFromMutable(tree);
    ByteBuffer buffer = ByteBuffer.wrap(firstTree.toBytes());
    ImmutableRTree secondTree = new ImmutableRTree(buffer, bf);
    Iterable<ImmutableBitmap> points = secondTree.search(new RadiusBound(new float[] { 0, 0 }, 10));
    ImmutableBitmap finalSet = bf.union(points);
    replacedert.replacedertTrue(finalSet.size() >= 5);
    Set<Integer> expected = Sets.newHashSet(1, 2, 3, 4, 5);
    Inreplacederator iter = finalSet.iterator();
    while (iter.hasNext()) {
        replacedert.replacedertTrue(expected.contains(iter.next()));
    }
}