Package org.roaringbitmap
Class Util
- java.lang.Object
-
- org.roaringbitmap.Util
-
public final class Util extends java.lang.Object
Various useful methods for roaring bitmaps.
-
-
Field Summary
Fields Modifier and Type Field Description static boolean
USE_HYBRID_BINSEARCH
optimization flag: whether to use hybrid binary search: hybrid formats combine a binary search with a sequential search
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static Container[]
addOffset(Container source, char offsets)
Add value "offset" to all values in the container, producing two new containers.static int
advanceUntil(char[] array, int pos, int length, char min)
Find the smallest integer larger than pos such that array[pos]>= min.protected static int
branchyUnsignedBinarySearch(char[] array, int begin, int end, char k)
static int
cardinalityInBitmapRange(long[] bitmap, int start, int end)
Hamming weight of the bitset in the range start, start+1,..., end-1static int
cardinalityInBitmapWordRange(long[] bitmap, int start, int end)
Deprecated.static void
fillArrayAND(char[] container, long[] bitmap1, long[] bitmap2)
Compute the bitwise AND between two long arrays and write the set bits in the container.static void
fillArrayANDNOT(char[] container, long[] bitmap1, long[] bitmap2)
Compute the bitwise ANDNOT between two long arrays and write the set bits in the container.static void
fillArrayXOR(char[] 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-1static int
flipBitmapRangeAndCardinalityChange(long[] bitmap, int start, int end)
Deprecated.protected static char
highbits(int x)
protected static char
highbits(long x)
protected static int
hybridUnsignedBinarySearch(char[] array, int begin, int end, char k)
static int
intersectArrayIntoBitmap(long[] bitmap, char[] array, int length)
Intersects the bitmap with the array, returning the cardinality of the resultstatic int
iterateUntil(char[] array, int pos, int length, int min)
Find the smallest integer larger than pos such that array[pos]>= min.protected static char
lowbits(int x)
protected static char
lowbits(long x)
protected static int
lowbitsAsInteger(int x)
protected static int
lowbitsAsInteger(long x)
static int
maxLowBitAsInteger()
static void
partialRadixSort(int[] data)
Sorts the data by the 16 bit prefix using Radix sort.static void
resetBitmapRange(long[] bitmap, int start, int end)
clear bits at start, start+1,..., end-1static int
resetBitmapRangeAndCardinalityChange(long[] bitmap, int start, int end)
Deprecated.static int
reverseUntil(char[] array, int pos, int length, char max)
Find the largest integer smaller than pos such that array[pos]<= max.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-1static int
setBitmapRangeAndCardinalityChange(long[] bitmap, int start, int end)
Deprecated.static long
toUnsignedLong(int x)
Converts the argument to along
by an unsigned conversion.static int
unsignedBinarySearch(char[] array, int begin, int end, char k)
Look for value k in array in the range [begin,end).static int
unsignedDifference(char[] set1, int length1, char[] set2, int length2, char[] buffer)
Compute the difference between two sorted lists and write the result to the provided output arraystatic int
unsignedDifference(CharIterator set1, CharIterator set2, char[] buffer)
Compute the difference between two sorted lists and write the result to the provided output arraystatic int
unsignedExclusiveUnion2by2(char[] set1, int length1, char[] set2, int length2, char[] buffer)
Compute the exclusive union of two sorted lists and write the result to the provided output arraystatic int
unsignedIntersect2by2(char[] set1, int length1, char[] set2, int length2, char[] buffer)
Intersect two sorted lists and write the result to the provided output arraystatic boolean
unsignedIntersects(char[] set1, int length1, char[] set2, int length2)
Checks if two arrays intersectprotected static int
unsignedLocalIntersect2by2(char[] set1, int length1, char[] set2, int length2, char[] buffer)
static int
unsignedLocalIntersect2by2Cardinality(char[] set1, int length1, char[] set2, int length2)
Compute the cardinality of the intersectionprotected static int
unsignedOneSidedGallopingIntersect2by2(char[] smallSet, int smallLength, char[] largeSet, int largeLength, char[] buffer)
static int
unsignedUnion2by2(char[] set1, int offset1, int length1, char[] set2, int offset2, int length2, char[] buffer)
Unite two sorted lists and write the result to the provided output array
-
-
-
Field Detail
-
USE_HYBRID_BINSEARCH
public static final boolean USE_HYBRID_BINSEARCH
optimization flag: whether to use hybrid binary search: hybrid formats combine a binary search with a sequential search- See Also:
- Constant Field Values
-
-
Method Detail
-
addOffset
public static Container[] addOffset(Container source, char offsets)
Add value "offset" to all values in the container, producing two new containers. The existing container remains unchanged. The new container are not converted, so they need to be checked: e.g., we could produce two bitmap containers having low cardinality.- Parameters:
source
- source containeroffsets
- value to add to each value in the container- Returns:
- return an array made of two containers
-
advanceUntil
public static int advanceUntil(char[] array, int pos, int length, char 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 withinpos
- starting position of the searchlength
- length of the array to searchmin
- 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.
-
reverseUntil
public static int reverseUntil(char[] array, int pos, int length, char max)
Find the largest integer smaller than pos such that array[pos]<= max. If none can be found, return length. Based on code by O. Kaser.- Parameters:
array
- array to search withinpos
- starting position of the searchlength
- length of the array to searchmax
- maximum value- Returns:
- x less than pos such that array[pos] is at least as small as max, pos is is equal to 0 if it is not possible.
-
iterateUntil
public static int iterateUntil(char[] 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 withinpos
- starting position of the searchlength
- length of the array to searchmin
- 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.
-
branchyUnsignedBinarySearch
protected static int branchyUnsignedBinarySearch(char[] array, int begin, int end, char k)
-
fillArrayAND
public static void fillArrayAND(char[] 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 writebitmap1
- first bitmapbitmap2
- second bitmap
-
fillArrayANDNOT
public static void fillArrayANDNOT(char[] 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 writebitmap1
- first bitmapbitmap2
- second bitmap
-
fillArrayXOR
public static void fillArrayXOR(char[] 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 writebitmap1
- first bitmapbitmap2
- 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 modifiedstart
- 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 bitsetstart
- 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 bitsetstart
- first index (inclusive)end
- last index (exclusive)- Returns:
- the hamming weight of the corresponding range
-
highbits
protected static char highbits(int x)
-
highbits
protected static char highbits(long x)
-
hybridUnsignedBinarySearch
protected static int hybridUnsignedBinarySearch(char[] array, int begin, int end, char k)
-
lowbits
protected static char lowbits(int x)
-
lowbits
protected static char lowbits(long x)
-
lowbitsAsInteger
protected static int lowbitsAsInteger(int x)
-
lowbitsAsInteger
protected static int lowbitsAsInteger(long x)
-
maxLowBitAsInteger
public static int maxLowBitAsInteger()
-
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 modifiedstart
- first index to be modified (inclusive)end
- last index to be modified (exclusive)
-
intersectArrayIntoBitmap
public static int intersectArrayIntoBitmap(long[] bitmap, char[] array, int length)
Intersects the bitmap with the array, returning the cardinality of the result- Parameters:
bitmap
- the bitmap, modifiedarray
- the array, not modifiedlength
- how much of the array to consume- Returns:
- the size of the intersection, i.e. how many bits still set in the bitmap
-
select
public static int select(long w, int j)
Given a word w, return the position of the jth true bit.- Parameters:
w
- wordj
- 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 modifiedstart
- 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 modifiedstart
- 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 modifiedstart
- 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 modifiedstart
- first index to be modified (inclusive)end
- last index to be modified (exclusive)- Returns:
- cardinality change
-
unsignedBinarySearch
public static int unsignedBinarySearch(char[] array, int begin, int end, char 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 searchbegin
- first index (inclusive)end
- last index (exclusive)k
- value we search for- Returns:
- count
-
unsignedDifference
public static int unsignedDifference(char[] set1, int length1, char[] set2, int length2, char[] buffer)
Compute the difference between two sorted lists and write the result to the provided output array- Parameters:
set1
- first arraylength1
- length of first arrayset2
- second arraylength2
- length of second arraybuffer
- output array- Returns:
- cardinality of the difference
-
unsignedDifference
public static int unsignedDifference(CharIterator set1, CharIterator set2, char[] buffer)
Compute the difference between two sorted lists and write the result to the provided output array- Parameters:
set1
- first arrayset2
- second arraybuffer
- output array- Returns:
- cardinality of the difference
-
unsignedExclusiveUnion2by2
public static int unsignedExclusiveUnion2by2(char[] set1, int length1, char[] set2, int length2, char[] buffer)
Compute the exclusive union of two sorted lists and write the result to the provided output array- Parameters:
set1
- first arraylength1
- length of first arrayset2
- second arraylength2
- length of second arraybuffer
- output array- Returns:
- cardinality of the exclusive union
-
unsignedIntersect2by2
public static int unsignedIntersect2by2(char[] set1, int length1, char[] set2, int length2, char[] buffer)
Intersect two sorted lists and write the result to the provided output array- Parameters:
set1
- first arraylength1
- length of first arrayset2
- second arraylength2
- length of second arraybuffer
- output array- Returns:
- cardinality of the intersection
-
unsignedIntersects
public static boolean unsignedIntersects(char[] set1, int length1, char[] set2, int length2)
Checks if two arrays intersect- Parameters:
set1
- first arraylength1
- length of first arrayset2
- second arraylength2
- length of second array- Returns:
- true if they intersect
-
unsignedLocalIntersect2by2
protected static int unsignedLocalIntersect2by2(char[] set1, int length1, char[] set2, int length2, char[] buffer)
-
unsignedLocalIntersect2by2Cardinality
public static int unsignedLocalIntersect2by2Cardinality(char[] set1, int length1, char[] set2, int length2)
Compute the cardinality of the intersection- Parameters:
set1
- first setlength1
- how many values to consider in the first setset2
- second setlength2
- how many values to consider in the second set- Returns:
- cardinality of the intersection
-
unsignedOneSidedGallopingIntersect2by2
protected static int unsignedOneSidedGallopingIntersect2by2(char[] smallSet, int smallLength, char[] largeSet, int largeLength, char[] buffer)
-
unsignedUnion2by2
public static int unsignedUnion2by2(char[] set1, int offset1, int length1, char[] set2, int offset2, int length2, char[] buffer)
Unite two sorted lists and write the result to the provided output array- Parameters:
set1
- first arrayoffset1
- offset of first arraylength1
- length of first arrayset2
- second arrayoffset2
- offset of second arraylength2
- length of second arraybuffer
- output array- Returns:
- cardinality of the union
-
toUnsignedLong
public static long toUnsignedLong(int x)
Converts the argument to along
by an unsigned conversion. In an unsigned conversion to along
, the high-order 32 bits of thelong
are zero and the low-order 32 bits are equal to the bits of the integer argument. Consequently, zero and positiveint
values are mapped to a numerically equallong
value and negativeint
values are mapped to along
value equal to the input plus 232.- Parameters:
x
- the value to convert to an unsignedlong
- Returns:
- the argument converted to
long
by an unsigned conversion - Since:
- 1.8
-
partialRadixSort
public static void partialRadixSort(int[] data)
Sorts the data by the 16 bit prefix using Radix sort. The resulting data will be partially sorted if you just take into account the most significant 16 bits. The least significant 16 bits are unsorted. Note that we treat int values as unsigned integers (from 0 to 2^32).- Parameters:
data
- - the data (sorted in place)
-
-