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

com.googlecode.javaewah32.EWAHIterator32 Maven / Gradle / Ivy

Go to download

The bit array data structure is implemented in Java as the BitSet class. Unfortunately, this fails to scale without compression. JavaEWAH is a word-aligned compressed variant of the Java bitset class. It uses a 64-bit run-length encoding (RLE) compression scheme. The goal of word-aligned compression is not to achieve the best compression, but rather to improve query processing time. Hence, we try to save CPU cycles, maybe at the expense of storage. However, the EWAH scheme we implemented is always more efficient storage-wise than an uncompressed bitmap (implemented in Java as the BitSet class). Unlike some alternatives, javaewah does not rely on a patented scheme.

There is a newer version: 1.2.3
Show newest version
package com.googlecode.javaewah32;


/*
 * Copyright 2009-2016, Daniel Lemire, Cliff Moon, David McIntosh, Robert Becho, Google Inc., Veronika Zenz, Owen Kaser, Gregory Ssi-Yan-Kai, Rory Graves
 * Licensed under the Apache License, Version 2.0.
 */

/**
 * The class EWAHIterator represents a special type of efficient iterator
 * iterating over (uncompressed) words of bits.
 *
 * @author Daniel Lemire
 * @since 0.5.0
 */
public final class EWAHIterator32 implements Cloneable {

    /**
     * Instantiates a new eWAH iterator.
     *
     * @param buffer      the buffer
     */
    public EWAHIterator32(final Buffer32 buffer) {
        this.rlw = new RunningLengthWord32(buffer, 0);
        this.size = buffer.sizeInWords();
        this.pointer = 0;
    }

    private EWAHIterator32(int pointer, RunningLengthWord32 rlw, int size){
    	this.pointer = pointer;
    	this.rlw = rlw;
    	this.size = size;    	
    }
    
    /**
     * Allow expert developers to instantiate an EWAHIterator.
     *
     * @param bitmap we want to iterate over
     * @return an iterator
     */
    public static EWAHIterator32 getEWAHIterator(
            EWAHCompressedBitmap32 bitmap) {
        return bitmap.getEWAHIterator();
    }

    /**
     * Access to the buffer
     *
     * @return the buffer
     */
    public Buffer32 buffer() {
        return this.rlw.buffer;
    }

    /**
     * Position of the literal words represented by this running length
     * word.
     *
     * @return the int
     */
    public int literalWords() {
        return this.pointer - this.rlw.getNumberOfLiteralWords();
    }

    /**
     * Checks for next.
     *
     * @return true, if successful
     */
    public boolean hasNext() {
        return this.pointer < this.size;
    }

    /**
     * Next running length word.
     *
     * @return the running length word
     */
    public RunningLengthWord32 next() {
        this.rlw.position = this.pointer;
        this.pointer += this.rlw.getNumberOfLiteralWords() + 1;
        return this.rlw;
    }

    @Override
    public EWAHIterator32 clone() throws CloneNotSupportedException {
        return new EWAHIterator32(pointer,rlw.clone(),size);
    }

    /**
     * The pointer represent the location of the current running length word
     * in the array of words (embedded in the rlw attribute).
     */
    private int pointer;

    /**
     * The current running length word.
     */
    final RunningLengthWord32 rlw;

    /**
     * The size in words.
     */
    private final int size;

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy