Class MappeableRunContainer

  • All Implemented Interfaces:
    java.io.Externalizable, java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<java.lang.Character>, WordStorage<MappeableContainer>

    public final class MappeableRunContainer
    extends MappeableContainer
    implements java.lang.Cloneable
    This container takes the form of runs of consecutive values (effectively, run-length encoding). Uses a CharBuffer to store data, unlike org.roaringbitmap.RunContainer. Otherwise similar. Adding and removing content from this container might make it wasteful so regular calls to "runOptimize" might be warranted.
    See Also:
    Serialized Form
    • Field Detail

      • valueslength

        protected java.nio.CharBuffer valueslength
      • nbrruns

        protected int nbrruns
    • Constructor Detail

      • MappeableRunContainer

        public MappeableRunContainer()
        Create a container with default capacity
      • MappeableRunContainer

        public MappeableRunContainer​(int capacity)
        Create an array container with specified capacity
        Parameters:
        capacity - The capacity of the container
      • MappeableRunContainer

        public MappeableRunContainer​(int firstOfRun,
                                     int lastOfRun)
        Create an run container with a run of ones from firstOfRun to lastOfRun.
        Parameters:
        firstOfRun - first index
        lastOfRun - last index (range is exclusive)
      • MappeableRunContainer

        public MappeableRunContainer​(RunContainer bc)
        Creates a new container from a non-mappeable one. This copies the data.
        Parameters:
        bc - the original container
      • MappeableRunContainer

        public MappeableRunContainer​(java.nio.CharBuffer array,
                                     int numRuns)
        Construct a new RunContainer backed by the provided CharBuffer. Note that if you modify the RunContainer a new CharBuffer may be produced.
        Parameters:
        array - CharBuffer where the data is stored
        numRuns - number of runs (each using 2 chars in the buffer)
    • Method Detail

      • getArraySizeInBytes

        protected static int getArraySizeInBytes​(int nbrruns)
      • serializedSizeInBytes

        protected static int serializedSizeInBytes​(int numberOfRuns)
      • add

        public MappeableContainer add​(int begin,
                                      int end)
        Description copied from class: MappeableContainer
        Return a new container with all chars in [begin,end) added using an unsigned interpretation.
        Specified by:
        add in class MappeableContainer
        Parameters:
        begin - start of range (inclusive)
        end - end of range (exclusive)
        Returns:
        the new container
      • contains

        public boolean contains​(char x)
        Description copied from class: MappeableContainer
        Checks whether the contain contains the provided value
        Specified by:
        contains in class MappeableContainer
        Parameters:
        x - value to check
        Returns:
        whether the value is in the container
      • contains

        public static boolean contains​(java.nio.ByteBuffer buf,
                                       int position,
                                       char x,
                                       int numRuns)
        Checks whether the run container contains x.
        Parameters:
        buf - underlying ByteBuffer
        position - starting position of the container in the ByteBuffer
        x - target 16-bit value
        numRuns - number of runs
        Returns:
        whether the run container contains x
      • equals

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • fillLeastSignificant16bits

        public void fillLeastSignificant16bits​(int[] x,
                                               int i,
                                               int mask)
        Description copied from class: MappeableContainer
        Fill the least significant 16 bits of the integer array, starting at index index, with the char values from this container. The caller is responsible to allocate enough room. The most significant 16 bits of each integer are given by the most significant bits of the provided mask.
        Specified by:
        fillLeastSignificant16bits in class MappeableContainer
        Parameters:
        x - provided array
        i - starting index
        mask - indicates most significant bits
      • flip

        public MappeableContainer flip​(char x)
        Description copied from class: MappeableContainer
        Add a char to the container if it is not present, otherwise remove it. May generate a new container.
        Specified by:
        flip in class MappeableContainer
        Parameters:
        x - char to be added
        Returns:
        the new container
      • getCardinality

        public int getCardinality()
        Description copied from class: MappeableContainer
        Computes the distinct number of char values in the container. Can be expected to run in constant time.
        Specified by:
        getCardinality in class MappeableContainer
        Returns:
        the cardinality
      • getLength

        public char getLength​(int index)
        Gets the length of the run at the index.
        Parameters:
        index - the index of the run.
        Returns:
        the length of the run at the index.
        Throws:
        java.lang.ArrayIndexOutOfBoundsException - if index is negative or larger than the index of the last run.
      • getSizeInBytes

        public int getSizeInBytes()
        Description copied from class: MappeableContainer
        Computes an estimate of the memory usage of this container. The estimate is not meant to be exact.
        Specified by:
        getSizeInBytes in class MappeableContainer
        Returns:
        estimated memory usage in bytes
      • getValue

        public char getValue​(int index)
        Gets the value of the first element of the run at the index.
        Parameters:
        index - the index of the run.
        Returns:
        the value of the first element of the run at the index.
        Throws:
        java.lang.ArrayIndexOutOfBoundsException - if index is negative or larger than the index of the last run.
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • iadd

        public MappeableContainer iadd​(int begin,
                                       int end)
        Description copied from class: MappeableContainer
        Add all chars in [begin,end) using an unsigned interpretation. May generate a new container.
        Specified by:
        iadd in class MappeableContainer
        Parameters:
        begin - start of range (inclusive)
        end - end of range (exclusive)
        Returns:
        the new container
      • iand

        public MappeableContainer iand​(MappeableArrayContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise AND of this container with another (intersection). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        iand in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • iand

        public MappeableContainer iand​(MappeableBitmapContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise AND of this container with another (intersection). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        iand in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • iand

        public MappeableContainer iand​(MappeableRunContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise AND of this container with another (intersection). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        iand in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • iandNot

        public MappeableContainer iandNot​(MappeableArrayContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise ANDNOT of this container with another (difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        iandNot in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • iandNot

        public MappeableContainer iandNot​(MappeableBitmapContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise ANDNOT of this container with another (difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        iandNot in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • iandNot

        public MappeableContainer iandNot​(MappeableRunContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise ANDNOT of this container with another (difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        iandNot in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • inot

        public MappeableContainer inot​(int rangeStart,
                                       int rangeEnd)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise NOT of this container (complement). Only those bits within the range are affected. The current container is generally modified. May generate a new container.
        Specified by:
        inot in class MappeableContainer
        Parameters:
        rangeStart - beginning of range (inclusive); 0 is beginning of this container.
        rangeEnd - ending of range (exclusive)
        Returns:
        (partially) completmented container
      • ior

        public MappeableContainer ior​(MappeableArrayContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise OR of this container with another (union). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        ior in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • ior

        public MappeableContainer ior​(MappeableBitmapContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise OR of this container with another (union). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        ior in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • ior

        public MappeableContainer ior​(MappeableRunContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise OR of this container with another (union). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        ior in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • iremove

        public MappeableContainer iremove​(int begin,
                                          int end)
        Description copied from class: MappeableContainer
        Remove chars in [begin,end) using an unsigned interpretation. May generate a new container.
        Specified by:
        iremove in class MappeableContainer
        Parameters:
        begin - start of range (inclusive)
        end - end of range (exclusive)
        Returns:
        the new container
      • isFull

        public boolean isFull()
        Description copied from class: MappeableContainer
        Checks whether the container is full or not.
        Specified by:
        isFull in class MappeableContainer
        Returns:
        true if the container is full.
      • iterator

        public java.util.Iterator<java.lang.Character> iterator()
        Specified by:
        iterator in interface java.lang.Iterable<java.lang.Character>
      • ixor

        public MappeableContainer ixor​(MappeableArrayContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise XOR of this container with another (symmetric difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        ixor in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • ixor

        public MappeableContainer ixor​(MappeableBitmapContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise XOR of this container with another (symmetric difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        ixor in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • ixor

        public MappeableContainer ixor​(MappeableRunContainer x)
        Description copied from class: MappeableContainer
        Computes the in-place bitwise XOR of this container with another (symmetric difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
        Specified by:
        ixor in class MappeableContainer
        Parameters:
        x - other container
        Returns:
        aggregated container
      • limit

        public MappeableContainer limit​(int maxcardinality)
        Description copied from class: MappeableContainer
        Create a new MappeableContainer containing at most maxcardinality integers.
        Specified by:
        limit in class MappeableContainer
        Parameters:
        maxcardinality - maximal cardinality
        Returns:
        a new bitmap with cardinality no more than maxcardinality
      • not

        public MappeableContainer not​(int rangeStart,
                                      int rangeEnd)
        Description copied from class: MappeableContainer
        Computes the bitwise NOT of this container (complement). Only those bits within the range are affected. The current container is left unaffected.
        Specified by:
        not in class MappeableContainer
        Parameters:
        rangeStart - beginning of range (inclusive); 0 is beginning of this container.
        rangeEnd - ending of range (exclusive)
        Returns:
        (partially) completmented container
      • numberOfRuns

        public int numberOfRuns()
      • rank

        public int rank​(char lowbits)
        Description copied from class: MappeableContainer
        Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).
        Specified by:
        rank in class MappeableContainer
        Parameters:
        lowbits - upper limit
        Returns:
        the rank
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException
        Specified by:
        readExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
      • remove

        public MappeableContainer remove​(int begin,
                                         int end)
        Description copied from class: MappeableContainer
        Return a new container with all chars in [begin,end) remove using an unsigned interpretation.
        Specified by:
        remove in class MappeableContainer
        Parameters:
        begin - start of range (inclusive)
        end - end of range (exclusive)
        Returns:
        the new container
      • select

        public char select​(int j)
        Description copied from class: MappeableContainer
        Return the jth value
        Specified by:
        select in class MappeableContainer
        Parameters:
        j - index of the value
        Returns:
        the value
      • toCharArray

        public char[] toCharArray()
        Create a copy of the content of this container as a char array. This creates a copy.
        Returns:
        copy of the content as a char array
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • writeArray

        protected void writeArray​(java.io.DataOutput out)
                           throws java.io.IOException
        Description copied from class: MappeableContainer
        Write just the underlying array.
        Specified by:
        writeArray in class MappeableContainer
        Parameters:
        out - output stream
        Throws:
        java.io.IOException - in case of failure
      • writeArray

        protected void writeArray​(java.nio.ByteBuffer buffer)
        Description copied from class: MappeableContainer
        Write just the underlying array.
        Specified by:
        writeArray in class MappeableContainer
        Parameters:
        buffer - the buffer to write to
      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Specified by:
        writeExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
      • forEach

        public void forEach​(char msb,
                            IntConsumer ic)
        Description copied from class: MappeableContainer
        Iterate through the values of this container and pass them along to the IntConsumer, using msb as the 16 most significant bits.
        Specified by:
        forEach in class MappeableContainer
        Parameters:
        msb - 16 most significant bits
        ic - consumer
      • first

        public int first()
        Description copied from class: MappeableContainer
        Get the first integer held in the container
        Specified by:
        first in class MappeableContainer
        Returns:
        the first integer in the container
      • last

        public int last()
        Description copied from class: MappeableContainer
        Get the last integer held in the container
        Specified by:
        last in class MappeableContainer
        Returns:
        the last integer in the container
      • nextValue

        public int nextValue​(char fromValue)
        Description copied from class: MappeableContainer
        Gets the first value greater than or equal to the lower bound, or -1 if no such value exists.
        Specified by:
        nextValue in class MappeableContainer
        Parameters:
        fromValue - the lower bound (inclusive)
        Returns:
        the next value
      • previousValue

        public int previousValue​(char fromValue)
        Description copied from class: MappeableContainer
        Gets the last value less than or equal to the upper bound, or -1 if no such value exists.
        Specified by:
        previousValue in class MappeableContainer
        Parameters:
        fromValue - the upper bound (inclusive)
        Returns:
        the previous value
      • nextAbsentValue

        public int nextAbsentValue​(char fromValue)
        Description copied from class: MappeableContainer
        Gets the first absent value greater than or equal to the lower bound.
        Specified by:
        nextAbsentValue in class MappeableContainer
        Parameters:
        fromValue - the lower bound (inclusive)
        Returns:
        the next absent value
      • previousAbsentValue

        public int previousAbsentValue​(char fromValue)
        Description copied from class: MappeableContainer
        Gets the last value less than or equal to the upper bound.
        Specified by:
        previousAbsentValue in class MappeableContainer
        Parameters:
        fromValue - the upper bound (inclusive)
        Returns:
        the previous absent value
      • intersects

        public boolean intersects​(int minimum,
                                  int supremum)
        Description copied from class: MappeableContainer
        Checks if the container intersects with a range
        Specified by:
        intersects in class MappeableContainer
        Parameters:
        minimum - the inclusive unsigned lower bound of the range
        supremum - the exclusive unsigned upper bound of the range
        Returns:
        true if the container intersects the range
      • contains

        public boolean contains​(int minimum,
                                int supremum)
        Description copied from class: MappeableContainer
        Checks whether the container contains the entire range
        Specified by:
        contains in class MappeableContainer
        Parameters:
        minimum - the inclusive lower bound of the range
        supremum - the exclusive upper bound of the range
        Returns:
        true if the container contains the range