All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.co.openkappa.roaringbitmap.buffer.RunBatchIterator Maven / Gradle / Ivy

There is a newer version: 0.1.7
Show newest version
package org.roaringbitmap.buffer;

import org.roaringbitmap.ContainerBatchIterator;

import static org.roaringbitmap.buffer.BufferUtil.toIntUnsigned;

public class RunBatchIterator implements ContainerBatchIterator {

  private final MappeableRunContainer runs;
  private int run = 0;
  private int cursor = 0;

  public RunBatchIterator(MappeableRunContainer runs) {
    this.runs = runs;
  }

  @Override
  public int next(int key, int[] buffer) {
    int consumed = 0;
    do {
      int runStart = toIntUnsigned(runs.getValue(run));
      int runLength = toIntUnsigned(runs.getLength(run));
      int chunkStart = runStart + cursor;
      int chunkEnd = chunkStart + Math.min(runLength - cursor, buffer.length - consumed - 1);
      int chunk = chunkEnd - chunkStart + 1;
      for (int i = 0; i < chunk; ++i) {
        buffer[consumed + i] = key + chunkStart + i;
      }
      consumed += chunk;
      if (runStart + runLength == chunkEnd) {
        ++run;
        cursor = 0;
      } else {
        cursor += chunk;
      }
    } while (consumed < buffer.length && run != runs.numberOfRuns());
    return consumed;
  }

  @Override
  public boolean hasNext() {
    return run < runs.numberOfRuns();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy