Class MappeableContainer

java.lang.Object
org.roaringbitmap.buffer.MappeableContainer
All Implemented Interfaces:
Externalizable, Serializable, Cloneable, Iterable<Character>, WordStorage<MappeableContainer>
Direct Known Subclasses:
MappeableArrayContainer, MappeableBitmapContainer, MappeableRunContainer

public abstract class MappeableContainer extends Object implements Iterable<Character>, Cloneable, Externalizable, WordStorage<MappeableContainer>
Base container class. This class is similar to org.roaringbitmap.Container but meant to be used with memory mapping.
See Also:
  • Field Details

    • ContainerNames

      public static String[] ContainerNames
      Name of the various possible containers
  • Constructor Details

    • MappeableContainer

      public MappeableContainer()
  • Method Details

    • rangeOfOnes

      public static MappeableContainer rangeOfOnes(int start, int last)
      Create a container initialized with a range of consecutive values
      Parameters:
      start - first index
      last - last index (range is exclusive)
      Returns:
      a new container initialized with the specified values
    • add

      public abstract MappeableContainer add(int begin, int end)
      Return a new container with all chars in [begin,end) added using an unsigned interpretation.
      Parameters:
      begin - start of range (inclusive)
      end - end of range (exclusive)
      Returns:
      the new container
    • add

      public abstract MappeableContainer add(char x)
      Add a char to the container. May generate a new container.
      Specified by:
      add in interface WordStorage<MappeableContainer>
      Parameters:
      x - char to be added
      Returns:
      the new container
    • isEmpty

      public abstract boolean isEmpty()
      Checks whether the container is empty or not.
      Specified by:
      isEmpty in interface WordStorage<MappeableContainer>
      Returns:
      true if the container is empty.
    • isFull

      public abstract boolean isFull()
      Checks whether the container is full or not.
      Returns:
      true if the container is full.
    • orInto

      public abstract void orInto(long[] bits)
      Computes the union of this container with the bits present in the array, modifying the array.
      Parameters:
      bits - a 1024 element array to be interpreted as a bit set
    • andInto

      public abstract void andInto(long[] bits)
      Computes the intersection of this container with the bits present in the array, modifying the array.
      Parameters:
      bits - a 1024 element array to be interpreted as a bit set
    • removeFrom

      public abstract void removeFrom(long[] bits)
      Computes the intersection of the negation of this container with the bits present in the array, modifying the array.
      Parameters:
      bits - a 1024 element array to be interpreted as a bit set
    • and

      Computes the bitwise AND of this container with another (intersection). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • and

      Computes the bitwise AND of this container with another (intersection). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • and

    • andCardinality

      protected abstract int andCardinality(MappeableArrayContainer x)
    • andCardinality

      protected abstract int andCardinality(MappeableBitmapContainer x)
    • andCardinality

      protected abstract int andCardinality(MappeableRunContainer x)
    • xorCardinality

      public int xorCardinality(MappeableContainer other)
      Returns the cardinality of the XOR between the passed container and this container without materialising a temporary container.
      Parameters:
      other - other container
      Returns:
      the cardinality of the symmetric difference of the two containers
    • andCardinality

      public int andCardinality(MappeableContainer x)
      Computes the bitwise AND of this container with another (intersection). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • and

      public abstract MappeableContainer and(MappeableRunContainer x)
      Computes the bitwise AND of this container with another (intersection). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • andNot

      public abstract MappeableContainer andNot(MappeableArrayContainer x)
      Computes the bitwise ANDNOT of this container with another (difference). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • andNot

      public abstract MappeableContainer andNot(MappeableBitmapContainer x)
      Computes the bitwise ANDNOT of this container with another (difference). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • andNot

      protected MappeableContainer andNot(MappeableContainer x)
    • andNot

      public abstract MappeableContainer andNot(MappeableRunContainer x)
      Computes the bitwise ANDNOT of this container with another (difference). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • orNot

      public MappeableContainer orNot(MappeableContainer x, int endOfRange)
      Computes the bitwise ORNOT of this container with another. This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      endOfRange - end of range (size of the universe)
      Returns:
      aggregated container
    • iorNot

      public MappeableContainer iorNot(MappeableContainer x, int endOfRange)
      Computes the in-place bitwise ORNOT of this container with another. The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
      Parameters:
      x - other container
      endOfRange - the exclusive end
      Returns:
      aggregated container
    • clear

      public abstract void clear()
      Empties the container
    • clone

      public abstract MappeableContainer clone()
      Overrides:
      clone in class Object
    • contains

      public abstract boolean contains(char x)
      Checks whether the contain contains the provided value
      Parameters:
      x - value to check
      Returns:
      whether the value is in the container
    • contains

      public boolean contains(MappeableContainer subset)
      Checks whether the container is a subset of this container or not
      Parameters:
      subset - the container to be tested
      Returns:
      true if the parameter is a subset of this container
    • contains

      protected abstract boolean contains(MappeableRunContainer runContainer)
    • contains

      protected abstract boolean contains(MappeableArrayContainer arrayContainer)
    • contains

      protected abstract boolean contains(MappeableBitmapContainer bitmapContainer)
    • intersects

      public abstract boolean intersects(int minimum, int supremum)
      Checks if the container intersects with a range
      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 abstract boolean contains(int minimum, int supremum)
      Checks whether the container contains the entire range
      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
    • fillLeastSignificant16bits

      public abstract void fillLeastSignificant16bits(int[] x, int i, int mask)
      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.
      Parameters:
      x - provided array
      i - starting index
      mask - indicates most significant bits
    • flip

      public abstract MappeableContainer flip(char x)
      Add a char to the container if it is not present, otherwise remove it. May generate a new container.
      Parameters:
      x - char to be added
      Returns:
      the new container
    • getArraySizeInBytes

      protected abstract int getArraySizeInBytes()
      Size of the underlying array
      Returns:
      size in bytes
    • getCardinality

      public abstract int getCardinality()
      Computes the distinct number of char values in the container. Can be expected to run in constant time.
      Returns:
      the cardinality
    • getContainerName

      public String getContainerName()
      Get the name of this container.
      Returns:
      name of the container
    • getReverseCharIterator

      public abstract CharIterator getReverseCharIterator()
      Iterator to visit the char values in the container in descending order.
      Returns:
      iterator
    • getCharIterator

      public abstract PeekableCharIterator getCharIterator()
      Iterator to visit the char values in the container in ascending order.
      Returns:
      iterator
    • getBatchIterator

      public abstract ContainerBatchIterator getBatchIterator()
      Gets an iterator to visit the contents of the container in batches
      Returns:
      iterator
    • forEach

      public abstract void forEach(char msb, IntConsumer ic)
      Iterate through the values of this container and pass them along to the IntConsumer, using msb as the 16 most significant bits.
      Parameters:
      msb - 16 most significant bits
      ic - consumer
    • getSizeInBytes

      public abstract int getSizeInBytes()
      Computes an estimate of the memory usage of this container. The estimate is not meant to be exact.
      Returns:
      estimated memory usage in bytes
    • iadd

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

      public abstract MappeableContainer iand(MappeableArrayContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • iand

      public abstract MappeableContainer iand(MappeableBitmapContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • iand

    • iand

      public abstract MappeableContainer iand(MappeableRunContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • iandNot

      public abstract MappeableContainer iandNot(MappeableArrayContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • iandNot

      public abstract MappeableContainer iandNot(MappeableBitmapContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • iandNot

      protected MappeableContainer iandNot(MappeableContainer x)
    • iandNot

      public abstract MappeableContainer iandNot(MappeableRunContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • inot

      public abstract MappeableContainer inot(int rangeStart, int rangeEnd)
      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.
      Parameters:
      rangeStart - beginning of range (inclusive); 0 is beginning of this container.
      rangeEnd - ending of range (exclusive)
      Returns:
      (partially) completmented container
    • intersects

      public abstract boolean intersects(MappeableArrayContainer x)
      Returns true if the current container intersects the other container.
      Parameters:
      x - other container
      Returns:
      whether they intersect
    • intersects

      public abstract boolean intersects(MappeableBitmapContainer x)
      Returns true if the current container intersects the other container.
      Parameters:
      x - other container
      Returns:
      whether they intersect
    • intersects

      public boolean intersects(MappeableContainer x)
      Returns true if the current container intersects the other container.
      Parameters:
      x - other container
      Returns:
      whether they intersect
    • intersects

      public abstract boolean intersects(MappeableRunContainer x)
      Returns true if the current container intersects the other container.
      Parameters:
      x - other container
      Returns:
      whether they intersect
    • ior

      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • ior

      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • ior

    • ior

      public abstract MappeableContainer ior(MappeableRunContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • iremove

      public abstract MappeableContainer iremove(int begin, int end)
      Remove chars in [begin,end) using an unsigned interpretation. May generate a new container.
      Parameters:
      begin - start of range (inclusive)
      end - end of range (exclusive)
      Returns:
      the new container
    • isArrayBacked

      protected abstract boolean isArrayBacked()
    • ixor

      public abstract MappeableContainer ixor(MappeableArrayContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • ixor

      public abstract MappeableContainer ixor(MappeableBitmapContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • ixor

    • ixor

      public abstract MappeableContainer ixor(MappeableRunContainer x)
      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.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • lazyIOR

      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. The resulting container may not track its cardinality correctly. The resulting container may not track its cardinality correctly. This can be fixed as follows: if(c.getCardinality()<0) ((MappeableBitmapContainer)c).computeCardinality();
      Parameters:
      x - other container
      Returns:
      aggregated container
    • lazyOR

      Computes the bitwise OR of this container with another (union). This container as well as the provided container are left unaffected. The resulting container may not track its cardinality correctly. This can be fixed as follows: if(c.getCardinality()<0) ((MappeableBitmapContainer)c).computeCardinality();
      Parameters:
      x - other container
      Returns:
      aggregated container
    • limit

      public abstract MappeableContainer limit(int maxcardinality)
      Create a new MappeableContainer containing at most maxcardinality integers.
      Parameters:
      maxcardinality - maximal cardinality
      Returns:
      a new bitmap with cardinality no more than maxcardinality
    • not

      public abstract MappeableContainer not(int rangeStart, int rangeEnd)
      Computes the bitwise NOT of this container (complement). Only those bits within the range are affected. The current container is left unaffected.
      Parameters:
      rangeStart - beginning of range (inclusive); 0 is beginning of this container.
      rangeEnd - ending of range (exclusive)
      Returns:
      (partially) completmented container
    • or

      Computes the bitwise OR of this container with another (union). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • or

      Computes the bitwise OR of this container with another (union). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • or

    • or

      public abstract MappeableContainer or(MappeableRunContainer x)
      Computes the bitwise OR of this container with another (union). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • rank

      public abstract int rank(char lowbits)
      Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).
      Parameters:
      lowbits - upper limit
      Returns:
      the rank
    • remove

      public abstract MappeableContainer remove(int begin, int end)
      Return a new container with all chars in [begin,end) remove using an unsigned interpretation.
      Parameters:
      begin - start of range (inclusive)
      end - end of range (exclusive)
      Returns:
      the new container
    • remove

      public abstract MappeableContainer remove(char x)
      Remove the char from this container. May create a new container.
      Parameters:
      x - to be removed
      Returns:
      New container
    • repairAfterLazy

      public abstract MappeableContainer repairAfterLazy()
      The output of a lazyOR or lazyIOR might be an invalid container, this should be called on it.
      Returns:
      a new valid container
    • runOptimize

      public abstract MappeableContainer runOptimize()
      Convert to MappeableRunContainers, when the result is smaller. Overridden by MappeableRunContainer to possibly switch from MappeableRunContainer to a smaller alternative.
      Specified by:
      runOptimize in interface WordStorage<MappeableContainer>
      Returns:
      the new container
    • select

      public abstract char select(int j)
      Return the jth value
      Parameters:
      j - index of the value
      Returns:
      the value
    • serializedSizeInBytes

      public abstract int serializedSizeInBytes()
      Report the number of bytes required to serialize this container.
      Returns:
      the size in bytes
    • toContainer

      public abstract Container toContainer()
      Convert to a non-mappeable container.
      Returns:
      the non-mappeable container
    • trim

      public abstract void trim()
      If possible, recover wasted memory.
    • writeArray

      protected abstract void writeArray(DataOutput out) throws IOException
      Write just the underlying array.
      Parameters:
      out - output stream
      Throws:
      IOException - in case of failure
    • writeArray

      protected abstract void writeArray(ByteBuffer buffer)
      Write just the underlying array.
      Parameters:
      buffer - the buffer to write to
    • xor

      Computes the bitwise XOR of this container with another (symmetric difference). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • xor

      Computes the bitwise XOR of this container with another (symmetric difference). This container as well as the provided container are left unaffected.
      Parameters:
      x - other container
      Returns:
      aggregated container
    • xor

    • xor

      public abstract MappeableContainer xor(MappeableRunContainer x)
      Computes the bitwise XOR of this container with another (symmetric difference). This container as well as the provided container are left unaffected.
      Parameters:
      x - other parameter
      Returns:
      aggregated container
    • toBitmapContainer

      public abstract MappeableBitmapContainer toBitmapContainer()
      Convert the current container to a BitmapContainer, if a conversion is needed. If the container is already a bitmap, the container is returned unchanged.
      Returns:
      a bitmap container
    • first

      public abstract int first()
      Get the first integer held in the container
      Returns:
      the first integer in the container
      Throws:
      NoSuchElementException - if empty
    • last

      public abstract int last()
      Get the last integer held in the container
      Returns:
      the last integer in the container
      Throws:
      NoSuchElementException - if empty
    • nextValue

      public abstract int nextValue(char fromValue)
      Gets the first value greater than or equal to the lower bound, or -1 if no such value exists.
      Parameters:
      fromValue - the lower bound (inclusive)
      Returns:
      the next value
    • previousValue

      public abstract int previousValue(char fromValue)
      Gets the last value less than or equal to the upper bound, or -1 if no such value exists.
      Parameters:
      fromValue - the upper bound (inclusive)
      Returns:
      the previous value
    • nextAbsentValue

      public abstract int nextAbsentValue(char fromValue)
      Gets the first absent value greater than or equal to the lower bound.
      Parameters:
      fromValue - the lower bound (inclusive)
      Returns:
      the next absent value
    • previousAbsentValue

      public abstract int previousAbsentValue(char fromValue)
      Gets the last value less than or equal to the upper bound.
      Parameters:
      fromValue - the upper bound (inclusive)
      Returns:
      the previous absent value
    • assertNonEmpty

      protected void assertNonEmpty(boolean condition)
      Throw if the container is empty
      Parameters:
      condition - a boolean expression
      Throws:
      NoSuchElementException - if empty