Class ContainerUtil

java.lang.Object
com.illumon.iris.db.v2.utils.rsp.container.ContainerUtil

public final class ContainerUtil
extends Object
Various useful methods for roaring bitmaps.
  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static interface  ContainerUtil.TargetComparator  
  • Method Summary

    Modifier and Type Method Description
    static int advanceUntil​(short[] array, int pos, int length, short min)
    Find the smallest integer larger than pos such that array[pos]>= min.
    static int cardinalityInBitmapRange​(long[] bitmap, int start, int end)
    Hamming weight of the bitset in the range start, start+1,..., end-1
    static int cardinalityInBitmapWordRange​(long[] bitmap, int start, int end)
    Deprecated.
    static int compareUnsigned​(short a, short b)
    Compares the two specified short values, treating them as unsigned values between 0 and 2^16 - 1 inclusive.
    static void fillArrayAND​(short[] container, long[] bitmap1, long[] bitmap2)
    Compute the bitwise AND between two long arrays and write the set bits in the container.
    static void fillArrayANDNOT​(short[] container, long[] bitmap1, long[] bitmap2)
    Compute the bitwise ANDNOT between two long arrays and write the set bits in the container.
    static void fillArrayXOR​(short[] container, long[] bitmap1, long[] bitmap2)
    Compute the bitwise XOR between two long arrays and write the set bits in the container.
    static void flipBitmapRange​(long[] bitmap, int start, int end)
    flip bits at start, start+1,..., end-1
    static int flipBitmapRangeAndCardinalityChange​(long[] bitmap, int start, int end)
    Deprecated.
    static int iterateUntil​(short[] array, int pos, int length, int min)
    Find the smallest integer larger than pos such that array[pos]>= min.
    protected static short lowbits​(int x)  
    protected static short lowbits​(long x)  
    static void partialRadixSort​(int[] data)
    Sorts the data by the 16 bit prefix.
    static int rangeSearch​(int begin, int end, ContainerUtil.TargetComparator comp)
    Look for the biggest value of i that satisfies begin <= i < end and comp.directionFrom(i) >= 0.
    static void resetBitmapRange​(long[] bitmap, int start, int end)
    clear bits at start, start+1,..., end-1
    static int resetBitmapRangeAndCardinalityChange​(long[] bitmap, int start, int end)
    Deprecated.
    static int search​(short[] array, int begin, int end, ContainerUtil.TargetComparator comp)
    Search for the largest value in array such that comp.directionFrom(value) > 0, or any value such that comp.directionFrom(value) == 0, and return its index.
    static int select​(long w, int j)
    Given a word w, return the position of the jth true bit.
    static void setBitmapRange​(long[] bitmap, int start, int end)
    set bits at start, start+1,..., end-1
    static int setBitmapRangeAndCardinalityChange​(long[] bitmap, int start, int end)
    Deprecated.
    static int unsignedBinarySearch​(short[] array, int begin, int end, short k)
    Look for value k in array in the range [begin,end).
    static int unsignedBinarySearchNoSpecialCase​(short[] array, int begin, int end, short k)  
    static int unsignedDifference​(short[] set1, int length1, short[] set2, int length2, short[] buffer)
    Compute the difference between two sorted lists and write the result to the provided output array
    static int unsignedDifference​(ShortIterator set1, ShortIterator set2, short[] buffer)
    Compute the difference between two sorted lists and write the result to the provided output array
    static int unsignedExclusiveUnion2by2​(short[] set1, int length1, short[] set2, int length2, short[] buffer)
    Compute the exclusive union of two sorted lists and write the result to the provided output array
    static int unsignedIntersect2by2​(short[] set1, int length1, short[] set2, int length2, short[] buffer)
    Intersect two sorted lists and write the result to the provided output array
    static boolean unsignedIntersects​(short[] set1, int length1, short[] set2, int length2)
    Checks if two arrays intersect
    protected static int unsignedLocalIntersect2by2​(short[] set1, int length1, short[] set2, int length2, short[] buffer)  
    static int unsignedLocalIntersect2by2Cardinality​(short[] set1, int length1, short[] set2, int length2)
    Compute the cardinality of the intersection
    protected static int unsignedOneSidedGallopingIntersect2by2​(short[] smallSet, int smallLength, short[] largeSet, int largeLength, short[] buffer)  
    static int unsignedUnion2by2​(short[] set1, int offset1, int length1, short[] set2, int offset2, int length2, short[] buffer)
    Unite two sorted lists and write the result to the provided output array

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • advanceUntil

      public static int advanceUntil​(short[] array, int pos, int length, short min)
      Find the smallest integer larger than pos such that array[pos]>= min. If none can be found, return length. Based on code by O. Kaser.
      Parameters:
      array - array to search within
      pos - starting position of the search
      length - length of the array to search
      min - minimum value
      Returns:
      x greater than pos such that array[pos] is at least as large as min, pos is is equal to length if it is not possible.
    • iterateUntil

      public static int iterateUntil​(short[] array, int pos, int length, int min)
      Find the smallest integer larger than pos such that array[pos]>= min. If none can be found, return length.
      Parameters:
      array - array to search within
      pos - starting position of the search
      length - length of the array to search
      min - minimum value
      Returns:
      x greater than pos such that array[pos] is at least as large as min, pos is is equal to length if it is not possible.
    • search

      public static int search​(short[] array, int begin, int end, ContainerUtil.TargetComparator comp)
      Search for the largest value in array such that comp.directionFrom(value) > 0, or any value such that comp.directionFrom(value) == 0, and return its index. If there is no such a value return -1.
      Parameters:
      array - Array with values sorted in increasing order.
      begin - Start position in the array for the search.
      end - One past the last position in the array for the search.
      comp - A comparator.
      Returns:
      -1 if comp.directionFrom(array[begin]) < 0, otherwise the biggest position pos in [begin, end - 1] such that comp.directionFrom(array[pos]) > 0 or, if there is a one or more positions pos for which comp.directionFrom(array[pos]) == 0, return any of them.
    • rangeSearch

      public static int rangeSearch​(int begin, int end, ContainerUtil.TargetComparator comp)
      Look for the biggest value of i that satisfies begin <= i < end and comp.directionFrom(i) >= 0.
      Parameters:
      begin - The beginning of the range (inclusive)
      end - The end of the range (exclusive)
      comp - a TargetComparator.
      Returns:
      the last position i inside the provided range that satisfies comp.directionFrom(i) >= 0, or -1 if none does.
    • compareUnsigned

      public static int compareUnsigned​(short a, short b)
      Compares the two specified short values, treating them as unsigned values between 0 and 2^16 - 1 inclusive.
      Parameters:
      a - the first unsigned short to compare
      b - the second unsigned short to compare
      Returns:
      a negative value if a is less than b; a positive value if a is greater than b; or zero if they are equal
    • fillArrayAND

      public static void fillArrayAND​(short[] container, long[] bitmap1, long[] bitmap2)
      Compute the bitwise AND between two long arrays and write the set bits in the container.
      Parameters:
      container - where we write
      bitmap1 - first bitmap
      bitmap2 - second bitmap
    • fillArrayANDNOT

      public static void fillArrayANDNOT​(short[] container, long[] bitmap1, long[] bitmap2)
      Compute the bitwise ANDNOT between two long arrays and write the set bits in the container.
      Parameters:
      container - where we write
      bitmap1 - first bitmap
      bitmap2 - second bitmap
    • fillArrayXOR

      public static void fillArrayXOR​(short[] container, long[] bitmap1, long[] bitmap2)
      Compute the bitwise XOR between two long arrays and write the set bits in the container.
      Parameters:
      container - where we write
      bitmap1 - first bitmap
      bitmap2 - second bitmap
    • flipBitmapRange

      public static void flipBitmapRange​(long[] bitmap, int start, int end)
      flip bits at start, start+1,..., end-1
      Parameters:
      bitmap - array of words to be modified
      start - first index to be modified (inclusive)
      end - last index to be modified (exclusive)
    • cardinalityInBitmapWordRange

      @Deprecated public static int cardinalityInBitmapWordRange​(long[] bitmap, int start, int end)
      Deprecated.
      Hamming weight of the 64-bit words involved in the range start, start+1,..., end-1, that is, it will compute the cardinality of the bitset from index (floor(start/64) to floor((end-1)/64)) inclusively.
      Parameters:
      bitmap - array of words representing a bitset
      start - first index (inclusive)
      end - last index (exclusive)
      Returns:
      the hamming weight of the corresponding words
    • cardinalityInBitmapRange

      public static int cardinalityInBitmapRange​(long[] bitmap, int start, int end)
      Hamming weight of the bitset in the range start, start+1,..., end-1
      Parameters:
      bitmap - array of words representing a bitset
      start - first index (inclusive)
      end - last index (exclusive)
      Returns:
      the hamming weight of the corresponding range
    • lowbits

      protected static short lowbits​(int x)
    • lowbits

      protected static short lowbits​(long x)
    • resetBitmapRange

      public static void resetBitmapRange​(long[] bitmap, int start, int end)
      clear bits at start, start+1,..., end-1
      Parameters:
      bitmap - array of words to be modified
      start - first index to be modified (inclusive)
      end - last index to be modified (exclusive)
    • select

      public static int select​(long w, int j)
      Given a word w, return the position of the jth true bit.
      Parameters:
      w - word
      j - index
      Returns:
      position of jth true bit in w
    • setBitmapRange

      public static void setBitmapRange​(long[] bitmap, int start, int end)
      set bits at start, start+1,..., end-1
      Parameters:
      bitmap - array of words to be modified
      start - first index to be modified (inclusive)
      end - last index to be modified (exclusive)
    • setBitmapRangeAndCardinalityChange

      @Deprecated public static int setBitmapRangeAndCardinalityChange​(long[] bitmap, int start, int end)
      Deprecated.
      set bits at start, start+1,..., end-1 and report the cardinality change
      Parameters:
      bitmap - array of words to be modified
      start - first index to be modified (inclusive)
      end - last index to be modified (exclusive)
      Returns:
      cardinality change
    • flipBitmapRangeAndCardinalityChange

      @Deprecated public static int flipBitmapRangeAndCardinalityChange​(long[] bitmap, int start, int end)
      Deprecated.
      flip bits at start, start+1,..., end-1 and report the cardinality change
      Parameters:
      bitmap - array of words to be modified
      start - first index to be modified (inclusive)
      end - last index to be modified (exclusive)
      Returns:
      cardinality change
    • resetBitmapRangeAndCardinalityChange

      @Deprecated public static int resetBitmapRangeAndCardinalityChange​(long[] bitmap, int start, int end)
      Deprecated.
      reset bits at start, start+1,..., end-1 and report the cardinality change
      Parameters:
      bitmap - array of words to be modified
      start - first index to be modified (inclusive)
      end - last index to be modified (exclusive)
      Returns:
      cardinality change
    • unsignedBinarySearch

      public static int unsignedBinarySearch​(short[] array, int begin, int end, short k)
      Look for value k in array in the range [begin,end). If the value is found, return its index. If not, return -(i+1) where i is the index where the value would be inserted. The array is assumed to contain sorted values where shorts are interpreted as unsigned integers.
      Parameters:
      array - array where we search
      begin - first index (inclusive)
      end - last index (exclusive)
      k - value we search for
      Returns:
      count
    • unsignedBinarySearchNoSpecialCase

      public static int unsignedBinarySearchNoSpecialCase​(short[] array, int begin, int end, short k)
    • unsignedDifference

      public static int unsignedDifference​(short[] set1, int length1, short[] set2, int length2, short[] buffer)
      Compute the difference between two sorted lists and write the result to the provided output array
      Parameters:
      set1 - first array
      length1 - length of first array
      set2 - second array
      length2 - length of second array
      buffer - output array
      Returns:
      cardinality of the difference
    • unsignedDifference

      public static int unsignedDifference​(ShortIterator set1, ShortIterator set2, short[] buffer)
      Compute the difference between two sorted lists and write the result to the provided output array
      Parameters:
      set1 - first array
      set2 - second array
      buffer - output array
      Returns:
      cardinality of the difference
    • unsignedExclusiveUnion2by2

      public static int unsignedExclusiveUnion2by2​(short[] set1, int length1, short[] set2, int length2, short[] buffer)
      Compute the exclusive union of two sorted lists and write the result to the provided output array
      Parameters:
      set1 - first array
      length1 - length of first array
      set2 - second array
      length2 - length of second array
      buffer - output array
      Returns:
      cardinality of the exclusive union
    • unsignedIntersect2by2

      public static int unsignedIntersect2by2​(short[] set1, int length1, short[] set2, int length2, short[] buffer)
      Intersect two sorted lists and write the result to the provided output array
      Parameters:
      set1 - first array
      length1 - length of first array
      set2 - second array
      length2 - length of second array
      buffer - output array
      Returns:
      cardinality of the intersection
    • unsignedIntersects

      public static boolean unsignedIntersects​(short[] set1, int length1, short[] set2, int length2)
      Checks if two arrays intersect
      Parameters:
      set1 - first array
      length1 - length of first array
      set2 - second array
      length2 - length of second array
      Returns:
      true if they intersect
    • unsignedLocalIntersect2by2

      protected static int unsignedLocalIntersect2by2​(short[] set1, int length1, short[] set2, int length2, short[] buffer)
    • unsignedLocalIntersect2by2Cardinality

      public static int unsignedLocalIntersect2by2Cardinality​(short[] set1, int length1, short[] set2, int length2)
      Compute the cardinality of the intersection
      Parameters:
      set1 - first set
      length1 - how many values to consider in the first set
      set2 - second set
      length2 - how many values to consider in the second set
      Returns:
      cardinality of the intersection
    • unsignedOneSidedGallopingIntersect2by2

      protected static int unsignedOneSidedGallopingIntersect2by2​(short[] smallSet, int smallLength, short[] largeSet, int largeLength, short[] buffer)
    • unsignedUnion2by2

      public static int unsignedUnion2by2​(short[] set1, int offset1, int length1, short[] set2, int offset2, int length2, short[] buffer)
      Unite two sorted lists and write the result to the provided output array
      Parameters:
      set1 - first array
      offset1 - offset of first array
      length1 - length of first array
      set2 - second array
      offset2 - offset of second array
      length2 - length of second array
      buffer - output array
      Returns:
      cardinality of the union
    • partialRadixSort

      public static void partialRadixSort​(int[] data)
      Sorts the data by the 16 bit prefix.
      Parameters:
      data - - the data